Ret2win
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Le sfide Ret2win sono una categoria popolare nelle competizioni di Capture The Flag (CTF), in particolare in compiti che coinvolgono binary exploitation. L'obiettivo è sfruttare una vulnerabilità in un dato binario per eseguire una funzione specifica, non invocata, all'interno del binario, spesso chiamata qualcosa come win
, flag
, ecc. Questa funzione, quando eseguita, di solito stampa un flag o un messaggio di successo. La sfida tipicamente comporta la sovrascrittura dell'indirizzo di ritorno nello stack per deviare il flusso di esecuzione verso la funzione desiderata. Ecco una spiegazione più dettagliata con esempi:
Considera un semplice programma C con una vulnerabilità e una funzione win
che intendiamo chiamare:
Per compilare questo programma senza protezioni dello stack e con ASLR disabilitato, puoi usare il seguente comando:
-m32
: Compila il programma come un binario a 32 bit (questo è facoltativo ma comune nelle sfide CTF).
-fno-stack-protector
: Disabilita le protezioni contro gli overflow dello stack.
-z execstack
: Consenti l'esecuzione di codice nello stack.
-no-pie
: Disabilita l'eseguibile indipendente dalla posizione per garantire che l'indirizzo della funzione win
non cambi.
-o vulnerable
: Nomina il file di output vulnerable
.
Per l'exploit, utilizzeremo pwntools, un potente framework CTF per scrivere exploit. Lo script di exploit creerà un payload per sovrascrivere il buffer e sovrascrivere l'indirizzo di ritorno con l'indirizzo della funzione win
.
Per trovare l'indirizzo della funzione win
, puoi utilizzare gdb, objdump o qualsiasi altro strumento che ti consenta di ispezionare i file binari. Ad esempio, con objdump
, potresti usare:
Questo comando ti mostrerà l'assembly della funzione win
, incluso il suo indirizzo di partenza.
Lo script Python invia un messaggio accuratamente progettato che, quando elaborato dalla vulnerable_function
, fa traboccare il buffer e sovrascrive l'indirizzo di ritorno nello stack con l'indirizzo di win
. Quando vulnerable_function
restituisce, invece di tornare a main
o uscire, salta a win
, e il messaggio viene stampato.
PIE dovrebbe essere disabilitato affinché l'indirizzo sia affidabile tra le esecuzioni o l'indirizzo in cui la funzione sarà memorizzata non sarà sempre lo stesso e avresti bisogno di qualche leak per capire dove è caricata la funzione win. In alcuni casi, quando la funzione che causa il trabocco è read
o simile, puoi fare una Sovrascrittura Parziale di 1 o 2 byte per cambiare l'indirizzo di ritorno in modo che sia la funzione win. A causa di come funziona ASLR, gli ultimi tre nibble esadecimali non sono randomizzati, quindi c'è una 1/16 possibilità (1 nibble) di ottenere l'indirizzo di ritorno corretto.
Stack Canaries dovrebbero essere anch'essi disabilitati o l'indirizzo di ritorno EIP compromesso non sarà mai seguito.
32bit, no ASLR
64 bit con ASLR, con un leak dell'indirizzo bin
64 bit, no ASLR
32 bit, no ASLR, doppio piccolo overflow, primo per traboccare lo stack e ingrandire la dimensione del secondo overflow
32 bit, relro, no canary, nx, no pie, stringa di formato per sovrascrivere l'indirizzo fflush
con la funzione win (ret2win)
32 bit, nx, nient'altro, sovrascrittura parziale di EIP (1Byte) per chiamare la funzione win
32 bit, nx, nient'altro, sovrascrittura parziale di EIP (1Byte) per chiamare la funzione win
Il programma sta solo convalidando l'ultimo byte di un numero per controllare la dimensione dell'input, quindi è possibile aggiungere qualsiasi dimensione purché l'ultimo byte sia all'interno dell'intervallo consentito. Poi, l'input crea un buffer overflow sfruttato con un ret2win.
64 bit, relro, no canary, nx, pie. Sovrascrittura parziale per chiamare la funzione win (ret2win)
arm64, PIE, fornisce un leak PIE la funzione win è in realtà 2 funzioni quindi gadget ROP che chiama 2 funzioni
ARM64, off-by-one per chiamare una funzione win
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)