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

BaltCTF 2013 – 数独 (Sudoku)

BaltCTF 2013 - Sudoku - task description

Auch in bei dieser Challenge (Sudoku) werden wenig Informationen vorab gegeben. Nur chinesische Schriftzeichen stechen hervor, die nach kurzer Anwendung des Google-Translators als “Sudoku” übersetzt werden.

Für einen ersten Überblick verbinden wir uns zu dem angegebenen Server und bekommen folgende Ausgabe:

MANUAL: Have a nice time with sudoku
Format:
a) "[1-9] [1-9] [1-9]" - coords and input digit
b) "solution [1-9]{81}" - full solution
Other:
"restart" to start current game again
"[QqXx]" to exit

-------------
|97_|164|__2|
|__1|5_2|_9_|
|325|_9_|16_|
-------------
|__9|_2_|37_|
|_16|3_5|_4_|
|753|__8|___|
-------------
|5__|78_|419|
|837|_19|2__|
|_94|256|78_|
-------------

Wie erwartet – und bei diesem Capture the Flag auch nicht das erste Mal – muss ein Spiel automatisiert gelöst werden. Wir haben die Möglichkeit, entweder (a) die Felder einzeln anzugeben und so schrittweise eine Lösung zu erzeugen oder (b) die Lösung des gesamten Feldes direkt vorzugeben.

Ich habe mich für den zweiten Weg entschieden, nämlich das Feld lokal automatisiert zu lösen und nur das endgültige Feld abzusenden. Dafür habe ich ein Python-Skript entwickelt, das ich im Folgenden schrittweise erläutern möchte:
Continue reading

BaltCTF 2013 – Positive

BaltCTF 2013 - Positive - task description

Die “professional programming and coding” – Challenge “Positive” gibt zunächst keine Beschreibung des eigentlichen Ziels. Daher verbinden wir als erstes direkt zum angegebenen System.

MANUAL: Be positive, change all minuses to pluses!
Rules: clicking on a cell changed it and it's neighbours.
Format: 
a) "\d\d" - number of cell
b) "(?:\d\d)+" numbers of cells

++---+---+
----------
-+--------
--++------
-+---+-+--
---+------
----------
----++---+
-+---+----
-----+-+--

Mit den ersten Zeilen der Ausgabe sind wir etwas schlauer. Auf dem Spielfeld müssen durch Angabe der Spalte und Zeile alle Minus in Plus getauscht werden. Der Haken dabei ist, dass die benachbarten Felder ebenfalls getauscht werden. Die Eingabe von “11” als Lösung tausch damit neben 11 auch die Positionen 10, 12, 01, 02.

( Bei diesem Spiel handelt es sich um das so genannte “Lights Out” Spiel, das über bestimmte Algorithmen einfach gelöst werden kann. Diesen Hinweis hatte ich beim Lösen der Challenge leider nicht, was sich auch in meinem Lösungsweg widerspiegeln wird ;-). )
Continue reading

BaltCTF 2013 – Game

BaltCTF 2013 - Game - task description

Bei dieser Challenge (Game) wird uns ein Bild gezeigt und wir müssen den Namen des entsprechenden Spiels heraus finden. Das gesuchte Spiel sieht so aus:

BaltCTF 2013 - Game - whats the name of this game

Die direkte Bildersuche bei Google oder TinEye liefert kein Ergebnis. Darum habe ich zunächst nur einmal allgemein nach “ASCII games” gesucht und mir alle Bilder, die mit diesem Begriff in Zusammenhang stehen, auflisten lassen. Das Ergebnis sieht so aus:

BaltCTF 2013 - Game - Ascii game search results

Als siebentes Ergebnis des gezeigten Auschnittes befindet sich auch ein Bild, dass dem Gesuchten zumindest ähnelt:

BaltCTF 2013 - similar image

Wir verfolgen des Bild bis hin zu einem Blogeintrag, der den gefundenen Ausschnitt wie folgt beschreibt:

BaltCTF 2013 - Nethack

Demnach soll es sich um das Spiel NetHack handeln, ein rundenbasiertes Computerspiel aus dem Jahr 1987. Da der Name bereits mit großer Wahrscheinlichkeit auf die gesuchte Lösung hindeutet, versuchen wir diesen als Flagge und erhalten 73 Punkte ;-).

Die Antwort lautet somit: “nethack“.

asdf

BaltCTF 2013 – Gallery

BaltCTF 2013 - Gallery - task description

Bei der “Gallery” – Challenge erhalten wir nur eine Webseite und müssen anschließend selbst heraus finden, wo und wie wir an die Flagge gelangen. Das direkte Aufrufen der URL liefert dieses Ergebnis:

BaltCTF 2013 - Gallery - Website

Es handelt sich um eine Seite, auf der wir Bilder hochladen und – in einer Gallerie – speichern können. Sobald wir den Link zum Hochladen eines Bildes anklicken, erscheint das entsprechende Formular:

BaltCTF 2013 - Gallery - Upload pictures form

Wir werden darauf hingewiesen, dass nur Dateien mit den Endungen “.gif” und “.png” erlaubt sind. Es drängt sich die Frage auf, ob vielleicht auch andere Dateiendungen, zum Beispiel “.php”, hochgeladen werden können. Damit wäre es möglich, eigene Skripte und damit Kommandos auf dem Server auszuführen und die Flagge zu suchen.
Continue reading

BaltCTF 2013 – Hidden 1

BaltCTF 2013 - Hidden 100 - task description

Diese Challenge (Hidden 1) verlangt, dass wir die Flagge finden. Darüber wie und wo wir suchen sollen, wird jedoch überhaupt nichts verraten. Oft befinden sich “Hidden-Flags” im IRC, können über DNS-Anfragen erlangt werden oder durch spezielle HTTP-Requests. Diese Versuche führten hier jedoch zu keinem Ergebnis.

Also sehen wir uns als nächstes den HTML-Quellcode der Seite etwas genauer an. Aber auch hier ist nichts auffällig oder offensichtlich versteckt worden. Auch der gezielte Aufruf von nicht-existenten Challenge-Nummern bringt uns nicht weiter. Bei jedem Seitenaufruf fällt jedoch das permanent wechselnde BaltCTF-Logo, wie beispielsweise dieses hier auf:

BaltCTF 2013 - Hidden 100 - logo

Vielleicht wurde die Flagge ja in einem der Bilder versteckt? Wir laden also alle Bilder der Webseite herunter und untersuchen diese auf Spuren. Ein Blick in die Seiteninformationen des Browsers hilft, sich einen Überblick über die Dateien zu verschaffen:

BaltCTF 2013 - Hidden 100 - Image download

Neben vielen Bildern, die dem Joomla-Template zuzuordnen sind und den soeben genannten, wechselnden Logos, befindet sich auch das favicon.ico der Webseite:

BaltCTF 2013 - Hidden 100 - favicon.ico

Das Favicon (favorite icon) wird vom Browser als Symbol für die Webseite (meist links) neben der URL eingeblendet. Auch hier könnte also eine Flagge versteckt sein. Wir untersuchen auch diese Datei mit Hilfe von “strings”:

rup0rt@lambda:~/BaltCTF2013$ strings favicon.ico 
JFIF
Exif
2013:05:04 11:01:40
JFIF
 , #&')*)
[...]
~       xSM
.]*Up
hidden:68648a55b906fb2e4af7423024c9e48f

Am Ende der Datei finden wir dabei tatsächlich einen Hinweis auf eine versteckte Flagge!!

Die Lösung lautet somit: “68648a55b906fb2e4af7423024c9e48f“.

VolgaCTF 2013 – ppc 200

volgactf 2013 - ppc 200 - task description

Die Challenge (ppc 200) spricht von einer verdächtigen Nachricht, die uns in Form dieser Datei übersandt wird. “File” meldet, dass die Datei nur aus “Daten” besteht, aber ein erster Blick hinein zeigt uns:

volgactf 2013 - ppc 200 - file encoding

Die Datei beginnt mit den Worten “reverse all” und scheint offenbar von uns zu verlangen, den Inhalt komplett umzudrehen. Dies tun wir auch mit folgendem kleinen Python-Skript:

#!/usr/bin/python

import sys

revstr = "reverse all\x00\x00"

file = open(sys.argv[1]).read()

if file[0:len(revstr)] == revstr:
  file = file[:len(revstr):-1]
  print file

Nach Anwendung auf die Datei und erneuter Betrachtung im Texteditor, finden wir folgenden neuen Dateianfang vor:

volgactf 2013 - ppc 200 - base16 encoding

Dieses Mal soll der Inhalt der Datei offensichtlich mit Base16 dekodiert werden. Auch das setzen wir mit einem Skript, diesmal mit Perl, um:

#!/usr/bin/perl

open(FILE, $ARGV[0]);
@file = <FILE>;
close(FILE);

for ($i=11; $i<=length($file[0]); $i+=2) {
  $double = substr($file[0], $i, 2);
  print chr(hex($double));
}

Continue reading

VolgaCTF 2013 – stegasic 200

VolgaCTF 2013 - Stegasic 200 - task description

Für diese Forensic-Challenge (stegasic 200) erhalten wir die Information, dass sich irgendwo innerhalb der bereitgestellten Datei Beweise verstecken würden, die den “Bösen Jungen” (und damit wohl die Flagge) offenbaren könnten. Zuerst entpacken wir das Archive und finden …

rup0rt@lambda:~/VolgaCTF2013$ unzip forensics200.zip 
Archive:  forensics200.zip
  inflating: forensics200.pcapng     

rup0rt@lambda:~/VolgaCTF2013$ ls -lh forensics200.pcapng 
-rw-r--r-- 1 rup0rt rup0rt 12M May  1 19:53 forensics200.pcapng

… eine 12 Megabytes große PCAPNG-Datei. Für die Untersuchen werden wir deshalb Wireshark benutzen und uns den Inhalt etwas genauer ansehen. Die Datei besteht zum Großteil aus HTTP-Daten, deren Sichtung keine Auffälligkeit zeigt. Ab Packet Nummer 11021 befinden sich jedoch auch auffällige FTP-Daten:

VolgaCTF 2013 - Stegasic 200 - Wireshark - FTP Transfer - flag.rar

Hier wird die Datei “flag.rar” per FTP übertragen. Nicht zuletzt auf Grund der eindeutigen Benennung, beschränken wir den Inhalt der Datei heraus, indem wir die zugehörigen FTP-Data Verkehr auf Port 20 filtern (follow TCP stream). Anschließend speichern wir die Daten und erhalten somit diese RAR-Datei.
Continue reading