Category Archives: Writeups

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

VolgaCTF 2013 – web 100

VolgaCTF 2013 - Web 100 - task description

Die Web 100 – Challenge des VolgaCTF erklärt zunächst einmal die Funktion der verlinkten Webseite auf http://10.10.0.5. Demnach handelt es sich um ein Portal um Mitteilungen zu platzieren, wobeo den VIP-Benutzern besondere Rechte zuteil werden. Ein Blick auf die Webseite selbst zeigt uns:

VolgaCTF 2013 - Web 100 - Space diary website

Die Seite “Space Diary”, die leider nur auf russisch angeboten wurde, ermöglicht es uns, sich im oberen Bereich mit Benutzername und Passwort anzumelden. Des Weiteren ist unten erkennbar, dass VIP-Benutzer bereits Nachrichten hinterlassen haben.
Continue reading

VolgaCTF 2013 – ppc 100

VolgaCTF 2013 - PPC 100 - task description

Bei dieser Challenge (ppc 100) geht es um eine RTF-Datei. Das Rich Text Format ist ein altes, von Microsoft entwickeltes, proprietäres Dateiformat zur Darstellung von Textdokumenten. Ein erster Blick in das Dokument mit LibreOffice offenbart uns diesen Inhalt:

VolgaCTF 2013 - PPC 100 - RTF file view

Offensichtlich handelt es sich um ein offizielles, von der Australischen Regierung herausgegebenes 11-seitiges Dokument zur Weltraumpolitik. Die weitere Betrachtung in LibreOffice lässt keine Auffälligkeiten erkennen.

Ein RTF-Dokument wird jedoch in der Datei selbst mit programmiersprachenähnlichen Code-Blöcken beschrieben, weshalb sich ein Blick in die Datei selbst durchaus lohnt. Neben ganz “normalen” Anweisungblöcken, wie zum Beispiel:

\styrsid489982 Heading 1 Char;}{\*\cs24 \additive

… finden sich auch sehr Auffällige Blöcke, wie dieser:

{\*\volgactf412 JAQQnQECTB0KnUkZSK8xCMNZw/flr3799PyZU8O5DTNheDBwX
qopApfP4Kakq0jSUceLbRqlDIM0a8vpDkIEwKbTNJGRd6oqQmRTuwJ+kwarG2vT
[...]

Das Tag “VolgaCTF” kann kein Zufall sein! Von diesen Anweisungen gibt es mehrere Hundert Stück, jeweils gefolgt von einer Zeichenkombination, die auf den ersten Blick sehr nach Base64 aussieht. Die Zahl, die sich Hinter dem VolgaCTF-Tag befindet, könnte dabei für die Postion des Blockes stehen.
Continue reading

VolgaCTF 2013 – admin 100

VolgaCTF 2013 - admin 100 - task description

Bis auf den Hinweis, dass es “viel zu lesen” gibt, ist die Aufgabenbeschreibung dieser Challenge (admin 100) ist nicht sehr aussagekräftig. Zusätzlich erhalten wir diese Datei. Nach dem Entpacken erhalten wir folgendes Ergebnis:

rup0rt@lambda:~/VolgaCTF2013/admin100$ ls
0  3  6  9  c     dot  g  j  m  p      r      t  w
1  4  7  a  coma  e    h  k  n  q      s      u  x
2  5  8  b  d     f    i  l  o  quote  space  v  y

Das Archiv beinhaltet viele Verzeichnisse, die nach fast jedem Buchstaben, jeder Zahl und einzelnen Sonderzeichen benannt sind. In jedem Verzeichnis befindet sich eine Datei namens “file”, die beispielsweise so aussehen:

12
25
37
59
96
113
116
122
[...]

Meiner Vermutung nach, beschreiben die Namen der Verzeichnisse das entsprechende Zeichen und die Zahlen in den “file”-Dateien die Positionen, an denen das Zeichen im Lösungstext vorkommt.
Continue reading