Hack.Lu CTF 2012 – Zombie AV

Hack.Lu CTF 2012 - Zombie AV - task description

Diese Challenge (Zombie AV) liefert uns einige PHP-Dateien und nennt das Ziel, den Inhalt der Datei “config.php” auf einer bestimmten Webseite auszulesen. Ohne die PHP-Quellcodes vorher zu betrachten rufen wir zunächst die Webseite auf um uns einen Überblick über die vor uns liegende Aufgabe zu verschaffen.

Hack.Lu CTF 2012 - Zombie AV - virus upload

Es scheint sich um einen online AntiVirus (AV) Scanner zu handeln, dem Dateien übergeben werden können um auf das Vorhandensein von Viren zu prüfen. Wir testen das System probeweise mit einer beliebigen 32bit Binärdatei mit folgendem Ergebnis:

Hack.Lu CTF 2012 - Zombie AV - virus scan

Dem Anschein nach prüft das System den Beginn (ELF Header) des Binarys auf eine bestimmte (Viren-) Signatur. Welche Opcodes hier genau erwartet werden und was für eine Reaktion bei Fund erfolgt, können wir nur erahnen und müssen uns daher nun den PHP-Quellcodes widmen.

Continue reading

CSAW CTF Qualifiers 2012 –
Networking 200

“Some dude I know is planning a party at some bar in New York! I really want to go but he’s really strict about who gets let in to the party. I managed to find this packet capture of when the dude registered the party but I don’t know what else to do. Do you think there’s any way you can find out the secret password to get into the party for me? By the way, my favorite hockey player ever is mario lemieux.”

Zusätzlich zu diesem Text, wird uns bei der “Networking 200” – Challenge auch eine PCAP-Datei bereit gestellt. Das Ziel ist, mit Hilfe dieser Netzwerkdaten, herauszufinden, wie das “geheime Passwort” lautet, das erforderlich ist, um Zugang zur Party zu erhalten.

Wir öffnen als Erstes die Datei mit Wireshark um uns einen Überblick zu verschaffen. Die Datei selbst ist über 64 Megabytes groß, was ein manuelles Durchsuchen nach auffälligen Inhalten fast unmöglich macht. Daher betrachten wir zunächst die “Protocol Hierarchy”-Statistiken in Wireshark.

CSAW CTF 2012 - Networking 200 - Protocol hierarchy

Hieraus erkennen wir, dass die Datei insgesamt über 73000 Pakete umfasst, die größtenteils TCP-Daten darstellen. Die einzigen Daten, die von Wireshark einem Protokoll zugeordnet werden konnten und von uns sinnvoll interpretiert werden können, sind HTTP-Daten.

Continue reading

CSAW CTF Qualifiers 2012 –
Web 300

http://128.238.66.217/
“This is a website belonging to a horse-fighting gang. Even with an account, it’s not clear what they’re up to. Your task is to get administrator access and see if you can figure anything out. Your account is csaw_challenger/letmein123.”

Bei der Challenge Web 300 handelt es sich um ein Board, in der diverse Informationen präsentiert werden. Dies umfasst im wesentlichen jeweils eine Seite mit News, bzw. Benutzerinformationen oder jegliche Informationen zu Pferden (Name, Beschreibung etc pp).

CSAW CTF 2012 - Web 300 - website

Die Seiten selbst werden per GET Request weiter verarbeitet. Ausserdem stellt man recht schnell fest, dass ein Session Cookie des aktuell angemeldeten Benutzers gesetzt wird. Somit muss man wohl irgendwie versuchen die Session des Administrators zu übernehmen. Bei näherer Untersuchung fällt auf, dass jegliche Informationen mittels URI (id=XXX) ausgewertet werden. Das lässt vermuten, dass bei dieser Challenge eine SQL Injection Schwachstelle ausgenutzt werden muss. Das wird auf den Seiten “user.php” und “horse.php” überprüft.

http://128.238.66.217/user.php?id=1′ or ‘1’=’1      => keine Schwachstelle
http://128.238.66.217/horse.php?id=1′ or ‘1’=’1    => Schwachstelle !!!

CSAW CTF 2012 - Web 300 - SQL injection error message

Continue reading

CSAW CTF Qualifiers 2012 –
Exploitation 200

Diese Challenge (Exploitation 200) stellt ein Binary bereit und verlangt von uns:

“Read the key out of ./key in the current working directory.”

Zusätzlich wird der Server “128.238.66.218” mit dem Port “54321” genannt.

Es geht also darum, die bereitgestellte ausführbare Datei, die auch auf dem genannten Server an Port 54321 betrieben wird, so durch das Senden von Daten auszunutzen, dass wir an den Inhalt der “key”-Datei gelangen, die auf dem Server abgelegt ist.

Wir sehen uns das Binary wie üblicherweise mit dem Tool “file” genauer an, um die zum Bearbeiten erforderliche Virtuelle Machine bestimmen zu können.

rup0rt@lambda:~/CSAW2012$ file exploitation1-release
exploitation1-release: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x94e984380a61d713c1a614f40eeee92c533593d4, not stripped

Es handelt sich um ein normales 32-bit Linux-Programm. Ich starte daher eine entsprechende Machine, hier ein Debian GNU Linux 6.0 über VirtualBox.

Auf der Virtuellen Machine legen wir zunächst eine “key”-Datei mit beliebigem Inhalt an. Diese soll die Datei auf dem Server nachstellen und beim späteren Testen des Exploits unterstützen, den Erfolg des Auslesens feststellen zu können. Danach starten wir die Datei machen uns mit der Funktionsweise des Binarys vertraut.

user@linux:~$ ./exploitation1-release 
Got a connection from 127.0.0.1 on port 50047

user@linux:~$ nc localhost 54321
Wecome to my first CS project.
Please type your name:  rup0rt
user@linux:~$

Genau wie auf dem Zielserver lauscht das Binary auf Port 54321. Nach dem Verbindungsaufbau mit “netcat” werden wir begrüßt und zur Eingabe unseres Namens aufgefordert. Nachdem dieser Abgesendet wurde, passiert nichts weiter.

Dem Anschein nach wird die Lösung dieser Challenge also darin bestehen, eine geeignete Zeichenkette zu wählen, so dass die interne Bearbeitung des Namens zu einem (ungewollten) Programmverhalten führt, durch das wir an den Inhalt der “key”-Datei gelangen können.

Continue reading

CSAW CTF Qualifiers 2012 –
Reversing 400

Bei dieser Challenge (Reversing 400) wird uns wiederholt nur “wortlos” eine Datei übergeben. Wir sind also wieder völlig auf uns gestellt, herauszufinden, wie und wo in diesem Binary der Schlüssel zur Aufgabe versteckt ist.

Wie gewohnt beginnen wir mit einer Untersuchung des Dateityps mit dem Tool “find”:

rup0rt@lambda:~/CSAW2012$ file csaw2012reversing
csaw2012reversing: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x012c3cf67d5aa15a9985ea064958921dc600c367, not stripped

Dieses Mal handelt es sich also um ein Linux-Binary, das für ein 64bit-System kompiliert wurde. Es wird daher Zeit, die entsprechende Virtuelle Machine zu starten (hier ein Debian GNU Linux 6.0) um die Datei näher zu betrachten.

Wie gewöhnlich lässt uns die Neugier nicht im Stich und wir führen die Datei zu aller Erst ohne Nachzudenken einfach aus! Als Antwort erhalten wir:

CSAW CTF 2012 - Reversing 400 - normal execution

Das Programm scheint uns hier den verschlüsselten Key zum Lösen der Challenge auszugeben, der uns jedoch in dieser Form überhaupt nichts nützt. Um zu prüfen, ob es sich wirklich um verschiedene Zeichen handelt – denn die Ausgabe wirkt durch die Fragezeichen recht merkwürdig – nutzen wir das Werkzeug “xxd”.

CSAW CTF 2012 - Reversing 400 - encrypted key

Es handelt sich also tatsächlich um einen 16 Byte langen, verschlüsselten String. Demnach muss nun ein Weg gefunden werden, diesen Key zu entschlüsseln!

Continue reading

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!! 😛

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

CSAW CTF Qualifiers 2012 –
Web 200

Die diesjährige CSAW Web 200 – Challenge führt uns zunächst auf einen Webserver, bei dem das Indexing aktiviert ist. Demnach können wir alle Dateien, die sich im Pfad befinden, sehen und erhalten folgende Ansicht:

CSAW CTF 2012 - Web 200 - directory listing

Im Verzeichnis befinden sich vier PHP-Dateien sowie ein PHP-Quellcode-Datei (.phps). Bevor wir uns mit Quellcodes und ähnlichem befassen, sehen wir erst einmal, mit was für einer Art System bzw. Web-Anwendung wir es hier zu tun haben. Dazu rufe ich kurz die Seiten auf, um einen Überblick über deren Funktion zu bekommen.

CSAW CTF 2012 - Web 200 - login form

CSAW CTF 2012 - Web 200 - registration form

Dem ersten Anschein nach handelt es sich also um ein simples System zum Einloggen, Registrieren und Zurücksetzen von Benutzeraccounts. Das Erstellen eines eigenen Kontos funktioniert und ermöglicht den Login, jedoch ohne weitere Informationen von der Seite zu erhalten.

Continue reading

CSAW CTF Qualifiers 2012 –
Forensics 200

CSAW CTF 2012 - Forensics 200 - forensic image

Wenn man sich “version1.png” der Challenge “Forensics 200” (Part 1) im Editor anschaut fällt sofot ins Auge, dass im PNG File jede menge TextComments mit dazugehörigen Namen in folgendem Format existieren:
tExtcomment^@key{…….}

CSAW CTF 2012 - Forensics 200 - PNG text comments

Mit “strings” und “grep” wird das ganze erstmal in lesbare Form gebracht.

=> strings version1.png | grep key

CSAW CTF 2012 - Forensics 200 - extracted png comments

Da das ganze immer noch nicht übersichtlich genug ist, wird das ganze verfeinert und nur die Namen in keys{….} sortiert ausgegeben.
Die Sortierung ist dabei völlig optional und nur zum besseren Verständis gedacht.
Zusätzlich wird der Output in einer Datei “persons1.txt” gespeichert.

Continue reading

Defcon 20 CTF Prequals 2012 –
Forensics 300

Auch bei dieser Challenge (Forensics 300) wird uns eine Datei zum Download bereit gestellt und es heißt wieder “Get the Key!“. Eine erste Untersuchung der Daten mit dem Werkzeug “file”, um den Dateityp in Erfahrung zu bringen, liefert uns jedoch nur:

rup0rt@lambda:~/f300$ file for300-47106ef450c4d70ae95212b93f11d05d
for300-47106ef450c4d70ae95212b93f11d05d: data

Wenn selbst “file” den Dateityp nicht erkennen kann, muss es sich entweder um ein proprietäres Format oder einen sehr seltenen Dateityp handeln. Uns bleibt hier nichts anderes übrig, als uns die Datei manuell anzusehen.

rup0rt@lambda:~/f300$ xxd for300-47106ef450c4d70ae95212b93f11d05d | head
0000000: 5ea3 a417 0000 0020 0000 0000 7369 676e  ^...... ....sign
0000010: 6174 7572 653d 7772 676e 6430 385f 646c  ature=wrgnd08_dl
0000020: 6f62 5f64 6972 3831 3500 0000 5ea3 a417  ob_dir815...^...
0000030: 0000 0024 0038 e020 70e0 30e2 5e2a ff77  ...$.8. p.0.^*.w
0000040: 7eef 8466 08c3 9b2b 6465 763d 2f64 6576  ~..f...+dev=/dev
0000050: 2f6d 7464 626c 6f63 6b2f 3200 7479 7065  /mtdblock/2.type
0000060: 3d66 6972 6d77 6172 6500 0000 5d00 0000  =firmware...]...
0000070: 02b4 e72d 0000 0000 0000 4e03 fc00 8c66  ...-......N....f
0000080: f858 2fa1 b8d4 a5bf 319b 56ad 7e8f ad62  .X/.....1.V.~..b
0000090: 75bc 8a42 ed6b c347 8461 d9f2 5faf e5df  u..B.k.G.a.._...

Aha! Es handelt sich hier scheinbar um ein Firmware-Image. Vermutlich, da die Zeichenkette enthalten ist, um das eines “DIR-815“-Routers der Firma DLink. Firmware-Images sind meist Sammlungen aus weiteren Daten beziehungsweise Dateien, wie Boot-Images, gepackte Dateisysteme oder Konfigurationsdaten. Um solche Daten innerhalb eines Images ausfindig zu machen, existiert das Werkzeug “binwalk“, das speziell auf die Analyse von Firmwares ausgelegt ist.
Continue reading