Für die “Bin-Pwn 100” Challenge wird uns ein Archiv bereit gestellt sowie die recht simple Aufgabenbeschreibung:
Retrieve the key!
genannt.
Wir arbeiten uns also langsam vor, entpacken als erstes die Datei und sehen uns den Inhalt genauer an:
rup0rt@linux:~/PoliCTF2012$ tar xfvz umad.tar.gz jpeg/ jpeg/jconfig.h jpeg/jpeglib.h jpeg/jmorecfg.h jpeg/jerror.h libjpeg.a Makefile umad.cpp
Im Archiv befinden sich Header-Dateien der JPEG-Bibliothek, die statisch kompilierte JPEG-Bibliothek selbst (libjpeg.a) sowie eine C++-Quellcodedatei “umad.cpp” und deren Makefile. Wir kompilieren zunächst den Quellcode mit Hilfe der “Makefile” um so das Verhalten abzuschätzen.
rup0rt@linux:~/PoliCTF2012$ make g++ -o umad umad.cpp -L. -ljpeg rup0rt@linux:~/PoliCTF2012$ ./umad Done rup0rt@linux:~/PoliCTF2012$ ls -lh drwxr-xr-x 2 creeq creeq 4.0K May 26 00:23 jpeg -rw-r--r-- 1 creeq creeq 1.4M Aug 8 16:11 libjpeg.a -rw-r--r-- 1 creeq creeq 56 May 26 00:30 Makefile -rw-r--r-- 1 creeq creeq 13K Nov 21 17:15 out.jpeg -rwxr-xr-x 1 creeq creeq 422K Nov 21 17:15 umad -rw-r--r-- 1 creeq creeq 3.3K May 26 10:51 umad.cpp
Anhand der Kompilierungszeile der Makefile erkennen wir, dass sowohl die JPEG-Header-Dateien (-l) als auch die statische JPEG-Library (-L) tatsächlich für die Kompilierung verwendet werden. Die Ausführung des erstellten Programmes “umad” liefert eine weitere Datei “out.jpeg”, die wir uns als nächstes ansehen.
Bis auf die Frage “U MAD ?” ist an diesem Bild nichts besonderes erkennbar. Auch nach binärer Betrachtung scheint es sich um ein herkömmliches JPEG-Bild zu handeln. Das Betrachten des C++-Quellcodes sowie der Header-Dateien lässt uns ebenfalls keine besonderen Auffälligkeiten vorfinden.
Continue reading