RuCTF 2012 Quals –
The password generator

RuCTF 2012 - The password generator - task description

Bei dieser Challenge (The password generator) geht es darum, an das Passwort eines Administrators zu gelangen. Alles, was wir kennen, sind die Kommandos, die verwendet wurden, um das Passwort zu generieren und der Hinweis auf ein “wohl bekanntes” Betriebssystem.

Beginnen wir also zunächst einmal, die angegebenen Kommandos nacheinander zu analysieren und deren Funktionsweise in einen Gesamtzusammenhang zu bringen.

cd ~

Relativ simpel – der Administrator wechselt zu Beginn der Operationen in sein Heimatverzeichnis.

vi ./.cshr

Als nächstes wir die Datei “.cshr” im Heimatverzeichnis editiert. Die gezielte Suche nach dieser Datei lässt einen Zusammenhang mit der “csh” (c-Shell) erkennen, die zumeist auf BSD-Systemen zum Einsatz kommt. Bei der Datei, die meist als “.cshrc” referenziert wird, scheint es sich um eine der Dateien zu handeln, die beim Login des Benutzers abgearbeitet werden und in der -ähnlich der “.bashrc”- Umgebungsvariablen und ähnliches gesetzt werden. Was genau hier editiert wurde, lässt sich nur erahnen.
Continue reading

RuCTF 2012 Quals –
Discern utility

RuCTF 2012 - Discern utility - task description

Die Aufgabenstellung (Discern utility) spricht von einer aufgefundenen Datei und verlangt von uns festzustellen, was der deren Inhalt beschreibt. Bei dem Dokument selbst handelt es sich nur um eine Textdatei, deren Inhalt mit 73 Zeilen recht überschaubar ist. Ein erster Blick in die Daten zeigt uns:

brk(0)                                  = 0x2335000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9bfad31000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=117316, ...}) = 0

Hierbei handelt es sich um “System Calls” (Syscalls), das heißt, rudimentäre Systemfunktionen, die im Kernel verankert sind und aus denen die Funktionalität aller komplexen Programme aufgebaut wird. Welche Syscalls ein Programm verwendet, lässt sich mit dem Werkeug “strace” herausfinden. Und genau dieses Werkzeug wurde auch hier verwendet um die Aufgabe dieser Challenge zu stellen.

Um die Aufgabe zu lösen müssen wir also herausfinden, welches Werkzeug die uns zur Verfügung gestellte strace-Ausgabe liefert. Sehen wir uns dazu die gesamte Textdatei an und versuchen, Merkmale des aufgerufenen Programmes zu identifizieren. Folgende Syscalls sollten hierbei auffallen:
Continue reading