
Binary exploitation e Reverse-engineering (da assembly a C)
Esplora il disassemblaggio, l'exploit dei binari e il reverse-engineering attraverso 10 piccole sfide.
Nella cartella di ogni livello troverai:
flag - password per il livello successivo
README.md - come trovare la password
source.c - il binario reverse-engineered
dissasembly_notes.md - note sull'assembly
Vedi il subject per maggiori dettagli.
Per altro divertimento con gdb e exploit, dai un'occhiata al progetto precedente RainFall.
Prima scarica da 42 OverRide.iso.
Su Mac OSX, installa VirtualBox.
In VirtualBox crea una nuova VM (clicca su Nuova).
Procedi attraverso tutti i passaggi successivi con le impostazioni predefinite:
Successivamente clicca Impostazioni > Rete > Scheda 1 > Connesso a: Adattatore bridge.
Sempre nelle impostazioni clicca Archiviazione > A destra di "Controller: IDE", c'è un'icona CD con un segno + (aggiungi unità ottica). Clicca Aggiungi immagine disco, e seleziona OverRide.iso.
Clicca Avvia per avviare la VM, una volta in esecuzione dovrebbe mostrare l'indirizzo IP della VM e chiedere all'utente di effettuare il login.
Accedi da una shell separata come utente level00 con password level00.
ssh level00@{VM_IP} -p 4242
Come utente level00 l'obiettivo è leggere la password per l'utente level01, che si trova in /home/users/level01/.pass. Tuttavia, l'utente level00 non ha i permessi per leggere questo file.
Nella home folder dell'utente level00 c'è un binario level00 con SUID impostato e proprietario level01.
Ciò significa che quando eseguiamo il binario level00, lo facciamo con i permessi dell'utente level01.
Dobbiamo trovare una vulnerabilità nel binario level00 con gdb. Poi sfruttare la vulnerabilità per eseguire system("/bin/sh"), aprendo una shell come utente level01 dove abbiamo i permessi per leggere la password.
cat /home/users/level01/.pass
Poi accedi come utente level01.
su level01
Ripeti per ogni livello.
Per ogni livello, abbiamo reverse-engineered il source.c originale esaminando il disassemblaggio gdb del binario.
0 - Password hardcoded
1 - Attacco Ret2Libc
2 - Attacco printf() format string
3 - Password a forza bruta
4 - gets() stack overflow + Attacco Return-to-libc
5 - Shellcode in variabile d'ambiente + attacco printf() format string
6 - Valore hash scopribile con gdb
7 - Attacco Ret2Libc su tabella dati non protetta
8 - Il binario fa il backup della password tramite symlink
9 - Errore off-by-one
Ho scritto questo progetto in team con il super talentuoso @dfinnis.