Troopers15 CTF Write Ups

Ich war vom 16. bis 20. März auf der Troopers15 Conference. Neben spannenden Vorträgen gab es auch ein CTF, bei dem jeder Besucher mitmachen konnte. Die CTF Seite war nur im lokalen Netzwerk verfügbar, daher kann ich leider nicht mehr auf die Seiten zugreifen. Natürlich konnte ich es nicht lassen und hab mich an der ein oder anderen Challenge versucht:

Chall #1: In a Galaxy Far Far Away

Diese Challenge war einfach. Man sollte den Source Code aufrufen, jedoch wurde der Rechtsklick über JavaScript blockiert. Also JavaScript ausschalten und in dem Source Code nach der Flag suchen. Nach kürzester Zeit habe ich die folgende Zeile Code gefunden

<!--4827-8732-5640-4282-0000-->

Chall #4: Infiltrator

Bei dieser Challenge ging es um eine PDF-Datei. Die Aufgabe stand in dem Dokument:

Seite 1 Seite 2
Infiltrator_S1 Infiltrator_S2

Durch Zufall hab ich gesehen, dass hinter dem Namen „Zulu“ ein Link versteckt ist. Dieser führt zu der Seite http://pwn.troopers.de/zulu (nur im internen Netz verfügbar gewesen ;)). Über den Unix-Befehl „strings leaked.pdf | grep http“ bekommt man noch einmal die Zeile mit der URL:

Infiltrator_URL

Leider ist die Seite mit .htaccess geschützt. Also fehlt mir noch der Login. Was mir auch an der PDF Datei aufgefallen ist, dass der Text gar kein Text war, sondern aus Bilder besteht. Man konnte den Text zum einen nicht markieren und wenn man den Text per Drag & Drop auf dem Desktop gepackt hat, wurde eine Bild-Datei erzeugt. Zum Glück gibt es ein Tool das sich „pdfimages“ nennt. Dieses extrahiert sämtliche Bilder aus der PDF Datei. Gleich das erste extrahierte Bild viel auf:

Infiltrator_extract_imgIch versuchte mich mit den Benutzerinformationen auf der „zulu“-Seite  anzumelden und schon hatte ich die nächste Flag:

9984-1337-8942-2633-9291

Chall #9: Who you gonna call?

Bei dieser Aufgabe habe ich noch ein Foto aus dem Browser Cache bekommen. Dann bekommt ihr einen Eindruch wie das ungefähr aussah:

Who_you_gonna_call_challNach einer kleinen Internetrecherche habe ich herausgefunden, dass es sehr beliebt ist Informationen innerhalb des Spektrogramm zu verstecken. Ein gutes Tool für diesen Fall ist „Sound eXchange“ (sox). Das ist quasi das Schweizer Taschenmesser für Sound Manipulationen. Die Benutzung ist eigentlich relativ simpel, wenn man weiß wie es geht. Das Programm bietet verschiedene Effekte an, welche ausgewählt werden können. Die richtigen Parameter für den Effekt kann man mit „sox –help-effect [EFFECT]“ anzeigen lassen. So konnte ich mit dem folgenden Befehl ein Spektrogramm erstellen:

sox strangecall.wav -d spectrogram -r -o spectro.png

 

Who_you_gonna_call_spectro

Wer nun nicht genau hinschaut, übersieht das unter dem Text „TROOPERS 2015 HEIDELBERG“ verschwommen der Code zu lesen ist ;)

Damit hätten wir die nächste Flag:

2726-5633-3248-6935-9353

Chall #10: A Matter of Time

Auch hier habe ich noch die Original Seite aus dem Browser Cache bekommen

a_matter_of_time_chall

Wenn man sich mit der IP über Netcat Verbunden hat, dann hatte man drei Befehle über die Shell: help, login & time [Timezone]
Bei der Challenge habe ich mich an eine vergangene hack.lu Challenge erinnert. Diese war anfällig gegen Timing Attacks. Genau das gleiche war auch bei dieser Challenge der Fall. Wenn man einmal den richtigen Charakter eingegeben hat, hat das System mit einer Verzögerung von  1-2 Sekunden geantwortet. Dafür habe ich dann ein kleines Python-Skript geschrieben, welches nur einen Character testet. Anschließend habe ich das Skript um den Buchstaben erweitert, der der richtige war. Ich hätte das Skript natürlich auch noch mehr automatisieren können, aber ich habe die Challenge nebenbei gemacht und eher einem Vortrag zugehört.

#!/usr/bin/env python

import sys
import socket

TCP_IP = '172.20.12.13'
TCP_PORT = 2002
BUFFER_SIZE = 1024
timemsg = 'time Antarctica/Troll'
loginmsg = 'login '#Hier die richtigen Buchstaben hinzufügen
string_brute = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!?#+-=){[]}_(/&%$\.,;:<>)"
x=0

while x < 85:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(' ')
data = s.recv(BUFFER_SIZE)
s.send(timemsg)
data = s.recv(BUFFER_SIZE)
print data
logger = loginmsg + string_brute[x]
print logger
s.send(logger)
data = s.recv(BUFFER_SIZE)
print data
s.send(timemsg)
data = s.recv(BUFFER_SIZE)
print data
s.close()

x=x+1

Am Ende angekommen, hatte ich dann die Lösung:

a_matter_of_time_solved

Ich hätte bestimmt noch die ein oder andere Challenge lösen können. Leider war dafür nicht genügend Zeit am Ende, wie es so häufig bei einem CTF ist. Das lokale CTF war super! Ich hoffe ich werde noch wo anders Write-Ups finden, sodass ich etwas von den nicht gelösten Aufgaben lerne :)

Greetz TheVamp

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.