PHDays CTF Quals 2012 –
Pwn 400

PHDays CTF 2012 - Pwn 400 - task description

Bei dieser Challenge (Pwn 400) wird ein Server mit Port genannt und der Hinweis gegeben, dass mit der Funktion “Reader()” drei Dateien ausgelesen werden könnten.

Um einen Überblick über die vor uns liegende Aufgabe zu erhalten, verbinden wir uns zunächst mit dem Server und Testen deren Funktionsmöglichkeiten aus:

rup0rt@lambda:~/PHDays2012$ nc ctf.phdays.com 1831
>>> Reader
<function Reader at 0x86a28ec>

>>> Reader("log.1")
<Some ASCII here...>

>>> Reader("flag.txt")
ValueError : You can't read that shit!

Es handelt sich also um eine Python-Schnittstelle (was die drei “>>>” andeuten). Die Funktion “Reader()” listet uns unter Angabe eines Dateinamens deren Inhalt auf. Dabei können jedoch nur die drei Dateinamen angegeben werden, die in der Aufgabenbeschreibung genannt werden. Andere Namen führen zu einer Fehlermeldung.

Um uns nun weiter voran zu arbeiten, untersuchen wir zunächst die Python-Umgebung und die uns zur Verfügung stehenden Funktionen mit der Methode “dir()”:

>>> dir()
['Reader', '__builtins__', '__doc__', '__file__', '__name__',
'__package__', 'a', 'e', 'inp']

>>> dir(__file__)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',
'__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__',
'__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'_formatter_field_name_split', '_formatter_parser', 'capitalize',
'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower',
'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip',
'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition',
'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip',
'swapcase', 'title', 'translate', 'upper', 'zfill']

Wir sehen, dass uns neben der Funktion “Reader()” nicht viel weiteres bereitgestellt wird und auch aus der “file”-Bibliothek die für uns interessanten Funktionen, wie beispielsweise “open()” entfernt wurden. Wir müssen also einen anderen Weg finden, um an die von uns gewünschten Methoden zu gelangen.
Continue reading

PHDays CTF Quals 2012 –
Pwn 300

PHDays CTF 2012 - Pwn 300 - task description

Neben einigen zusätzlichen Informationen wird uns bei dieser Challenge (Pwn 300) die URL eines Webservers genannt, mit dem wir angeblich die Kontrolle über die Stadt South Park erlangen können.

Der Besuch der Webseite liefert uns folgendes Ergebnis:

PHDays CTF 2012 - Pwn 300 - website

Über die Oberfläche haben wir die Möglichkeit ausgewählte Bürger von South Park zu töten, einzusperren oder in den Bankrott zu treiben. Das Ausführen der Handlung führt immer zu einer Bestätigung, dass die Aktion vollzogen wurde. Eine genauere Betrachtung des Quellcodes der Webseite offenbart uns:

PHDays CTF 2012 - Pwn 300 - source code

Wir finden also heraus, wo sich der Schlüssel und somit das Ziel der Challenge befindet, nämlich in der Datei “/etc/passwd”. Über diesen Hinweis wissen nun also auch, dass unser Weg uns irgendwie auf das lokale Dateisystem führen muss – also zum Beispiel über einen “Directory Traversal” oder das Ausnutzes der Webserver-Skripte.
Continue reading

PHDays CTF Quals 2012 –
Misc 400

Für diese interessante Aufgabe (Misc 400) gab es nicht viele Informationen:

PHDays CTF 2012 - Misc 400 - task description

Als erstes bietet es sich an, sich mit Hilfe von netcat einen Überblick über die Aufgabe zu verschaffen. Nachdem man sich mit ctf.phdays.com:1165 verbunden hat, bekommt man folgende Ausgabe:

Hi there! Stupid CAPTCHA: enter your name, user61758

Hier ist verlangt, user61758 als Antowort zurück zu geben, da sich sonst das Programm beendet. Jetzt muss man eine gewisse Zeit warten, bis sich der Server wieder meldet. Ob diese Wartezeit beabsichtigt oder der Server einfach nur ausgelastet war, weiss ich leider nicht.

Der Server antwortet mit einem Labyrinth, das aus 50 solcher Ebenen besteht:

PHDays CTF 2012 - Misc 400 - maze

Danach fordert uns der Server auf:

“Find a path between (…, …, …) and (…, …, …)”

Die Aufgabe bestand also darin, einen Pfad von Punkt A nach Punkt B zu finden. Dafür habe ich ein Skript geschrieben, welches das Labyrinth parst und dann auch löst.
Continue reading

PHDays CTF Quals 2012 –
Misc 200

PHDays CTF 2012 - Misc 200 - task description

Diese Challenge (Misc 200) hat das Ziel, das “braune Quadrat” näher zu untersuchen um darin wohlmöglich weitere Informationen zu finden. Zusätzlich zu dieser Aufgabenbeschreibung erhalten wir eine ZIP-Datei.

Als erstes entpacken wir das Archiv und stellen fest, dass ein GIF-Bild enthalten ist, das sich wie folgt darstellt:

PHDays CTF 2012 - Misc 200 - original GIF image

Zu unserer Überraschung finden wir kein “braunes Quadrat”, sondern nur ein schwarzes. Der Text aus der Aufgabenbeschreibung könnte jedoch ein Hinweis sein, dass Farben bei der Lösung dieser Challenge eine Rolle spielen.

Im Vergleich zu anderen Bildformaten unterscheiden sich GIF-Dateien unter anderem dadurch, dass nicht jeder Pixel für sich eine Farbe erhält, sondern jedem Pixel eine Farbe aus einer vorher definierten Farbtabelle (einer sogenannten colormap) zugeordnet wird.

Wir könnten nun, wie allgemein üblich, das Werkzeug Stegsolve verwenden um einige Untersuchungen an der GIF-Datei durchzuführen und dabei auch die Farbtabellen überprüfen. An dieser Stelle möchte ich jedoch zeigen, wie man auch mit dem Programm GIMP zum Ziel kommen kann.
Continue reading