EnuBox: Mattermost – Vulnhub

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.

Mattermost Netscan

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.

Mattermost Porscan

Wie auf dem Bild zu sehen ist, wurden fünf offene Ports ermittelt:

PortService
21FTP
22SSH
80HTTP
3389RDP (XRDP)
8065HTTP

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.

Mattermost HTTP

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.

MAttermost http 8065

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:

Mattermost UDP Scan

PortService
68DHCP/BOOTP
69TFTP
631Printing
5353Zeroconf

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.

Mattermost TFTP

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.

Mattermost Login

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.

Mattermost Zoom

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:

Mattermost http zoom link

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.

Mattermost ftp 2

Unter /home/ftpuser/users/mattermost finden wie eine „message„.

Mattermost Message

Die Message ist nicht sehr aussagekräftig. Nach mehreren Versuchen wurde festgestellt, dass man mit dem Benutzermattermost“ und dem Password welches wir in der „message“ Datei gefunden haben, sich per SSH einloggen kann.

MAttermost Login SSH

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.

Matermost SSH

Mattermost ls lh

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.

Mattermost Decompile

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))

Mattermost Hex2Dec

Nach dem Starten der secret Datei bekommen wie eine Bash-Shell mit root Rechten und haben das System komplett unter unserer Kontrolle.

Mattermost Final