CSAW CTF Qualifiers 2012 –
Reversing 300

Auch bei dieser Challenge (Reversing 300) bekommen wir zunächst nur ein .EXE-Binary, das wir der näheren Begutachtung unterziehen müssen. Diese Aufgabe ist der Challenge Reversing 200 sehr ähnlich, so dass wir relativ analog vorgehen und mit einer Untersuchung des Dateityps beginnen können.

rup0rt@lambda:~/CSAW2012$ file CSAWQualification.exe 
CSAWQualification.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows

Es handelt sich wiederum um eine Datei, die mit dem Microsoft .NET-Framework erstellt wurde, weshalb wir, genau wie in der vorherigen Challenge auch, zur Bearbeitung eine Virtuelle Maschine (wieder ein Windows XP SP3) verwenden werden. Aus Neugier erfolgt als Erstes auch ein Ausführen der Datei mit dem diesem Ergebnis: ;-).

CSAW CTF 2012 - Reversing 300 - normal execution

Der Ersteller der Challenge fragt uns hier, ob wir wirklich einfach immer die Binarys aus CTFs ausführen (ohne nachzudenken) und es bleibt nur eine Antwort: JA, Natürlich!! Wir sind neugierig und wollen unbedingt wissen, was passiert!! :-P

Unsere Erwartung, dass der Schlüssel zur Challenge einfach direkt ausgegeben wird und wir uns die 300 Punkte sichern können, wird jedoch enttäuscht und wir müssen tatsächlich noch mehr tun, um die Aufgabe zu lösen :-).

Continue reading

CSAW CTF Qualifiers 2012 –
Reversing 200

Ohne viel Aufgabenbeschreibung wird bei dieser Challenge (Reversing 200) nur eine .EXE-Datei bereit gestellt. Diese näher zu betrachten und daraus irgendwie einen Weg zum Schlüssel der Challenge erkennen zu können, wird demnach den ersten Schritt darstellen. Wir beginnen damit, uns die Art der Executable detaillierter anszusehen.

rup0rt@lambda:~/CSAW2012$ file CSAWQualificationEasy.exe 
CSAWQualificationEasy.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows

Es handelt sich also um eine ausführbare Datei, die mit Hilfe des Microsoft .NET-Frameworks bzw. des quelloffenen mono-Frameworks erstellt wurde. Der erste Gedanke, der uns bei .NET-Binarys immer kommen sollte ist, dass sich solche Dateien relativ unproblematisch decompilen und so in den ursprünglichen Quellcode überführen lassen.

Wir starten also eine geeignete Virtuelle Maschine – ich verwende hier ein Windows XP – Service Pack 3 unter VirtualBox. Auch wenn man fremde Binarys nie einfach so ausführen sollte, bin ich immer neugierig und in einer virtuellen Maschine darf man sich so etwas schonmal erlauben ;-). Das Ergebnis sieht folgendermaßen aus:

CSAW CTF 2012 - Reversing 200 - normal execution

Der Text deutet an, dass eine Berechnung im Hintergrund statt findet, der Autor nur vergessen hat, das eigentliche Ergebnis danach auch auf dem Bildschirm ausgeben zu lassen. Es wird also Zeit, das Decompiling durchzuführen und den Quellcode dieses Programmes genauer zu untersuchen.

Continue reading

plaidCTF 2012 –
Supercomputer 1

plaidCTF 2012 - Supercomputer 1 - task description

Bei dieser Challenge (Supercomputer 1) wird uns ein Programm zur Verfügung gestellt, dass angeblich vier riesige Zahlen berechnen soll. Um die Aufgabe zu lösen, müssen wir an die erste Zahl gelangen.

Bei der Software handelt es sich um ein 64bit-Linux-Binary mit einer Größe von circa 10 Kilobytes. Ein erster Testlauf in einer virtuellen Maschine liefert folgende Ausgabe:

rup0rt@linux64:~$ ./supercomputer
Calculating the first key......This could take long..........^C

Das Programm lässt sich also ausführen und scheint im Hintergrund irgendetwas zu tun, was eine entsprechend lange Zeit dauert bzw. dauern soll. Ein Blick auf die Prozessorauslastung zeigt jedoch, dass dieser nicht sonderlich beansprucht ist, was eher auf eine Pseudo-Berechnung hindeutet.
Continue reading

Nuit du Hack 2012 Quals –
Strange binary file #2

Nuit du Hack 2012 - Strange binary file #2 - task description

Kaum haben wir die vorherige Challenge gelöst, meldet sich Jessica erneut mit einem Auftrag (Strange binary file #2). Sie sendet unter anderem eine weitere Binärdatei, über die sie Informationen verlangt. Da wir aus der Challenge “Strange binary file” nun bereits wissen, wie mit diesen .NDH-Dateien umzugehen ist, machen wir uns direkt ans Werk.

Bei der ersten Debug-Ausführung mit Eingabe eines beliebigen Passwortes fällt bereits auf, dass mehrfach folgende Überprüfung statt findet.

rup0rt@lambda:~/strange_binary_file_2$ ./vmndh -file executable2.ndh -debug
[Console]#> run
[...]
0x8538 > cmpb r0, #11
0x853c > jnz 0x03
0x8542 > cmpb r0, #1
0x8546 > jnz 0x07
0x8550 > cmpb r0, #2
0x8554 > jnz 0x07
0x855e > cmpb r0, #3
0x8562 > jnz 0x07
0x856c > cmpb r0, #4
0x8570 > jnz 0x07
0x857a > cmpb r0, #5
0x857e > jnz 0x07
0x8588 > cmpb r0, #6
0x858c > jnz 0x07
0x8596 > cmpb r0, #7
0x859a > jnz 0x07
0x85a4 > cmpb r0, #8
0x85a8 > jnz 0x07
0x85b2 > cmpb r0, #9
0x85b6 > jnz 0x07
[...]

Folgt man den einzelnen Sprungmarken, stellt man fest, dass hinter jeder Zahl verschiedene Anweisungen stecken, die das Kopieren von Daten, das Verschieben, Shiften oder anderweitige Manipulationen durchführen.
Continue reading

Nuit du Hack 2012 Quals –
Strange binary file

Nuit du Hack 2012 - Strange binary file - task description

Zeitgleich mit dem Dank die Challenge “Unknown zip archive” beendet zu haben, hat Jessica schon den nächsten Auftrag (Strange binary file) für uns. Diesmal geht es um eine merkwürdige Binärdatei, die uns als möglicherweise ausführbar, jedoch nicht als ELF-Datei, beschrieben wird.

Wir sehen uns als zuerst einmal den Inhalt der Datei etwas genauer an.

rup0rt@lambda:~/strange_binary_file$ xxd executable1.ndh
0000000: 2e4e 4448 8e04 1bdf 0301 0301 0103 0204  .NDH............
0000010: 0201 0000 0402 0200 0004 0a01 0017 0101  ................
[...]
00003e0: f8fe 1c0e 0000 001a 0402 0015 8419 04cf  ................
00003f0: fe07 0108 2004 0002 0804 0101 0004 0103  .... ...........
0000400: 1f04 0100 0330 0400 0002 1904 e0fe 1904  .....0..........
0000410: d2fe 1c02 0503 0708 0601 0953 6369 7465  ...........Scite
0000420: 656b 2070 726f 7465 6374 6564 2073 746f  ek protected sto
0000430: 7261 6765 2023 310a 456e 7465 7220 796f  rage #1.Enter yo
0000440: 7572 2070 6173 7377 6f72 643a 2000 7363  ur password: .sc
0000450: 6974 6565 6b2e 6e75 6974 6475 6861 636b  iteek.nuitduhack
0000460: 2e63 6f6d 3a34 3030 3100 6d79 787a 4a61  .com:4001.myxzJa
0000470: 4b45 2e74 7874 0047 6f6f 6420 7061 7373  KE.txt.Good pass
0000480: 776f 7264 0a00 4261 6420 7061 7373 776f  word..Bad passwo
0000490: 7264 0a00                                rd..

Was besonders auffällt, ist der Anfang, der mit den Buchstaben “NDH” beginnt und die an dieser Stelle höchst wahrscheinlich der “Nuit du Hack” zuzuordnen sind. Wir erinnern uns, dass ELF-Dateien ähnlich beginnen, indem bei diesen auch der Dateityp -“ELF”- am Anfang der Datei zu finden ist.
Continue reading

RuCTF 2012 Quals –
Discern utility

RuCTF 2012 - Discern utility - task description

Die Aufgabenstellung (Discern utility) spricht von einer aufgefundenen Datei und verlangt von uns festzustellen, was der deren Inhalt beschreibt. Bei dem Dokument selbst handelt es sich nur um eine Textdatei, deren Inhalt mit 73 Zeilen recht überschaubar ist. Ein erster Blick in die Daten zeigt uns:

brk(0)                                  = 0x2335000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9bfad31000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=117316, ...}) = 0

Hierbei handelt es sich um “System Calls” (Syscalls), das heißt, rudimentäre Systemfunktionen, die im Kernel verankert sind und aus denen die Funktionalität aller komplexen Programme aufgebaut wird. Welche Syscalls ein Programm verwendet, lässt sich mit dem Werkeug “strace” herausfinden. Und genau dieses Werkzeug wurde auch hier verwendet um die Aufgabe dieser Challenge zu stellen.

Um die Aufgabe zu lösen müssen wir also herausfinden, welches Werkzeug die uns zur Verfügung gestellte strace-Ausgabe liefert. Sehen wir uns dazu die gesamte Textdatei an und versuchen, Merkmale des aufgerufenen Programmes zu identifizieren. Folgende Syscalls sollten hierbei auffallen:
Continue reading