VM: EnuBox: Mattermost
Quelle: www.vulnhub.com
Ziel: bekommen der Root Rechte.
Tools: NMAP, Ghidra, FileZilla
Techniken: Netzwerk & Port Scan, Enumeration, Reverse Engineering
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.83
(rot markiert) 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.83
gibt uns alle offene Ports aus, die auf ein TCP Verbindungsversuch antworten.
Wie auf dem Bild zu sehen ist, wurden fünf offene Ports ermittelt:
Port | Service |
21 | FTP |
22 | SSH |
80 | HTTP |
3389 | RDP (XRDP) |
8065 | HTTP |
Schritt 2: Enumeration
Port 21 – FTP Server
Wie wir bei der Ausgabe von NMAP
sehen können, es ist möglich eine FTP-Verbindung ohne Benutzer und Password herzustellen. Leider landen wir beim Verbindungsaufbau in einem leeren Verzeichnis.
Port 22 – SSH Server
Zu diesem Zeitpunkt können wir hier keine nützliche Information gewinnen.
Port 80 – HTTP Server
Hier wird es schon interessanter. Wir sehen eine Seite, die uns sagt, dass wir keinen Zugriff darauf haben und verweist auf eine README.md Datei für weitere Informationen.
Leider ist das die einzige Information, welche wir hier gewinnen könnten. Weitere gezielte Scans mit DIRB
oder manuelle Suche der README.md
Datei war erfolglos.
Port 3389 – RDP (XRDP) Server
Zu diesem Zeitpunkt können wir hier keine nützliche Information gewinnen.
Port 8065 – HTTP Server
Hier finden wir eine Installation von Mattermost. Ohne Möglichkeit zum Registrieren und ohne weitere Informationen.
Hier gehen wir auch leider leer aus. Es sieht so aus, dass wir keine weiteren Informationen aus uns schon bekannten Quellen finden.
Schritt 3: Scanning
Eine weitere Möglichkeit für einen Scan ist ein UDP Scan
. Dieser Scan dauert viel länger als TCP Scan
, da UDP
im Gegensatz zu TCP
ein verbindungloses Protokoll ist.
Wie auf dem Bild zu sehen ist, wurden fünf offene Ports ermittelt:
Port | Service |
68 | DHCP/BOOTP |
69 | TFTP |
631 | Printing |
5353 | Zeroconf |
Schritt 4: Enumeration
Port 69 – TFTP
Ein TFTP Server
. Hier gibt es keine Benutzer, Passwörter, Rechte etc. Leider gibt es hier auch keine Auflistung der vorhandenen Dateien. Aber wir haben oben ein Verweis auf die README.md
Datei erhalten. Probieren wir aus, ob die Datei hier vorhanden ist.
Bingo! Die Datei ist vorhanden und liefert uns ein Password und vermutlich einen Benutzer:
Admin:ComplexPassword0!
Schritt 5: Infiltration
Probieren wir die Zugangsdaten an der früher gefundener Mattermost Installation.
Jetzt sind wir ein Schritt weiter. Wir sind eingeloggt als Administrator und können beliebige Einstellungen am System ändern. Leider wurde nach dem Erforschen von verschiedenen Parameter keine Möglichkeit gefunden Dateien zu Ändern oder diese so hoch zu laden, dass diese ausführbar sind.
Beim Lesen von dem Admin geschrieben Nachrichten ist es aber aufgefallen, dass das Wort Zoom
sehr oft wiederholt wird. Und bei dem Erforschen haben wir gesehen, dass es ein Plugin für Zoom
existiert. Gucken wir das uns mal näher an.
In den Einstellungen von dem Plugin sehen wir bei Zoom URL
eine Adresse, die auf Localhost
verweist. Da Localhost
immer auf den eigenen Rechner zeigt, würde der Link nur beim Aufrufen von dem Server funktionieren. Was nicht wirklich einen Sinn macht, da man keine Zoom Session auf eigenen Rechner macht. Versuchen wir den Localhost
mit der IP-Adresse
von dem Server auszutauschen.
http://192.168.178.83/JK94vsNKAns6HBkG/AxRt6LwuA7A6N4gk/index.html
Nach dem Aufruf von dem angepasstem URL finden wir folgende Information:
Schon wieder FTP?
Wir haben schon den FTP Server durchgesucht. Jetzt haben wir aber die Zugangsdaten für mehr oder weniger privilegierten Account. Loggen wir uns mit den Zugangsdaten ein.
Unter /home/ftpuser/users/mattermost
finden wie eine „message
„.
Die Message
ist nicht sehr aussagekräftig. Nach mehreren Versuchen wurde festgestellt, dass man mit dem Benutzer
„mattermost
“ und dem Password
welches wir in der „message
“ Datei gefunden haben, sich per SSH
einloggen kann.
Schritt 6: Reverse Engineering
Nach dem Umschauen können wir eine secret
Datei finden, die mit root
rechten ausgeführt wird. Das Passwort
aus der in demselben Verzeichnis liegender README.md
Datei passt leider nicht.
Versuchen wir die Datei zu dekompilieren. Dafür müssen wir die Datei auf unseren Rechner herunterladen. Das kann man z.B. per FTP machen, da das Verzeichnis ist auch über FTP sichtbar. Zum Dekompilieren laden die Datei einfach in Ghidra
. Das ist ein sehr nützliches Tool für Reverse Engineering. Nachdem wir die secret
Datei in Ghidra analysiert haben, können wir folgenden Quellcode sehen.
Hier können wir in der Zeile 13 sehen, wie der Wert in der Zeile 12 abgefragten Variable local_14
mit der Zahl 0xf447
verglichen wird. Also muss die Zahl 0xf447
von Hexadezimal in Dezimal umgewandelt und beim Start der secret
Datei eigegeben werden.
echo $((0xf447))
Nach dem Starten der secret
Datei bekommen wie eine Bash-Shell
mit root
Rechten und haben das System komplett unter unserer Kontrolle.