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

ForbiddenBITS CTF 2013 – X93

ForbiddenBITS CTF 2013 - X93 - task description

Diese Challenge (X93) ist der vorherigen “X94-Machine” sehr ähnlich. Nicht nur die Aufgabenstellung ist identisch, auch der Server selbst bietet exakt die gleichen Funktionen.

rup0rt@lambda:~/FB2013$ nc 95.170.83.28 3003
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 _    _  93   _________   ______   ______  _    _  _____  ______   ______
\ \  / /     | | | | | \ | |  | | | |     | |  | |  | |  | |  \ \ | |
 >|--|<      | | | | | | | |__| | | |     | |--| |  | |  | |  | | | |----
/_/  \_\     |_| |_| |_| |_|  |_| |_|____ |_|  |_| _|_|_ |_|  |_| |_|____

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

Really Wanna Trade with us ? yes/no
yes

Enter Username :
1338-offbyone

Welcome 1338

Enter your Command :

[1] balance
[2] exchange
[3] transfert
[4] restricted area
4

This Area is restrcited for accounts with 5000usd+

Wieder geht es darum, unseren Kontostand auf über 5000 US-Dollar zu erhöhen um so auf den geschützen Bereich zugreifen zu können. Zunächst wiederholen wir testweise unser Vorgehen aus der voherigen Challenge.

[1] balance
[2] exchange
[3] transfert
[4] restricted area
2

Enter Destination currency
EUR 

Enter Source currency
USD

Enter Amount
-5000 

you dont have such amount

Diesmal scheinen die Benutzereingaben jedoch korrekt validiert zu werden und wir müssen einen anderen Weg finden, unser Konto aufzufüllen. Da das System beim Währungstausch einen Umrechnungsfaktor verwenden muss, liegt vielleicht eine Ungenauigkeiten beim Runden vor?
Continue reading

ForbiddenBITS CTF 2013 – X94

ForbiddenBITS CTF 2013 - X94 - task description

Bei der X94 – Challenge werden wir aufgefordert, Zugriff auf den eingeschränkten Bereich zu erlangen. Dazu wird uns eine IP-Adresse sowie Port genannt. Um einen Überblick zu erhalten, verbinden wir uns zunächst zu dem System:

rup0rt@lambda:~$ nc 95.170.83.28 3002
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 _    _  94   _________   ______   ______  _    _  _____  ______   ______
\ \  / /     | | | | | \ | |  | | | |     | |  | |  | |  | |  \ \ | |
 >|--|<      | | | | | | | |__| | | |     | |--| |  | |  | |  | | | |----
/_/  \_\     |_| |_| |_| |_|  |_| |_|____ |_|  |_| _|_|_ |_|  |_| |_|____

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

Really Wanna Trade with us ? yes/no
yes

Enter Username :
1338-offbyone

Welcome 1338-offbyone

Enter your Command :

[1] balance
[2] exchange
[3] transfert
[4] restricted area
4

This Area is restrcited for accounts with 5000usd+

Wir werden hier also von der sogenannten “X94-Maschine” begrüßt, die uns zunächst fragt, ob wir wirklich Handel betreiben wollen – was wir natürlich bejahen. Anschließend wird der Benutzername angefragt, den wir beliebig wählen können. Im Hauptmenü angelangt, wird die Option “restricted area” direkt angeboten, liefert uns jedoch bei Auswahl die Mitteilung, dass der Bereich nur für Konten mit mindestens 5000 US-Dollar Verfügbar ist.

Das Ziel der Challenge ist somit erkannt: wir müssen über das System irgendwie erreichen, dass unserem Konto 5000 US-Dollar gutgeschrieben werden.

Continue reading

CodeGate 2013 Quals – Web 200

Bei dieser Challenge (web 200) wird uns eine Webseite genannt, die angegriffen werden soll um so an den Schlüssel zu gelangen. Ein erster Aufruf der URL liefert folgendes Bild:

CodeGate CTF 2013 - web 200 - website

Neben dem Quellcode der gesamten Webseite und einer Login-Möglichkeit, wird auch eine Seite zur Generierung eines One-Time-Passwords (OTP) bereit gestellt, die sich so darstellt:

CodeGate CTF 2013 - web 200 - one time password

Es wird also ein Einmal-Passwort generiert, das sich alle 20 Sekunden ändert und demnach auch nur für 20 Sekunden Gültigkeit besitzt. Darüber hinaus wird eine ID angegeben, die aus der derzeitigen IP-Adresse besteht. Aus dem Quellcode der Login-Seite (login_ok.php) lässt sich folgendes entnehmen:

if (strcmp($password, $_POST["ps"]) == 0) {
  echo "welcome, <b>".$_POST["id"]."</b><br />";
  echo "<input type='button' value='back' onclick='history.back();' />";

  if ($_POST["id"] == "127.0.0.1") {
    echo "<hr /><b>".$flag."</b><br />";
  }
}

Daraus ergibt sich das Ziel, um diese Challenge zu lösen. Der Login muss über die ID “127.0.0.1” (localhost) realisiert werden, damit der Inhalt der Flag-Datei offenbart wird. Dazu müssen wir entweder von der IP-Adresse 127.0.0.1 auf die OTP-Generierung zugreifen, was nicht möglich sein wird oder anderweitig die Passwortabfrage unter Angabe dieser ID umgehen.
Continue reading