Tag Archives: ctf

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

plaidCTF 2013 – hypercomputer 1

plaidCTF 2013 - Hypercomputer 1 - Task description

Diese Challenge (hypercomputer 1) erinnert nicht nur vom Namen her an die Supercomputer-Challenge aus dem vorjährigen plaidCTF 2012. Auch die Aufgabenstellung selbst weist bereits auf diese Challenge hin und vermerkt, dass es diesmal einfacher sein soll. Neben der Beschreiben erhalten wir die IP-Adresse eines SSH-Servers von dem wir uns dieses Binary kopieren.

Eine erste Untersuchung zeigt uns…

root@linux64:~/Plaid2013# file hypercomputer 
hypercomputer: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x0b7c8d904831417f536c59b59fdecfc738136536, stripped

…, dass es sich um ein 64bit Linux-Binary handelt, das beim normalen, testweisen Ausführen diese Ausgabe liefert:

root@linux64:~/Plaid2013# ./hypercomputer 
...Welcome to Hypercomputer!...
...This could take a very long time...

Es ist jedoch nicht so, dass dieser Text sofort erscheint – vielmehr dauert es mehrere Sekunden, was darauf schließen lässt, wie lange die gesamte Berechnung und Ausgabe der Flagge dauern könnte. Im letzten Jahr musste der Assembler-Code per Hand untersucht und optimiert werden, also sehen wir uns auch diesmal das Programm im Debugger an.

root@linux64:~/Plaid2013# gdb ./hypercomputer 
GNU gdb (GDB) 7.4.1-debian
Reading symbols from /root/Plaid2013/hypercomputer...(no debugging symbols found)...done.
(gdb) run
Starting program: /root/Plaid2013/hypercomputer 
...Welcome to Hypercomputer!...
...This could take a very long time...
^C
Program received signal SIGINT, Interrupt.
0x00007ffff787cbc0 in nanosleep () from /lib/x86_64-linux-gnu/libc.so.6

Durch die Unterbrechung der Programmausführung mit CTRL+C sehen wir, dass die Ausführung in der Funktion nanosleep(), die eine bestimmte Zeit abwartet, angehalten wurde. Dies erinnert schon an das Vorjahr, in dem der Programmablauf ebenfalls durch solche Funktionen künstlich verzögert wurde.
Continue reading