
Binäre Ausnutzung und Reverse Engineering (von Assembler in C)
Erkunden Sie Disassemblierung, binäre Exploitation & Reverse Engineering anhand von 10 kleinen Herausforderungen.
Im Ordner für jede Ebene finden Sie:
flag - Passwort für die nächste Ebene
README.md - Anleitung zum Finden des Passworts
source.c - das reverse engineered Binary
dissasembly_notes.md - Notizen zu Assembler
Siehe subject für weitere Details.
Für mehr GDB & Exploitation-Spaß schauen Sie sich das vorherige Projekt RainFall an.
Laden Sie zuerst von 42 OverRide.iso herunter.
Unter Mac OSX installieren Sie VirtualBox.
Erstellen Sie in VirtualBox eine neue VM (klicken Sie auf 'Neu').
Fahren Sie mit allen nächsten Schritten mit den Standardeinstellungen fort:
Klicken Sie als Nächstes auf Einstellungen > Netzwerk > Adapter 1 > Angeschlossen an: Gebrückter Adapter.
Noch in den Einstellungen klicken Sie auf Massenspeicher > Rechts von "Controller: IDE" befindet sich ein CD-Symbol mit einem +-Zeichen (optisches Laufwerk hinzufügen).
Klicken Sie auf "Disk-Image hinzufügen" und wählen Sie OverRide.iso aus.
Klicken Sie auf Start, um die VM zu starten. Sobald sie läuft, sollte die IP-Adresse der VM angezeigt und zur Anmeldung aufgefordert werden.
Melden Sie sich von einer separaten Shell als Benutzer level00 mit dem Passwort level00 an.
ssh level00@{VM_IP} -p 4242
Als Benutzer level00 besteht das Ziel darin, das Passwort für Benutzer level01 zu lesen, das sich unter /home/users/level01/.pass befindet. Allerdings hat Benutzer level00 keine Berechtigung, diese Datei zu lesen.
Im Home-Verzeichnis von Benutzer level00 befindet sich ein Binary level00 mit gesetztem SUID und Besitzer level01.
Das bedeutet, wenn wir das Binary level00 ausführen, tun wir dies mit den Berechtigungen von Benutzer level01.
Wir müssen eine Sicherheitslücke im Binary level00 mit gdb finden. Dann die Sicherheitslücke ausnutzen, um system("/bin/sh") auszuführen, wodurch eine Shell als Benutzer level01 geöffnet wird, unter der wir die Berechtigung haben, das Passwort zu lesen.
cat /home/users/level01/.pass
Dann melden Sie sich als Benutzer level01 an.
su level01
Wiederholen Sie dies für jede Ebene.
Für jede Ebene haben wir das originale source.c durch Untersuchung der gdb-Disassemblierung des Binarys reverse engineered.
0 - Fest codiertes Passwort
1 - Ret2Libc-Angriff
2 - printf()-Formatstring-Angriff
3 - Passwort durch Brute-Force
4 - gets()-Stack-Überlauf + Return-to-libc-Angriff
5 - Shellcode in Umgebungsvariable + printf()-Formatstring-Angriff
6 - Hash-Wert mit gdb ermittelbar
7 - Ret2Libc-Angriff auf ungeschützte Datentabelle
8 - Binary sichert Passwort über Symlink
9 - Off-by-one-Fehler
Ich habe dieses Projekt im Team mit dem super talentierten @dfinnis geschrieben.