BlueSky:1 – VulnHub

VM: BlueSky:1
Quelle:www.vulnhub.com
Ziel: Root Shell + Flag unter /root/ auslesen.
Tools: NMAP, Dirb, Firefox_decrypt,
Techniken: Netzwerk & Port Scan, Enumeration, Forensik, Exploit Using

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 - 10.10.10.10/24 scannen wir unser Netzwerk auf aktive Geräte, die auf ein Ping antworten. Als Netzwerkadresse muss du dein Netzwerkbereich eingeben.

Bluesky - IPScan

Bei mir wurde der VM die IP 10.10.10.10 (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 10.10.10.10 gibt uns alle offene Ports aus, die auf ein TCP Verbindungsversuch antworten.

BlueSky - PortScan

Wie auf dem Bild zu sehen ist, wurden zwei offene Ports ermittelt:

PortService
22SSH
8080HTTP

Schritt 2: Enumeration

Port 22 – SSH Server

Zu diesem Zeitpunkt können wir hier keine nützliche Information gewinnen.

Port 8080 – HTTP Server (Apache Tomcat)

Zuerst rufen wir unsere IP mit dem gefundenem Port im Browser auf.

BlueSky - Tomcat

Hier sehen wir eine Standardseite von Apache Tomcat in der aktuellen Version. Mehr können wir hier nicht finden. Zum Aufrufen der Manager App oder des Host Manager brauchen wir Benutzername und Passwort, welche wir zu diesem Zeitpunkt nicht haben.

Versuchen wir den Server auf die bekannten Verzeichnisse zu scannen. Dazu nutzen wir wie immer Dirb.

BlueSky - HTTP Scan

Hier finden wir ein Paar Standard Verzeichnisse von Apache Tomcat, allerdings ohne nützliche Informationen.

An dieser Stelle wird es interessant. Es gibt keine weiteren Anhaltspunkte die wir nutzen können. Ich habe es probiert mit unterschiedlichen Programmen und Wordlisten zu scannen, leider hatte ich kein Erfolg dabei. Und dann irgendwann wurde mir eine Wordliste empfohlen mit der ich dann Glück hatte eine Applikation zu identifizieren. Die Wortliste nennt sich qualys_wordlist.txt.

BlueSky - HTTPScan2

Mit der Wortliste können wir einen weiteren Ordner finden und zwar /struts2-showcase/. Öffnen wir ihn im Browser.

BlueSky - Struts 2

Hier finden wir einen Frontend von Struts2 Showcase. Die meisten Links führen zu einem Fehlercode von Apache. Allerdings können wir unter "Configuration - Config Browser - Jars - struts2-core" die Version der Applikation finden.

Schritt 3: Exploration

Das sind alle Informationen die wir bisher finden konnten. Gucken wir ob es bekannte Exploits für Struts2 existieren. Dafür nutze die beste Anlaufstelle www.exploit-db.com.

BlueSky - ExploitDB

Ich habe das Exploit von Vex Woo genommen. Mit dem Befehl "python skriptname.py host cmd" sollte es möglich sein ein RCE Angriff zu machen.

BlueSky - Exploit Struts

Wie wir sehen können hat unser RCE Angriff funktioniert und wir sehen, dass wir uns in dem Home Verzeichnis von dem Benutzer "minhtuan" befinden.

Jetzt, wo wir Befehle auf dem Server ausführen können, müssen wir versuchen uns eine Shell für weitere Schritte zu bekommen. Man kann eine Reverse-Shell aufbauen oder auch ein richtiges SSH-Zugang zu machen. ich habe mich für das zweite entschieden. Dazu generieren wir eine SSH-Schlüsselpaar (ohne Passphrase) und nutzen sie dann für unsere Verbindung.

BlueSky - SSHKeygen

Bei Versuch ein .ssh Ordner zu erstellen bekommen wir folgende Fehlermeldung:

BlueSky - NoSpace

Um Platz auf der Partition zu schaffen habe ich mich entschieden ein Verzeichnis mit Dokumentation von Struts2 zu löschen:

python struts.py http://10.10.10.10:8080/struts2-showcase/ "rm -r struts2/docs"

und dann mit folgenden Befehlen den generierten public key abzulegen.

python struts.py http://10.10.10.10:8080/struts2-showcase/ "mkdir .ssh"
python struts.py http://10.10.10.10:8080/struts2-showcase/ "echo \"ssh-rsa RSA-Public Key\" > .ssh/authorized_keys"

BlueSky - SSHKey2

Mit dem Befehl "ssh -i bluesky minhtuan@10.10.10.10" bauen wir eine SSH-Verbindung mit dem Host auf.

BlueSky - SSH Session

Schritt 4: Privilege Escalation

Jetzt wo wir einen vernünftigen SSH-Zugang zu unserem Host haben, ist die Zeit gekommen ihn weiter zu erkunden.

Direkt im "/home/minhtuan/" Verzeichnis finden wir eine "user.txt" Datei, die auch unser erstes Flag ist.

BlueSky - Flag1

Weitere Erkundung mit Standard Tools wie LinEnum.sh und LinPEAS.sh lieferten keine brauchbaren Ergebnisse zum "privilege escalation". Allerdings fiel beim Scan mit LinPEAS.sh ein vorhandenes Firefox Profil auf.

Da das Datenbank mit den gespeicherten Passwörtern in Firefox verschlüsselt ist, brauchen wir ein Tool um es zu entschlüsseln. Dazu nehme ich das Skript von Renato Alves – unode/firefox_decrypt.

BlueSky - Firefox Profile

Damit finden wir im Firefox gespeicherte Daten für einen Twitter Account. Probieren wir aus ob wir mit dem Passwort sudo Rechte bekommen.

BlueSky - Flag 2

Wie man auf dem Bild sehen kann jetzt haben wir den vollen Root Zugriff und können die Datei "/root/root.txt" auslesen.