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

plaidCTF 2013 – three eyed fish

plaidCTF 2013 - three eyed fish - task description

Diese Challenge (three eyed fish) verrät zunächst nicht viel über das eigentliche Ziel. Nur eine Binärdatei wird zum Download bereit gestellt und der legendäre “Ban Hammer” als Belohnung für dieses Quest versprochen 😉

rup0rt@linux64:~/Plaid2013# file three_eyed_fish
three_eyed_fish: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

Eine erste Untersuchung ergibt, dass es sich um ein 64bit Linux-Binary handelt. Um das normale Verhalten des Programmes zu testen, starten wir die Datei direkt.

rup0rt@linux64:~/Plaid2013# ./three_eyed_fish

Eine Ausgabe erzeugt das Programm nach dem Starten nicht. Beendet wird es jedoch auch nicht sofort – es muss also eine andere Funktion geben. Nach weiterer Betrachtung stellt man fest, dass immer nach dem Starten die Umschalt-LED des Keyboards aufleuchtet und zu blinken beginnt.

Die LED blinkt jedoch nicht einheitlich oder nach einem festen Muster. Alles was erkennbar ist, dass regelmäßig größere Pausen zwischen den Sequenzen liegen. Es könnte sich demnach um eine Art Morse-Code handeln, wobei die Pausen die Trennung zwischen den einzelnen Buchstaben darstellt.
Continue reading

plaidCTF 2013 – charsheet

plaidCTF 2013 - charsheet - task description

Ziel dieser Challenge (charsheet) ist es, an den Charakter-Namen des Administrators einer Webseite zu gelangen. Der Aufgabenstellung zur Folge spielt dieser mit dem Auftraggeber zusammen in einer Dungeons & Dragons (D&D) – Kampange.

Zuerst sehen wir uns die angegebene Webseite im Browser etwas genauer an. Dabei finden wir ein System vor, mit dem Charakterbögen von Charakteren aus Pen-and-Paper Rollenspielen verwaltet und gepflegt werden können.

Neben der Möglichkeit sich auf der Seite zu registrieren und – nach Login – neue Charaktere anzulegen, kann auch nach bereits hinterlegten Charakteren und Kampagnen gesucht werden. Ohne zu zögern testen wir die Suchfelder direkt auf die Möglichkeit von SQL-Injections, indem ein Hochkomma ‘ übergeben wird.

plaidCTF 2013 - charsheet - sql injection check

Tatsächlich führt diese Anfrage direkt zu einem serverseitigen Fehler und wir erhalten folgende Ausgabe:

plaidCTF 2013 - charsheet - sql query error message
Continue reading

ForbiddenBITS CTF 2013 – Old

ForbiddenBITS CTF 2013 - old - task description

Wie gewohnt ist Weniger auch diesmal Mehr und wir erhalten als Aufgabe (old) nur einen Kommentar, dass es sich um einen “scheinbaren binären Auftrag” handelt. Zusätzlich wird eine Datei zum Download bereit gestellt.

Die erste Betrachtung mit dem Werkzeug “file” um festzustellen, um was für einen Typ von Datei es sich in Wirklichkeit handelt, liefert:

rup0rt@lambda:~/FB2013/old$ file bin.bin
bin.bin: x86 boot sector, code offset 0x6e

Uns liegt also ein bootbares Image vor, das durch Übergabe an einen Emulator, wie QEMU gestartet werden könnte. Da die Datei allerdings nur 512 Bytes groß ist und das simple Starten per Emulator ohnehin nicht die Flagge liefern wird, sehen wir uns direkt etwas genauer an. Zunächst prüfen wir, welche Zeichenketten enthalten sind:

rup0rt@lambda:~/FB2013/old$ strings bin.bin
Password: 
,jNice, 16bits world is nice :D. Validate using that password :)
No :(, try again.

Offensichtlich scheint eine Passwortabfrage implementiert zu sein, die abhängig von der korrekten Eingabe eine positive oder negative Rückmeldung erzeugt. Unser Ziel zur Lösung der Challenge wird es also sein, an genau dieses Passwort zu gelangen.
Continue reading

Nuit du Hack 2013 Quals – huge.js

Nuit du Hack 2013 - huge.js - task website

Beim Aufruf der Webseite der “huge.js” – Challenge erschien nach unwesentlicher aber bemerkbarer Wartezeit dieses Bild mit einer eingeblendeten Inputbox. Der Quellcode erstaunlich einfach gestrickt:

<body>
  <div id="panel">
  </div>
  <script src="huge.js" language="javascript"></script>
</body>

Klarer Fall, erstmal die Ressource huge.js runterladen … erster Schock – 25 MB komprimiertes Javascript 🙂 Na danke!

Nuit du Hack 2013 - huge.js - obfuscated javascript code

Dateianalyse via “SharpEye-Methode” ergab, dass es sich um ein paar wenige Byte JS-Code, dann 99,9999% Hexkrams und ein paar schließende Klammern am Ende der Datei handelte.
Continue reading

ForbiddenBITS CTF 2013 – Fantastic

ForbiddenBITS CTF 2013 - fantastic - task description

Wieder eine sehr spartanische Aufgabenbeschreibung für diese Challenge (Fantastic). Neben dem Hinweis “ein paar Jahre zurück zu gehen”, wird noch dieses Bild bereit gestellt, das mit dem Namen “wars.png” bezeichnet ist:

ForbiddenBITS CTF 2013 - fantastic - wars

Dies sieht nach irgendeiner kryptischen Sprache aus. Mein erster Gedanke ging in die Richtung, eine Schriftart zu finden, die jedem dieser Zeichen einen Buchstaben zuordnen lässt – ähnlich der bekannten Windows – Webdings – Fonts. Die Suche im Internet nach Schriftarten, die dieser ähnlich sehen, verlief auf die schnelle jedoch ohne Erfolg.

Also widmen wir uns als Nächstes die Bezeichnung der Challenge “fantastic” und des Bildes “wars”. Die Google-Bildersuche nach “wars font” liefert relativ zu Beginn einen sehr interessanten Treffer mit dem Titel “Aurebesh – the alphabet of the Star Wars universe“.

ForbiddenBITS CTF 2013 - fantastic - Star Wars aurek besh alphabet

Demnach handelt es sich bei “Aurebesh” um die galaktische Standardsprache, die im “STAR WARS”-Universum gesprochen bzw. geschrieben wird. Die Zeichen sind mit dem gegebenen Bild identisch und müssen nur noch Übersetzt werden.

ForbiddenBITS CTF 2013 - fantastic - solution

Die Lösung lautet somit “STARWARSISCOOL“.

ForbiddenBITS CTF 2013 – X95

ForbiddenBITS CTF 2013 - X95 - task description

Zum Lösen dieser Challenge (X95) muss der Aufgabenstellung nach ein Passwort angegriffen und anschließend offensichtlich auf dem Zielsystem unter Port 3002 eingegeben werden. Zusätzlich erhalten wir den Quellcode des Dienstes, der auf dem System lauscht.
Bevor wir uns überhaupt mit dem Server verbinden, sehen wir uns das mitgelieferte Perl-Script an. Folgende Funktionsweise ist darin implementiert:

#!/usr/bin/perl
use IO::Socket;
my $welcome_msg = <<"EOT";
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 _    _  95   _________   ______   ______  _    _  _____  ______   ______
\\ \\  / /     | | | | | \\ | |  | | | |     | |  | |  | |  | |  \\ \\ | |
 >|--|<      | | | | | | | |__| | | |     | |--| |  | |  | |  | | | |----
/_/  \\_\\     |_| |_| |_| |_|  |_| |_|____ |_|  |_| _|_|_ |_|  |_| |_|____

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

EOT

$|=1;
$lis = IO::Socket::INET->new (
  LocalPort =gt; 3002,
  Type =gt; SOCK_STREAM,
  Reuse=> 1,
  Listen => 1000
) or die "Error #1 $@\n";

Das Skript definiert zunächst eine Willkommens-Nachricht und öffnet einen Socket, der auf Port 3002 lauscht.

while( $c = $lis->accept() ) {
  if ($pid=fork) {
    next;
  } else {
    unless (defined $pid) { die "Threads problem $! \n"; }
    $flag="";
    print $c $welcome_msg."\n\n";

    [... siehe nächster Auszug ...]

  }
   exit;
}
close $lis;

Anschließend wird die eigentliche Hauptschleife erreicht, die für jede Verbindung einen neuen Thread erstellt, die Variable $flag defininiert – die hier, anders auf dem Zielsystem laufenden Dienst, leer ist – und die Willkommensnachricht ausgibt. Was passiert nun genau, wenn ein Client sich zum Server verbindet?
Continue reading