Marlon Starkloff

JavaLand 2024 CTF Lösung

Knowledge Base

Nachdem das JavaLand auch dieses Jahr wieder vorbei ist, stellt sich der ein oder andere die Frage, was die Lösung für das CTF (Capture The Flag) war.

1. Schritt: Thorsten

Den ersten Schritt hat im Grunde jeder geschafft. Es musste nur der Thorsten Chatbot nach den ersten Hinweis gefragt werden. So wie es auch ausgeschildert war.

Thorsten

2. Schritt: Ninjaneers Webseite

So wie es uns Thorsten gesagt hat, finden wir den nächsten auf der Ninjaneers Webseite. Dort ist ein JavaScript Code-Snippet versteckt.

Rev

Als Kommentar steht dort, dass diese Funktion mit dem Javaland WLAN Passwort getestet wurde. Schaut man sich die Funktion genauer an, erkennt man, dass es sich um eine einfache XOR-Chiffre handelt. Ebenso kann man herleiten, dass die Funktion einen String als Parameter annimmt, sowie einen Array zurückgibt.

Über der Funktion ist außerdem ein Array sichtbar, welcher ebenfalls als Kommentar dort steht. Dieser Array ist ein potenzieller Rückgabewert der Funktion. Ziel ist es nun, aus diesem Array das WLAN Passwort herzuleiten. Da es sich wie oben erwähnt um eine XOR-Chiffre handelt, kann man den Array einfach erneut durch die Funktion führen und erhält somit das Passwort.

Rev-Code

Nun hat man das WLAN Passwort für das Ninjaneers WLAN Netzwerk, welches während der JavaLand Konferenz aktiv war.

3. Schritt: Bitte ein Bit

Jetzt kommt der vermutlich schwierigste Schritt, welcher zugleich am längsten gedauert hat. Ist man nun mit dem Netzwerk verbunden, findet man schnell den Raspberry Pi und einen HTTP-Server. Geht man jetzt auf die Webseite des RPi, findet man folgendes Bild.

Encoded

Das Bild ähnelt auf den ersten Blick einem QR-Code. Nun galt es herauszufinden, was man mit dem Bild anzustellen hat. Schaut man sich das Ende des Bildes an, so erkennt man mehr als nur schwarze und weiße Pixel.

Red Pixel

Ein rotes Pixel und danach nur noch schwarze. Das rote Pixel dient als Stopp-Pixel. Da danach nur noch schwarze Pixel kommen, kann man annehmen, dass alle schwarzen Pixel “0” repräsentieren und die weißen Pixel “1". Versucht man nun alle Pixel einzulesen und als UTF-8 zu interpretieren, merkt man schnell, dass es nicht für jedes Zeichen funktioniert. Der Grund dafür ist die Tatsache, dass alle führenden Nullen vom Byte entfernt werden.

01000001 (A) => 1000001
00100000 (Space) => 100000

Jetzt ist die Frage wie man herausfindet, welches Zeichen diese Bits repräsentieren. Was nicht einfach ist, weil Informationen (die Nullen) fehlen. Nun gibt es sicherlich verschiedene Methoden, den Text zu dekodieren. Ich habe mich für folgende Methode entschieden.

  1. Eine Liste aller möglichen Zeichen aufbauen
  2. Jeden Eintrag der Liste in Bits umwandeln und die führenden Nullen entfernen
  3. Die Liste nach Länge der Elemente sortieren (absteigend)

Danach erhält man eine Liste, die wie folgt aussieht:

10000000011110 („)
10000000011100 (“)
11100100 (ä)
11110110 (ö)
11111100 (ü)
1100001 (a)
1100010 (b)
1100011 (c)
1100100 (d)
1100101 (e)
1100110 (f)
[...]

Der nächste Schritt ist, mit dem ersten Eintrag (10000000011110) anzufangen und zu überprüfen, ob die ersten n Bits des extrahierten Bit-Strings diesen Eintrag entsprechen. Sollte das der Fall sein, wissen wir, dass das erste Zeichen “” ist.

Ab und zu musste man manuell nachhelfen, da es vorkommen kann, dass zwei kleine Bit-Strings als ein großer Bit-String interpretiert werden. z.B.:

11100100 => ä
1110     => 
    0100 => 

Irgendwann erhält man dann folgenden (unvollständigen) Text:

Ein Ninja oder Shinobi ist ein besonders ausgebildeter Kämpfer. Der Ursprung findet sich im vorindustriellen Japan. Ninja wurden als Kundschafter, Spion, Saboteur, Brandstifter oder Meuchelm
örder eingesetzt. Weibliche Ninja werden Kunoichi genannt. Ninja gehören, wie auch die Samurai, zu den bekanntesten Gestalten des mittelalterlich-frühneuzeitlichen Japan, wobei zwischen der tatsächlichen Geschichte und der späteren Umdeutung und Begriffsverzerrung unterschieden werden muss. Nach moderner Geschichtsauffassung war Spionage schon immer integraler Bestandteil der japanischen feudalen Kriegerkultur. Der Kriegerkodex Bushido wurde erst im cft

Nach einer kleinen Suche im Internet, findet man heraus, dass der Text aus dem Wikipedia-Artikel “Ninja” stammt. Somit hat man ebenfalls eine Referenz, wie der Text weitergehen wird.

Wie erwähnt, kann es vorkommen, dass man manuell nachhelfen muss. Da man nun eine Referenz zum vollständigen Text hat, kann man die Zeichen, welche sich nicht dekodieren lassen, entfernen.

Dekodiert man den Rest des Textes, findet man folgenden Satz:

Eher unüblich für Ninjas damals, ist es einen FTP-Server zu haben. Angenommen Ninjas hätten damals schon FTP-Server gehabt, wären die Anmeldedaten wahrscheinlich: ninja:n1nY4_!2

Schritt 4: PcapNP Datei

Auf dem FTP-Server findet man eine Datei mit dem Namen capture.pcapng, welche mit Programmen wie Wireshark geöffnet werden kann. Diese Datei enthält einen Netzwerkmitschnitt, welcher zu analysieren gilt.

alt

Man erkennt zwei HTTP-Requests. Öffnet man die zweite Anfrage, sieht man den finalen Code zum Gewinnen.

alt

Gewinner

Kurz vor Ende hat es das Team von cronn GmbH geschafft und den Hauptpreis gewonnen.

17 Apr 2024 #ctf #javaland