Hackover CTF 2015 – securelogin

This writeup describes the solution for the securelogin challenge in Hackover CTF 2015 held by Chaos Computer Club Hamburg.

Hackover CTF 2015 - securelogin - task description

We have to get the flag from the website, so lets check it out:

Hackover CTF 2015 - securelogin - website view

Just a simple website. We can login with any data. But when visiting the “secret” tab, this is the result:

Hackover CTF 2015 - securelogin - login view

No access – no flag :-(. Lets check the cookies.

Hackover CTF 2015 - securelogin - cookie data

There is a “data” cookie. It looks like base64 so we’re going to decode it and look at its content:

ruport@zentaur:~$ echo "dXNlcm5hbWU9cnVwMHJ0LWEyZjFmY2U4ZmM5NjAxMDIwYzRhYjA5MzJjYmM1MmJkZjU3YTQzYmE4MzAyNmI4NmZmNjU2YzQzNmZkOWQ4NTk=" | base64 -d
username=rup0rt-a2f1fce8fc9601020c4ab0932cbc52bdf57a43ba83026b86ff656c436fd9d859

The cookie data contains my username and a sha256 hash (which is not the hashed username :D). It must be some message authentication code (MAC). When knowing and controlling a plaintext and looking for a valid MAC, you will always have to think on hash length extension attacks.
Continue reading

Hack.Lu CTF 2014 – ImageUpload

Hack.Lu CTF 2014 - ImageUpload - Task description

Diese Challenge (ImageUpload) erzählt uns von einer Website, auf der man Bilder hochladen kann um dem Scheriff bei der Verbrechenjagd zu unterstützen. Als erstes sehen wir uns diese Webseite etwas genauer an.

Hack.Lu CTF 2014 - ImageUpload - Website

Die Seite ist sehr klein und übersichtlich. Es gibt eine Möglichkeit sich anzumelden, mit der wir – wegen Abfrage von Benutzernamen und Password – zunächst nichts anfangen können. Des Weiteren lassen sich offensichtlich Bilder hochladen. Diese Möglichkeit nutzen wir für ein Testbild.

Hack.Lu CTF 2014 - ImageUpload - Picture upload

Nach dem Hochladen sehen wir das Bild auf der Webseite. Zusätzlich wurden am unteren Ende des Bildes Daten angefügt. Bei diesen Daten handelt es sich vermutlich um Exchangeable Image File Format (EXIF) Daten, die aus dem Bild selbst ausgelesen wurden. Da mein Bild keine Daten enthielt, sind die Felder leer.

Continue reading

CodeGate CTF 2014 – 120

CodeGate CTF 2014 - 120 - Task description

Die Challenge “120” nennt uns ohne weitere Hinweise nur eine Webseite und deren zeigt uns deren PHP-Quellcode. Zu Beginn rufen wir die Webseite direkt auf:

CodeGate CTF 2014 - 120 - Limited tries website

Wir erkennen eine Passwortabfrage sowie einen Zähler, der bei 120 beginnt und mit jedem Webseitenaufruf um Eins herunter zählt. Des Weiteren ist ein Link “Auth” sichtbar, der zu dieser Seite führt:

CodeGate CTF 2014 - 120 - Authentication website

Wir sehen eine weitere Seite mit Passwortabfrage, in der jedoch bereits ein erster Hinweis enthalten ist, nämlich, dass das nur Kleinbuchstaben enthält. Unser Ziel scheint es also zu sein, an das Passwort zu gelangen.

Als Nächstes sehen wir uns den Quellcode der Webseite an um deren Funktionalität zu verinnerlichen. Auszugsweise tut die Webseite folgendes:
Continue reading

CodeGate CTF 2014 – Web Proxy

CodeGate CTF 2014 - Web Proxy - Task description

Die Challenge “Web Proxy” startet mit der Behauptung, dass mit dem Proxy sicheres surfen möglich sei. Dies testen wir direkt einmal, indem wir eine beliebige Webseite – hier f00l.de – mit der beschriebenen URL aufrufen.

CodeGate CTF 2014 - Web Proxy - Website

Der Blick in die Protokolle zeigt, dass die Seite tatsächlich abgefragt wird und die angegebenen HTTP-Header mit denen der Webseite überein stimmen. Als Nächstes sehen wir uns den Quellcode der Proxy-Seite etwas genauer an und finden am Ende folgende Zeilen vor:

CodeGate CTF 2014 - Web Proxy - Source Code
Continue reading

DEF CON CTF 2013 – babysfirst

DEFCON 2013 CTF - babysfirst - task description

Die Challenge (babysfirst) verweist zunächst nur auf eine Webseite, die wir uns direkt näher ansehen.

DEFCON 2013 CTF - babysfirst - website

Einer der ersten SQL-Injection-Versuche mit ‘ or ‘1’=’1 als Benutzername und Passwort liefert direkt, dieses Ergebnis:

DEFCON 2013 CTF - babysfirst - sql injection

Neben diversen Möglichkeiten, kann hier zum Beispiel eine Blind SQL-Injection durchgeführt werden.
Continue reading

EBCTF Teaser 2013 – WEB200

EBCTF Teaser 2013 - WEB200 - task description

Diese Challenge (WEB200 – “Wooden Shoes”) war umfangreicher als zuerst erwartet. Alles beginnt mit einer kurzen Beschreibung und der Benennung einer Webseite.

EBCTF Teaser 2013 - WEB200 - Wooden Shoes website

Wir finden eine Webseite vor, auf der Schuhe gesucht und bestellt werden können. Dem ersten Eindruck nach werden wir eine SQL-Injection oder ähnliches durchführen müssen. Beim Versuch, Sonderzeichen in das Suchfeld einzufügen, erhalten wir jedoch, diese Ausgabe:

EBCTF Teaser 2013 - WEB200 - sql injection error

So kommen wir also nicht weiter.
Continue reading

plaidCTF 2013 – charsheet

plaidCTF 2013 - charsheet - task description

Ziel dieser Challenge (charsheet) ist es, an den Charakter-Namen des Administrators einer Webseite zu gelangen. Der Aufgabenstellung zur Folge spielt dieser mit dem Auftraggeber zusammen in einer Dungeons & Dragons (D&D) – Kampange.

Zuerst sehen wir uns die angegebene Webseite im Browser etwas genauer an. Dabei finden wir ein System vor, mit dem Charakterbögen von Charakteren aus Pen-and-Paper Rollenspielen verwaltet und gepflegt werden können.

Neben der Möglichkeit sich auf der Seite zu registrieren und – nach Login – neue Charaktere anzulegen, kann auch nach bereits hinterlegten Charakteren und Kampagnen gesucht werden. Ohne zu zögern testen wir die Suchfelder direkt auf die Möglichkeit von SQL-Injections, indem ein Hochkomma ‘ übergeben wird.

plaidCTF 2013 - charsheet - sql injection check

Tatsächlich führt diese Anfrage direkt zu einem serverseitigen Fehler und wir erhalten folgende Ausgabe:

plaidCTF 2013 - charsheet - sql query error message
Continue reading

CSAW CTF Qualifiers 2012 –
Web 300

http://128.238.66.217/
“This is a website belonging to a horse-fighting gang. Even with an account, it’s not clear what they’re up to. Your task is to get administrator access and see if you can figure anything out. Your account is csaw_challenger/letmein123.”

Bei der Challenge Web 300 handelt es sich um ein Board, in der diverse Informationen präsentiert werden. Dies umfasst im wesentlichen jeweils eine Seite mit News, bzw. Benutzerinformationen oder jegliche Informationen zu Pferden (Name, Beschreibung etc pp).

CSAW CTF 2012 - Web 300 - website

Die Seiten selbst werden per GET Request weiter verarbeitet. Ausserdem stellt man recht schnell fest, dass ein Session Cookie des aktuell angemeldeten Benutzers gesetzt wird. Somit muss man wohl irgendwie versuchen die Session des Administrators zu übernehmen. Bei näherer Untersuchung fällt auf, dass jegliche Informationen mittels URI (id=XXX) ausgewertet werden. Das lässt vermuten, dass bei dieser Challenge eine SQL Injection Schwachstelle ausgenutzt werden muss. Das wird auf den Seiten “user.php” und “horse.php” überprüft.

http://128.238.66.217/user.php?id=1′ or ‘1’=’1      => keine Schwachstelle
http://128.238.66.217/horse.php?id=1′ or ‘1’=’1    => Schwachstelle !!!

CSAW CTF 2012 - Web 300 - SQL injection error message

Continue reading

Defcon 20 CTF Prequals 2012 –
Grab Bag 400

Bei der “Grab Bag 400) – Challenge wird uns ein Webserver genannt und folgende Frage gestellt:

“What is Jeff Moss’ checking account balance?”

Wir sollen demnach den Kontostand von “Jeff Moss”, dem Defcon-Gründer, in Erfahrung bringen. Zuerst besuchen wir also die Webseite und verschaffen uns einen Überblick.

Defcon 20 CTF 2012 - Grab Bag 400 - website

Es handelt sich um die Webseite der “Bank of America”, die uns unter der Domain “boabank.com” vorgestellt wird. Nach einem kurzen Überfliegen der Links (von denen es nicht viele gibt), sticht schon das Suchfeld im rechten Bereich der Webseite ins Auge.

Hier kann man nach BoaBank-Filialen in seiner Nähe durch Eingabe der Postleitzahl suchen. Bereits die Eingabe einer Zeichenkette, die nicht aus Zahlen besteht, führt schon zu der Fehlermeldung:

“ERROR: column … does not exist Position: 55”

Dabei handelt es sich um eine Fehlermeldung des Datenbanksystems PostgreSQL. Dass der Fehler ohne die Eingabe von (einfachen oder doppelten) Anführungszeichen ausgelöst wird, lässt vermuten, dass der Wert der Postleitzahl ebenfalls ohne Anführungszeichen direkt an die Datenbank-Abfrage weitergegeben wird. Eine mögliche Anfrage könnte daher wie folgt aussehen:

SELECT ... FROM ... WHERE zip = $_POST['zip'];

Um diese Vermutung zu überprüfen und beispielsweise alle Filialen beliebiger Postleitzahl auszugeben, trage ich in das Suchfeld “1234 OR 1=1” ein, und erhalte folgendes Ergebnis:
Continue reading