Zum Inhalt springen
Startseite » picoCTF Static ain’t always noise

picoCTF Static ain’t always noise

Heute geht es um die Challenge „Static ain’t always noise“ auf picoCTF.
Es ist eine sehr anfängerfreundliche Challenge, bei dem wir das Binary ’static‘ herunter laden und analysieren müssen.

Ich stelle hier zwei mögliche Lösungswege vor. Einen, um einfach nur möglichst schnell die Flag zu bekommen und den anderen, um dabei ein Verständnis zu entwickeln, wie Programme aufgebaut sind und wie man einen Debugger dazu benutzen kann, Informationen über ein Programm zu erhalten.

Die schnelle Lösung der Challenge

Unter Linux gibt es für alles mögliche nützliche Shell Kommandos. Um diese CTF-Challenge in einem kurzen Einzeiler zu lösen, kombiniere ich zwei Kommandos. Eines davon ist der Befehl strings , der alle lesbaren Strings einer Datei ausgibt. Der andere ist der grep Befehl. Ein sehr nützliches Kommando, das nach definierbaren Mustern sucht. Wir wissen aus den anderen Challenges von picoCTF, dass die Flags eigentlich immer das gleiche Format haben. Sie starten mit ‚picoCTF‘ gefolgt von der eigentlichen Flag in geschweiften Klammern.
Jetzt benutzen wir strings dazu, uns die lesbaren Zeichenfolgen auszugeben und benutzen diese Ausgabe als Eingabe für grep, um nach der Zeichenfolge ‚picoCTF‘ zu suchen. Zum kombinieren der beiden Befehle benutzen wir das Pipe-Zeichen, das wir auf einer PC-Tastatur mit Alt Gr + < erreichen.
Zusammen sieht das ganze dann so aus:

$ strings static | grep picoCTF
picoCTF{secret flag}

Das war es schon. Nicht besonders aufregend, aber dafür sehr effizient.

Zweiter Lösungsweg mit gdb

Um uns das Binary im Debugger anzusehen, starten wir gdb

$ gdb ./static

Jetzt sollte euer Bildschirm etwa so aussehen wie hier (Ich habe ‚GEF‘, die ‚GDB Enhanced Features‘ installiert, deswegen wird es bei euch etwas anders aussehen, die Befehle, die ich hier benutze, funktionieren aber auch ohne ‚GEF‘):

Der GNU Debugger

Nachdem wir GDB gestartet haben, schauen wir mal nach, was es für Variablen im Binary gibt. Dazu geben wir einfach info variables ein:

Variablen im Binary ’static‘

Die meisten Variablen wurden dynamisch vom Compiler erzeugt, aber ein Name fällt doch direkt ins Auge: wir haben eine Variable, die ‚flag‘ heißt. Schauen wir doch mal, was sich dahinter verbirgt:
x/1s &flag

Inhalt von ‚flag‘

Und da haben wir unsere Flag. Hat auch nicht viel länger gedauert, als mit der ersten Variante.

Schaut euch doch auch meine anderen CTF-WriteUps an.

Schlagwörter:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert