Boston Key Party CTF 2013 – randy

Boston Key Party CTF 2013 - randy - task description

Bei der Challenge “randy” wird uns eine Binärdatei bereit gestellt und auf “Zufälligkeit” hingeweisen. Nach dem Download starten wir das Programm direkt um dessen Funktionalität zu beobachten.

root@linux64:~# ./randy
Password: rup0rt
:(

Das Binary verlangt nach der Eingabe eines Passwortes. Bei Eingabe einer beliebigen (falschen) Zeichenfolge erhalten wir nur ein trauriges Smiley. Um zu erfahren, wie das Programm das Passwort verarbeitet und die Korrektheit bestimmt, nutzen wir objdump um den Assembler-Code zu erzeugen.

Darin fingen wir unter anderem folgende Abschnitte:

0000000000400884 <main>:
[...]
  400958:  e8 c3 fc ff ff  call   400620 <strlen@plt>
  40095d:  48 83 f8 1c     cmp    rax,0x1c
[...]
  400983:  b8 00 00 00 00  mov    eax,0x0
  400988:  e8 97 fe ff ff  call   400824 <wrong>

Zunächst wird die Funktion strlen() aufgerufen um die Länge des von uns eingegebenen Passwortes zu bestimmen. Anschließend wird das Ergebnis mit 0x1c (28) verglichen und bei Misserfolg, das Programm mit der <wrong> Funktion beendet. Wir wissen also, dass das Passwort 28 Zeichen lang sein muss.
Continue reading

Boston Key Party CTF 2013 – MITM

Boston Key Party CTF 2013 - MITM - task description

Ohne weitere Informationen erhalten wir bei dieser Challenge (MITM) nur eine Textdatei, die folgenden Inhalt besitzt.

message 1:  QUVTLTI1NiBFQ0IgbW9kZSB0d2ljZSwgdHdvIGtleXM=
encrypted:  THbpB4bE82Rq35khemTQ10ntxZ8sf7s2WK8ErwcdDEc=
message 2:  RWFjaCBrZXkgemVybyB1bnRpbCBsYXN0IDI0IGJpdHM=
encrypted:  01YZbSrta2N+1pOeQppmPETzoT/Yqb816yGlyceuEOE=
ciphertext: s5hd0ThTkv1U44r9aRyUhaX5qJe561MZ16071nlvM9U=

Demnach handelt es sich offensichtlich um drei Nachrichten, von denen die ersten beiden in Klar- und Schlüsseltext vorliegen. Die letzte Nachricht (ciphertext) liegt nur in verschlüsselter Form vor, was diese zum primären Ziel der Challenge macht.

Zunächst sehen wir uns die Klartexte der beiden Nachrichten indem wir sie mit BASE64 dekodieren.

rup0rt@lambda:~/BkP2013$ echo "QUVTLTI1NiBFQ0IgbW9kZSB0d2ljZSwgdHdvIGtleXM=" | base64 -d
AES-256 ECB mode twice, two keys
rup0rt@lambda:~/BkP2013$ echo "RWFjaCBrZXkgemVybyB1bnRpbCBsYXN0IDI0IGJpdHM=" | base64 -d
Each key zero until last 24 bits

Wir erhalten zwei Hinweise:

  • Zum Verschlüsseln der Nachrichten wurde zweifachse AES-256 ECB verwendet
  • Der Schlüssel besteht jeweils aus Nullen – bis auf die letzten drei Zeichen

Continue reading

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
Continue reading

Boston Key Party CTF 2013 – wolfram beta

Boston Key Party 2013 - Wolfram Beta - task description

Diese Challenge (Wolfram Beta) verlangt, dass wir aus einem Berechnungsdienst ausbrechen und die Flagge auslesen. Dieser Dienst soll unter der angegebenen IP-Adresse lauschen, was wir sofort überprüfen.

rup0rt@lambda:~/BostonKeyParty2013$ nc 54.218.12.97 34567
Wolfram Beta - BkP CTF 2013 Team
Wolfram Beta is a great calculator.
just put in a number at the prompt
then put in the operator
then finally the second number
and the calculation will be done INSTANTLY
no accounts necessacary, unlike some of our competition!
first num: 1
operator: +
second num: 2
Thinking...
.
Done Thinking!
3

Der Rechner fordert uns also zur Eingabe von zwei Zahlen und einem Operator auf. Nach einer Denkphase, die wohl auf Wolfram Alpha anspielen soll, wird uns das Ergebnis ausgegeben.

Beim Versuch anstatt der Zahlen Buchstaben oder Sonderzeichen zu übergeben, wird die Verbindung sofort mit einem entsprechenden Verbot abgebrochen. Der Operator jedoch lässt sich nach einigen Versuchen so manipulieren, dass eine Fehlerausgabe erscheint:

first num: 1
operator: +asfetrrr
second num: 2
Thinking...
.
Done Thinking!
{interactive}(1,14): error CS0119: Expression denotes a `type', where a `method group' was expected

Unhandled Exception: System.ArgumentException: The expression did not set a result
  at Mono.CSharp.Evaluator.Evaluate (System.String input) [0x00000] in <filename unknown>:0
  at wolfram_beta.MainClass.ReplCalculator () [0x00000] in <filename unknown>:0
  at wolfram_beta.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentException: The expression did not set a result
  at Mono.CSharp.Evaluator.Evaluate (System.String input) [0x00000] in <filename unknown>:0
  at wolfram_beta.MainClass.ReplCalculator () [0x00000] in <filename unknown>:0
  at wolfram_beta.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0

Wir erkennen, dass es sich um ein C#-Programm (Csharp) handelt. Außerdem wird MONO verwendet, also die Linux-Variante von C#. Zur Auswertung des übergebenen Ausdrucks wird die Evaluate-Funktion aufgerufen. Damit könnte es also möglich sein, einen Operator zu übergeben, der testweise Zeichenketten konkateniert.
Continue reading

EBCTF Teaser 2013 – BIN100

EBCTF Teaser 2013 - BIN100 - task description

Die BIN100 Challenge (“Dice Game”) verlangt von uns, das “Würfelspiel” zu schlagen und so die Flagge zu erhalten. Bei dem Würfelspiel handelt es sich um diese EXE-Datei, die wir auch direkt ausführen.

EBCTF Teaser 2013 - BIN100 - dice game

Wir sehen, dass das Programm Würfel simuliert, die per Zufall geworfen werden. Beim ersten Wurf war es mir hier noch aus eigener Kraft möglich, die Bedingung, eine Drei zu würfeln zu erfüllen ;-). Beim zweiten Wurf jedoch war der Zufall nicht mehr auf unserer Seite.

Es sieht also nach danach aus, das Programm binär manipulieren zu müssen, weshalb wir es in den Immunity Debugger laden. Wir starten das Programm, lassen es bis zur Eingabeaufforderung laufen und übernehmen dann mit dem Debugger. Dabei stößt man schnell auf folgenden Programmteil:

EBCTF Teaser 2013 - BIN100 - rand function assembler
Continue reading

EBCTF Teaser 2013 – CRY100

EBCTF Teaser 2013 - Cry100 - task description

Bei der CRY100 (“Espionage”) Challenge erhalten wir den Auftrag, Nachrichten zu entschlüsseln. Als Ressourcen wird uns dafür ein Archiv bereit gestellt, das wir direkt entpacken.

cry100_espionage/
cry100_espionage/crypto.py
cry100_espionage/msg001.enc
cry100_espionage/msg002.enc
cry100_espionage/README

Wir erhalten ein Python-Skript, zwei verschlüsselte Nachrichten und einen Hinweis-Text, der wie folgt lautet:

We suspect an employee of one of the embassies has leaked
confidential information to a foreign intelligence agency.

We've managed to capture an individual whom we assume to be the
recipient of the info. Our forensics department has managed to
recover two messages from his outbox, which appear to be encrypted
using some crypto tool. Along with each email our suspect also
received an SMS message containing a password, however we were
only able to recover one - "SieR1mephad7oose".

Could you help us decrypt both messages?

Eine Nachricht konnte demnach offenbar bereits entschlüsselt werden, um die zweite müssen wir uns selbst kümmern. Zunächst testen wir, ob das mitgelieferte Python-Skript die Nachricht wirklich entschlüsseln kann und das darin enthalten ist.
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

Secuinside CTF 2013 – Secure Web Revenge

SecuInside 2013 CTF - Secure Web Revenge - task description

Diese Challenge (Secure Web Revenge) deutet vom Namen schon sehr stark auf die “Secure Web” – Challenge dieses Capture the Flags hin. Zuerst sehen wir wieder die Webseite selbst an.

SecuInside 2013 CTF - Secure Web Revenge - Upload Website

Auch die Optik der Webseite erinnert an die vorherige Challenge. Doch unter dem “Submit Query” – Button ist ein zusätzliches Feld für den “privaten Schlüssel” eingefügt worden. Ebenso wird der Quellcode wieder mitgeliefert, in dem wir nun die Funktion des “Schlüssels” in Erfahrung bringen wollen:

<?php
 Continue reading 

Secuinside CTF 2013 – Secure Web

SecuInside 2013 CTF - secure web - task description

Zu dieser Challenge (secure web) erhalten wir ein binäres Apache-Modul sowie eine Webseite genannt. Zuerst rufen wir die Webseite auf um uns einen Überblick zu verschaffen und das eigentliche Ziel der Challenge zu konkretisieren.

SecuInside 2013 CTF - secure web - upload website

Wir finden eine Seite vor, auf der Mediendateien hochgeladen werden können. Die Information “keine Skriptdateien” deutet bereits darauf hin, dass wir so etwas versuchen könnten ;-). Zusätzlich erhalten wir den Quellcode der Webseite, den wir uns zunächst genauer ansehen:

<?php

$uploaddir = '/var/www/uploads/' . md5($_SERVER["REMOTE_ADDR"]) . '/';

if(is_dir($uploaddir) == false)
  mkdir($uploaddir);

$uploadfile = $uploaddir . basename($_FILES['data']['name']);

if (move_uploaded_file($_FILES['data']['tmp_name'], $uploadfile)) {
  echo "Success\n";
} else {
  print "failed\n";
}

?>

Continue reading

Secuinside CTF 2013 – bigfile of secret

Secuinside 2013 CTF - bigfile of secret - task description

Diese Challenge (bigfile of secret) berichtet von Verbindungsproblemen im Internet. Bereits beim ersten Verbindungsversuch mit “netcat” stellen wir dies wie folgt fest:

rup0rt@lambda:~/SecuInside2013$ nc -v 119.70.231.180 80
nc: connect to 119.70.231.180 port 80 (tcp) failed: Connection refused

Das ist für Capture the Flags – besonders zu Beginn – eigentlich nicht ungewöhnlich, da alle Gruppen zeitgleich versuchen, die Aufgabe lösen ;-). Da das Problem jedoch auch nach einiger Wartezeit fortbesteht, scheint es tatsächlich an den geschilderten “Verbindungsproblemen” zu liegen.

Wenn man nun mehrfach und schnell hintereinander den Verbindungsaufbei mit “netcat” durchführt, erhält man nach einigen Versuchen dieses Ergebnis:

rup0rt@lambda:~/SecuInside2013$ nc -v nc -v 119.70.231.180 80
Connection to 119.70.231.180 80 port [tcp/http] succeeded!
GET /secret_memo.txt HTTP/1.0

Das direkte Abrufen der gesuchten Datei (secret_memo.txt) mit dem entsprechenden HTTP-Get-Request liefert keine Ausgabe mehr, was vermuten lässt, dass die Verbindung wieder abgebrochen ist. Das Vorgehen muss also automatisiert werden.
Continue reading