0x00sec.dev: Exercise 1

2020-04-15 von Mario

Auf der Seite ctf.0x00sec.org werden CTF Spiele veröffentlicht. Für die erste Aufgabe hier ein writeup.

Challenge

Analyse

Da auf der Seite keine hilfreichen Informationen zu finden sind, wird der Quelltext der Seite untersucht.

Der Kommentar gibt einen Hinweis, an welcher Stelle gesucht werden soll.

</body>
  <!-- TODO: -->
  <!-- * Remove the git directory after publishing -->
</html>

Bei einem GIT Repository wird per default ein Ordner mit dem Namen “.git” angelegt. Weiterhin wird automatisch eine Struktur erstellt. Ein Versuch “https://exercise-1.0x00sec.dev/.git/” aufzurufen, ergab folgendes:

Die Anzeige der Fehlermeldung ist gut. Warum? Dadurch ist ersichtlich, dass der Ordner “.git” vorhanden ist.

Als nächstes kann jede einzelne Möglichkeit von weiteren Dateien oder Ordnern probiert werden, welche in der Dokumentation von GIT zu finden ist. Manuell macht das aber keinen Spaß. Das Tool “gitdumper” ist für diese Aufgabe perfekt geeignet.

 

Durchführung

Herunterladen des Tools “gitdumper” und starten.

./gitdumper.sh https://exercise-1.0x00sec.dev/.git/ DEST_FOLDER
Parameter Beschreibung
DEST_FOLDER Der Ordnername gibt an, wo die heruntergeladenen Dateien lokal gespeichert werden sollen.

 

Die Ausgabe von “gitdumper” stellt sich wie folgt dar:

Mit dem Befehl “tree” kann danach eine übersichtliche Darstellung der heruntergeladenen Daten erzeugt werden.

Die einzelnen Commits werden bei GIT gepackt (ZIP), um Speicherplatz zu sparen. Die relevanten Informationen befinden sich im Ordner “objects”. Für das Entpacken habe ich ein kleines Script geschrieben:

 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import zlib  # A compression / decompression library

ROOT_DIR = "/EDIT_ME_PATH_TO_FOLDER/.git/objects/"

def readFile(path_to_file):

	compressed_content = open(path_to_file, 'rb').read()
	decompressed_content = zlib.decompress(compressed_content)
	print("--- BOF --- ")
	print(decompressed_content)
	print("--- EOF --- ")


def main():
	for root, subdirs, files in os.walk(ROOT_DIR):
		for file in files:
			tmp_file = os.path.join(root, file)
			print(tmp_file)
			readFile(tmp_file)


if __name__ == "__main__":
	main()

Das Script gibt die gepackten Daten aus. Zuvor muss die Variable “ROOT_DIR” auf den Ort der heruntergeladenen Daten entsprechend angepasst werden. Daraufhin das Script ausführen:

./zip_to_text.py

Da die Ausgabe etwas unübersichtlich ist, den Befehl erweitern:

./zip_to_text.py | grep Pass

Das sieht doch sehr gut aus. Hier findet ein Vergleich zwischen Username und Passwort statt, wobei das Passwort als SHA256 HASH abgelegt ist.

 

Den HASH-Wert gilt es zu cracken. Dafür kann eine beliebige Plattform verwendet werden.

Nach einigen Sekunden wurde der Originalwert des HASH (Result) angezeigt. Jetzt sind die Informationen für den Usernamen “admin” und für das Passwort “l33tsupah4x0r” bekannt und der Login kann durchgeführt werden.

 

Nach der Anmeldung wird das Flag “flag{g1t-dump1ng-i5-c00l}” angezeigt und die Aufgabe ist abgeschlossen.

Kategorie: IT-Security Schlagwörter: , , ,

Hack-IT: Not K9 But ?

2020-02-13 von Mario

Auf der Seite “canyouhack.it” (leider down) in der Rubrik “Cryptography” gab es eine spannende Challenge.

Challenge

Not K9 But ?

8430727796730470662453

 

Analyse

Die Frage “Not K9 But ?” erinnert irgendwie sehr stark an T9.

Die Zahlen von 0 bis 9 sprechen ebenfalls dafür.

 

Information gathering

  • Auf Wikipedia ist die Tastenbelegung für die Zahlen 0 bis 9 zu finden.

  • Die Seite “canyouhack.it” war nur auf Englisch verfügbar. Die Wahrscheinlichkeit ist groß, dass die Lösung in englischer Sprache vorliegt.
  • Für die Zahl “0” gibt es keine Buchstaben, vermutlich beginnt bei jeder “0” ein neues Wort.

 

Durchführung

Erstellung eines Mappings der Ziffern zu den jeweiligen Buchstabenkombinationen.

Zahl T9 Letters
843 TUV | GHI | DEF
72779673 PQRS | ABC | PQRS | PQRS | WXYZ | MNO | PQRS | DEF
47 GHI | PQRS
662453 MNO | ABC | GHI | JKL | DEF

 

Als nächstes heißt es, probieren… Bei 843 ist das Wort recht schnell zu finden “THE”.

Zahl T9 Letters
843 TUV | GHI | DEF
72779673 PQRS | ABC | PQRS | PQRS | WXYZ | MNO | PQRS | DEF
47 GHI | PQRS
662453 MNO | MNO | ABC | GHI | JKL | DEF

 

Nach einigem Probieren ist das Lösungswort “mobile” gefunden.

 

Anmerkung

Falls das Probieren etwas zu “mühevoll” ist, kann der Vorgang auch durch ein Programm gelöst werden. Es werden alle Buchstabenkombinationen je Wort erstellt und gegen ein Wörterbuch abgeglichen. Daraufhin werden nur die Wörter angezeigt, die im Wörterbuch vorhanden sind. Falls es mehrere Möglichkeiten geben sollte, kann man wählen.

Genau so ein Programm wurde auch schon implementiert: t9-emulator.

 

Kategorie: IT-Security Schlagwörter:

Hack-IT: Reverse Engineering – Aktivierungscode (.NET)

2018-05-06 von Mario

Auf der leider nicht mehr verfügbaren Plattform “CanYouHack.it” gab es die Challenge “I’m sure you’ve just lost the key”. Dabei handelte es sich um eine EXE-Datei (Crack1.exe), welche nach dem Starten einen Aktivierungscode verlangte.

1. Analyse der Datei

Mit dem Befehl “strings” habe ich die EXE-Datei etwas näher untersucht. Dadurch sind folgende interessante Zeichenketten zum Vorschein gekommen.

WindowsFormsApplication1.exe
WindowsFormsApplication1.Properties
System.Windows.Forms
.NETFramework,Version=v4.5

D.h., die EXE-Datei wurde mit großer Wahrscheinlichkeit mit .NET erstellt.

2. Quellcode dekompilieren

Da es sich bei .NET um eine Common Intermediate Language handelt, ist eine Rückumwandlung des Quellcodes relativ leicht umsetzbar. Es existieren dafür verschiedene Tools. In dem Beispiel wurde ILSpy verwendet.

3. Quellcode untersuchen

Aus dem Code geht hervor, dass auf eine Seite zugegriffen und der eingegebene Aktivierungscode als Parameter übergeben wird. Daraufhin erhält man den Antworttext “Valid” zurück und das gesuchte Passwort wird erstellt und ausgegeben.

Der erste Teil kann ignoriert werden, da dieser nur Mittel zum Zweck ist. Der Wert “Valid” kann einfach vorausgesetzt werden. Interessant ist hingegen folgender Abschnitt:

Es ist ein Array gegeben, welches die Buchstaben “a” bis “z” beinhaltet. Über die Inhalte des Arrays wird iteriert und jeder Index wird durch 7 geteilt (Modulo). Ergibt der Rest 0, dann wird der entsprechende Buchstabe in der Variable “text2” gespeichert. Dadurch entsteht das begehrte Passwort.

4. Script erstellen

Die Lösung kann in dem Fall auch per Hand ermittelt werden, jedoch wo bleibt da der Spaß. ;) Hier das erstellte Python Script:

#!/usr/bin/python3

for i in range(97,123,1):
	if ((i-97) % 7 == 0):
		print(str(chr(i)))

 

Zeile Beschreibung
1 Shebang
3 Eine Schleife über die ASCII Werte a bis z.
4 If Abfrage ob die Division (Modulo) den Rest 0 ergibt.
Der Kniff “i-97” erspart die Deklaration eines Arrays mit den Buchstaben “a” bis “z”.
5 Ausgabe des Buchstabens

 

Das Passwort lautet “ahov”.

Kategorie: IT-Security Schlagwörter: , , , ,

Hack-IT: Reverse Engineering einer Android App

2017-09-28 von Mario

Bei diesem Hack-IT geht es um eine Android App, welche im Google Play Store erhältlich ist. Die Aufgabe besteht darin, dass einzugebende Passwort in der App herauszufinden.

Link zur App: https://play.google.com

 

Schritt 1

Für eine Analyse der App muss diese heruntergeladen werden. Dafür gibt es zahlreiche Tools, ich habe die Website apkpure.com verwendet. Im Suchfeld auf der Seite die Adresse der App eingeben und danach den “Download” Button betätigen. Daraufhin steht die APK Datei zur Verfügung.

 

Schritt 2

Mit der Software dex2jar können DEX Dateien in JAR Dateien umgewandelt werden. Nach dem Download der Software sourceforge.net/projects/dex2jar/ wird das Archiv noch entpackt

unzip dex2jar-2.0.zip

und Rechte vergeben.

chmod -R +x dex2jar-2.0/

Schritt 3

Jetzt kann die APK Datei umgewandelt werden.

./dex2jar-2.0/d2j-dex2jar.sh CanYouHack.apk

Danach steht die Datei “CanYouHack-dex2jar.jar” zur Verfügung.

Schritt 4

Als nächstes das Programm JD-GUI (jd.benow.ca) herunterladen, mit welchem der Inhalt der JAR Datei ganz einfach angeschaut werden kann.

Daraufhin heißt es suchen, in der Klasse “Mobile1” wird der hilfreiche Text “… right password!” aufgeführt.

Die IF-Anweisung darüber verrät uns das gesuchte Passwort:

if (paramAnonymousView.getText().toString().equals("1337"))

Das gesuchte Passwort lautet: 1337 und das Hack-IT ist gelöst.

Kategorie: IT-Security Schlagwörter: , , , , ,

Hack-IT: Reverse Engineering – Geheimzahl

2016-11-12 von Mario

Bei diesem Hack-IT liegt eine Binärdatei vor, welche unter Linux ausführbar ist und mit der Programmiersprache C erstellt wurde.

Nach der Ausführung soll eine Geheimzahl eingegeben werden. Wird die falsche Zahl eingegeben, so erscheint die Meldung “Falsch!”.

re01

Eine Möglichkeit, die richtige Zahl herauszufinden, wäre es, einfach ein Skript zu erstellen, welches alle Möglichkeiten durchprobiert. An dieser Stelle soll ein anderer eleganterer Weg dargestellt werden.

Mit dem GNU Debugger (GDB) kann das Programm in Maschinencode umgewandelt bzw. angezeigt werden. Dafür in der Konsole folgenden Befehl verwenden:

gdb hackme.o

Als nächstes im gdb folgende Einstellung setzen:

set disassembly-flavor intel

Dadurch wird eine bessere “Lesbarkeit” der Speicheradressen gewährleistet.

re02

Als nächstes mit dem Befehl

disass main

die Main Methode des Programms disassemblieren. Daraufhin erscheint der Inhalt der Methode in Maschinencode.

re03

In C werden Eingaben durch den User klassisch durch die Funktion “scanf” realisiert. Die Verwendung der Funktion

ist unter “call 0x4004f0 <__isoc99_scanf@plt>” zu finden.

re04

Nach der Eingabe muss der eingegebene Wert in einen Speicherbereich verschoben werden (die nachfolgende Zeile). An dieser Stelle wird es spannend, da als nächstes ein Vergleich folgt. Ist der Vergleich richtig, erhalten wir eine Erfolgs- oder Fehlermeldung.

Es wird die Speicheradresse mit dem Wert “0x539” verglichen. Dabei handelt es sich um einen Hexadezimalwert. Einfach mit einem Taschenrechner umwandeln und die Lösung ist gefunden.

re05

 

Download: Geheimzahl.zip

Kategorie: IT-Security Schlagwörter: , , ,

Hack-IT: DTMF

2016-08-24 von Mario

Ein weiteres spannendes Steganographie Hack-IT in dem eine MP3 File bereitgestellt wurde.

 

Während des Anhörens können “Piep” Töne wahrgenommen werden. Diese erinnern spontan an das Wählen eines analogen Telefons. Für eine weitere Analyse der Frequenzen kann das Tool Audacity verwendet werden.

1. Umwandeln der MP3-Datei in eine WAV-Datei.

lame --decode sound.mp3 sound.wav

2. Die WAV-Datei mit Audacity öffnen (Datei | Datei Öffnen…) und analysieren.

dtmf01

Hier sind die einzelnen Töne zu erkennen. Für eine genauere Analyse den ersten Bereich (gedrückte linke Maustaste) markieren.

dtmf02

Daraufhin in der Software Audacity den Menüpunkt “Analyse” und “Frequenzanalyse” wählen.

3. Durchführen der Frequenzanalyse

Die Maus zum ersten Peak bewegen. Unter dem Diagramm wird der Wert “Spitze” mit 701 Hz angezeigt.

dtmf03

Danach die Maus zum zweiten Peak bewegen. Der Wert “Spitze” zeigt hier 1216 Hz an.

dtmf04

4. Identifizierung der eingegebenen Nummern

Bei dem Mehrfrequenzwahlverfahren (MFV) bzw. dem Dual-tone multi-frequency signaling (DTMF) wird die Rufnummer an die Vermittlungsstelle oder eine Telefonanlage übermittelt. Dabei werden folgende Frequenzen verwendet:

 

MFV-Tastenbelegung
1209 Hz 1336 Hz 1477 Hz 1633 Hz
697 Hz 1 2 3 A
770 Hz 4 5 6 B
852 Hz 7 8 9 C
941 Hz * 0 # D

 

Jede Zeile repräsentiert einen tiefen und jede Spalte einen hohen Ton. Wenn eine Taste gedrückt wird, ergibt sich ein Ton aus der Überlagerung der Tonfrequenzen.

Der erste ermittelte Ton 701 Hz kann in der ersten Zeile verortet werden. Der zweite Ton 1216 Hz ist in der ersten Spalte zu finden. Daraus ergibt sich die erste Zahl “1”. Die Schritte zwei, drei und vier müssen jeweils wiederholt werden.

 

Das gesuchte Passwort lautet: 1337.

 

5. Automatische Erkennung der Frequenzen

Eine alternative Möglichkeit ist die automatische Erkennung der Frequenzen und die Auflösung der damit verbundenen Zahlen mit der Software multimon.

multimon -t wav sound.wav -a DTMF

Wenn es funktioniert, sollte sich die Ausgabe wie folgt darstellen:

dtmf05

 

Hack-IT: Steganographie – bebe iloron

2015-11-11 von Mario

Ein “Hack-IT” ist eine Hacking Challenge bzw. ein Hacking Contest, zu Deutsch eine “Herausforderung zum Hacken“. Dabei wird eine Aufgabe oder eine Abfolge von Aufgaben definiert. Die Aufgaben befassen sich thematisch mit verschiedenen Bereichen, z.B. Steganographie, Kryptographie, JavaScript, Reverse Engineering, Logik, Mathematik, Programmierung, Security und vieles mehr.

Bei der folgenden Aufgabe handelt es sich um ein Steganographie Hack-IT. In der Steganographie wird eine verborgene Speicherung oder Übermittlung von Informationen in einem Trägermedium (Container) durchgeführt. Die hier abgebildete Grafik beinhaltet mehr Informationen als auf Anhieb ersichtlich ist.

bebe_lloron3

Auf den ersten Blick ist nichts Auffälliges zu erkennen. Deshalb wird das Bild nach enthaltenen Textbausteinen mit dem Befehl “strings” durchsucht.

strings bebe_lloron3.jpg

Nach genauerer Betrachtung aller ausgegeben Texte fallen zwei Informationen auf.

strings

  1. P4ssw0rd: nO pArA dE lLoRar!
  2. lupa5.gif^^?

Mit diesen Informationen kommen wir allerdings noch nicht ans Ziel. Also wird das Bild mit einem Hex-Editor untersucht.

hex1

Im Hex-Editor ist das Dateiformat JFIF erkennbar. Wird nach dem Text “P4ssw0rd” gesucht, wird dieser ebenfalls gefunden.

hex2

Da an das Bild etwas hinzugefügt wurde, muss das Ende der Bilddatei gefunden werden. Dafür können Datei-Signatur-Datenbanken verwendet werden. Mögliche Quellen sind die Seiten www.filesignatures.net oder wikipedia.

SOI (Start of Image): FF D8 FF E0

EOI (End of Image): FF D9

Suchen wir jetzt nach dem Dateiende “FF D9”, dann wird ersichtlich, dass eine Datei an das Bild angefügt wurde.

hex3

Die Buchstaben “Rar” aus dem gefunden Text lassen darauf schließen, dass es sich bei der angehängten Datei um eine RAR-Datei handelt. Das Spiel mit der Filesiganture wird wiederholt und im HEX-Editor danach gesucht.

Start of RAR File: 52 61 72 21 1A 07 00

hex4

Jetzt gilt es, die RAR-Datei und die Grafik voneinander zu trennen. Mit dem Hex-Editor (Bless) einfach alle Zeilen ab dem Wert markieren, kopieren und danach eine neue Datei mit Bless anlegen, einfügen und speichern (archive.rar).

Mit dem Befehl “unrar” kann die RAR-Datei entpackt werden.

unrar x archive.rar

unrar

Dabei wird die Eingabe eines Passworts erwartet, welches wir glücklicherweise schon gefunden haben. Das Passwort zum extrahieren lautet “nO pArA dE lLo”. Daraufhin wird eine weitere Grafik entpackt, die folgenden Inhalt besitzt.

lupe1

Da die Lupe schon auf die Pixel hinweist, schauen wir uns diese etwas genauer an. Um die Kanten klarer abzugrenzen, werden ein paar Hilfslinien eingezeichnet.

lupe2

Die Darstellung erinnert an einen QR-Code, wobei irgend etwas fehlt. Nach kurzer Recherche auf Wikipedia wird ersichtlich, dass die speziellen Markierungen fehlen. Nach etwas “Malen nach Zahlen” sieht die Grafik wie folgt aus:

lupe3

Irgendetwas stimmt noch nicht, wird die Grafik aber horizontal gedreht passt alles.

lupe4

Die Grafik kann dann auf der Seite www.onlinebarcodereader.com hochgeladen werden und der Lösungstext wird angezeigt.

final

 

Das Hack-IT ist somit gelöst. :)