PIE
Last updated
Last updated
Impara e pratica l'hacking su AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)
Un binario compilato come PIE, o Position Independent Executable, significa che il programma può caricarsi in diverse posizioni di memoria ogni volta che viene eseguito, impedendo gli indirizzi codificati.
Il trucco per sfruttare questi binari sta nell'sfruttare gli indirizzi relativi—gli offset tra le parti del programma rimangono gli stessi anche se le posizioni assolute cambiano. Per bypassare il PIE, è sufficiente ottenere un indirizzo in modo non sicuro, tipicamente dallo stack utilizzando vulnerabilità come gli attacchi di stringhe di formato. Una volta ottenuto un indirizzo, è possibile calcolare gli altri utilizzando i loro offset fissi.
Un suggerimento utile nel sfruttare i binari PIE è che il loro indirizzo di base termina tipicamente 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 è stato identificato l'indirizzo di base corretto.
Oppure puoi utilizzarlo per il tuo exploit, se scopri che un indirizzo si trova a 0x649e1024
sai che l'indirizzo di base è 0x649e1000
e da lì puoi semplicemente calcolare gli offset delle funzioni e delle posizioni.
Per bypassare il PIE è necessario ottenere un qualche indirizzo del binario caricato, ci sono alcune opzioni per farlo:
ASLR disabilitato: Se ASLR è disabilitato un binario compilato con PIE verrà sempre caricato nella stessa posizione, quindi il PIE sarà inutile poiché gli indirizzi degli oggetti saranno sempre nello stesso posto.
Ottenere il leak (comune nelle sfide CTF facili, controlla questo esempio)
Forzare i valori di EBP ed EIP nello stack fino a ottenere quelli corretti:
Utilizzare una vulnerabilità di lettura arbitraria come stringhe di formato per ottenere un indirizzo del binario (ad esempio dallo stack, come nella tecnica precedente) per ottenere la base del binario e utilizzare gli offset da lì. Trova un esempio qui.
Impara e pratica l'hacking su AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica l'hacking su GCP: HackTricks Training GCP Red Team Expert (GRTE)