Metodologia di Base per lâExploitation Binaria
Tip
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)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Informazioni di Base su ELF
Prima di iniziare a sfruttare qualsiasi cosa, è interessante comprendere parte della struttura di un binario ELF:
Strumenti di Exploitation
Metodologia di Stack Overflow
Con cosÏ tante tecniche, è utile avere uno schema su quando ciascuna tecnica sarà utile. Nota che le stesse protezioni influenzeranno tecniche diverse. Puoi trovare modi per bypassare le protezioni in ciascuna sezione di protezione, ma non in questa metodologia.
Controllare il Flusso
Ci sono diversi modi in cui potresti finire per controllare il flusso di un programma:
- Stack Overflows sovrascrivendo il puntatore di ritorno dallo stack o lâEBP -> ESP -> EIP.
- Potrebbe essere necessario abusare di un Integer Overflows per causare lâoverflow.
- Oppure tramite Arbitrary Writes + Write What Where to Execution.
- Format strings: Abusare di
printfper scrivere contenuti arbitrari in indirizzi arbitrari. - Array Indexing: Abusare di un indicizzazione mal progettata per poter controllare alcuni array e ottenere una scrittura arbitraria.
- Potrebbe essere necessario abusare di un Integer Overflows per causare lâoverflow.
- bof to WWW via ROP: Abusare di un buffer overflow per costruire un ROP e poter ottenere un WWW.
Puoi trovare le tecniche di Write What Where to Execution in:
Loop Eterni
Qualcosa da tenere in considerazione è che di solito solo un exploitation di una vulnerabilità potrebbe non essere sufficiente per eseguire un exploit con successo, specialmente alcune protezioni devono essere bypassate. Pertanto, è interessante discutere alcune opzioni per rendere una singola vulnerabilità sfruttabile piÚ volte nella stessa esecuzione del binario:
- Scrivere in una catena ROP lâindirizzo della funzione
maino lâindirizzo in cui si verifica la vulnerabilitĂ . - Controllando una catena ROP appropriata, potresti essere in grado di eseguire tutte le azioni in quella catena.
- Scrivere nellâindirizzo
exitin GOT (o qualsiasi altra funzione utilizzata dal binario prima di terminare) lâindirizzo per tornare alla vulnerabilitĂ . - Come spiegato in .fini_array, memorizzare qui 2 funzioni, una per chiamare di nuovo la vuln e unâaltra per chiamare
__libc_csu_finiche richiamerĂ di nuovo la funzione da.fini_array.
Obiettivi di Exploitation
Obiettivo: Chiamare una Funzione Esistente
- ret2win: Câè una funzione nel codice che devi chiamare (forse con alcuni parametri specifici) per ottenere il flag.
- In un bof regolare senza PIE e canary devi solo scrivere lâindirizzo nel puntatore di ritorno memorizzato nello stack.
- In un bof con PIE, dovrai bypassarlo.
- In un bof con canary, dovrai bypassarlo.
- Se hai bisogno di impostare diversi parametri per chiamare correttamente la funzione ret2win, puoi usare:
- Una catena ROP se ci sono abbastanza gadget per preparare tutti i parametri.
- SROP (nel caso tu possa chiamare questa syscall) per controllare molti registri.
- Gadget da ret2csu e ret2vdso per controllare diversi registri.
- Tramite un Write What Where potresti abusare di altre vulnerabilitĂ (non bof) per chiamare la funzione
win. - Pointers Redirecting: Nel caso in cui lo stack contenga puntatori a una funzione che verrĂ chiamata o a una stringa che verrĂ utilizzata da una funzione interessante (system o printf), è possibile sovrascrivere quellâindirizzo.
- ASLR o PIE potrebbero influenzare gli indirizzi.
- Uninitialized variables: Non si sa mai.
Obiettivo: RCE
Via shellcode, se nx disabilitato o mescolando shellcode con ROP:
- (Stack) Shellcode: Questo è utile per memorizzare uno shellcode nello stack prima o dopo aver sovrascritto il puntatore di ritorno e poi saltare a esso per eseguirlo:
- In ogni caso, se câè un canary, in un bof regolare dovrai bypassarlo (leak).
- Senza ASLR e nx è possibile saltare allâindirizzo dello stack poichĂŠ non cambierĂ mai.
- Con ASLR dovrai utilizzare tecniche come ret2esp/ret2reg per saltare a esso.
- Con nx, dovrai usare alcuni ROP per chiamare
memprotecte rendere alcune paginerwx, per poi memorizzare lo shellcode lĂŹ (chiamando read ad esempio) e poi saltare lĂŹ. - Questo mescolerĂ shellcode con una catena ROP.
Via syscalls
- Ret2syscall: Utile per chiamare
execveper eseguire comandi arbitrari. Devi essere in grado di trovare i gadget per chiamare la specifica syscall con i parametri. - Se ASLR o PIE sono abilitati, dovrai sconfiggerli per utilizzare i gadget ROP dal binario o dalle librerie.
- SROP può essere utile per preparare il ret2execve.
- Gadget da ret2csu e ret2vdso per controllare diversi registri.
Via libc
- Ret2lib: Utile per chiamare una funzione da una libreria (di solito da
libc) comesystemcon alcuni argomenti preparati (ad esempio,'/bin/sh'). Devi che il binario carichi la libreria con la funzione che desideri chiamare (libc di solito). - Se compilato staticamente e senza PIE, lâindirizzo di
systeme/bin/shnon cambierĂ , quindi è possibile usarli staticamente. - Senza ASLR e conoscendo la versione di libc caricata, lâindirizzo di
systeme/bin/shnon cambierà , quindi è possibile usarli staticamente. - Con ASLR ma senza PIE, conoscendo la libc e con il binario che utilizza la funzione
systemè possibileretallâindirizzo di system nel GOT con lâindirizzo di'/bin/sh'nel parametro (dovrai scoprirlo). - Con ASLR ma senza PIE, conoscendo la libc e senza che il binario utilizzi la
system: - Usa
ret2dlresolveper risolvere lâindirizzo disysteme chiamarlo. - Bypassa ASLR e calcola lâindirizzo di
systeme'/bin/sh'in memoria. - Con ASLR e PIE e non conoscendo la libc: Devi:
- Bypassare PIE.
- Trovare la versione di
libcutilizzata (leak un paio di indirizzi di funzione). - Controllare gli scenari precedenti con ASLR per continuare.
Via EBP/RBP
- Stack Pivoting / EBP2Ret / EBP Chaining: Controllare lâESP per controllare RET attraverso lâEBP memorizzato nello stack.
- Utile per off-by-one stack overflows.
- Utile come modo alternativo per controllare EIP mentre si abusa di EIP per costruire il payload in memoria e poi saltare a esso tramite EBP.
Varie
- Pointers Redirecting: Nel caso in cui lo stack contenga puntatori a una funzione che verrĂ chiamata o a una stringa che verrĂ utilizzata da una funzione interessante (system o printf), è possibile sovrascrivere quellâindirizzo.
- ASLR o PIE potrebbero influenzare gli indirizzi.
- Uninitialized variables: Non si sa mai.
Tip
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)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

