PIE
Reading time: 3 minutes
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
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 di github.
Informazioni di base
Un binario compilato come PIE, o Position Independent Executable, significa che il programma può essere caricato in diverse posizioni di memoria ogni volta che viene eseguito, prevenendo indirizzi hardcoded.
Il trucco per sfruttare questi binari sta nello sfruttare gli indirizzi relativi: gli offset tra le parti del programma rimangono gli stessi anche se le posizioni assolute cambiano. Per bypassare PIE, è necessario solo leakare un indirizzo, tipicamente dallo stack utilizzando vulnerabilità come attacchi di formato stringa. Una volta ottenuto un indirizzo, puoi calcolare altri in base ai loro offset fissi.
Un suggerimento utile per sfruttare i binari PIE è che il loro indirizzo base di solito termina in 000 a causa delle pagine di memoria che sono le unità di randomizzazione, dimensionate a 0x1000 byte. Questo allineamento può essere un controllo critico se un exploit non funziona come previsto, indicando se l'indirizzo base corretto è stato identificato.
Oppure puoi usare questo per il tuo exploit, se leak che un indirizzo si trova a 0x649e1024
sai che l'indirizzo base è 0x649e1000
e da lì puoi semplicemente calcolare gli offset delle funzioni e delle posizioni.
Bypass
Per bypassare PIE è necessario leakare un indirizzo del binario caricato, ci sono alcune opzioni per questo:
- ASLR disabilitato: Se ASLR è disabilitato, un binario compilato con PIE viene sempre caricato nello stesso indirizzo, quindi PIE sarà inutile poiché gli indirizzi degli oggetti saranno sempre nello stesso posto.
- Essere forniti del leak (comune in sfide CTF facili, controlla questo esempio)
- Brute-force dei valori EBP ed EIP nello stack fino a leakare quelli corretti:
{{#ref}} bypassing-canary-and-pie.md {{#endref}}
- Utilizzare una vulnerabilità di lettura arbitraria come format string per leakare un indirizzo del binario (ad es. dallo stack, come nella tecnica precedente) per ottenere la base del binario e utilizzare offset da lì. Trova un esempio qui.
Riferimenti
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
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 di github.