6.9 KiB
WWW2Exec - GOT/PLT
Impara l'hacking su AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri La Famiglia PEASS, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.
Informazioni di Base
GOT: Global Offset Table
La Tabella degli Offset Globali (GOT) è un meccanismo utilizzato nei binari collegati dinamicamente per gestire gli indirizzi delle funzioni esterne. Poiché questi indirizzi non sono noti fino all'esecuzione (a causa del collegamento dinamico), la GOT fornisce un modo per aggiornare dinamicamente gli indirizzi di questi simboli esterni una volta che sono risolti.
Ogni voce nella GOT corrisponde a un simbolo nelle librerie esterne che il binario potrebbe chiamare. Quando una funzione viene chiamata per la prima volta, il suo indirizzo effettivo viene risolto dal collegamento dinamico e memorizzato nella GOT. Chiamate successive alla stessa funzione utilizzano l'indirizzo memorizzato nella GOT, evitando così il sovraccarico di risolvere nuovamente l'indirizzo.
PLT: Procedure Linkage Table
La Tabella di Collegamento delle Procedure (PLT) lavora strettamente con la GOT e funge da trampolino per gestire le chiamate alle funzioni esterne. Quando un binario chiama una funzione esterna per la prima volta, il controllo viene passato a una voce nella PLT associata a quella funzione. Questa voce PLT è responsabile di invocare il collegamento dinamico per risolvere l'indirizzo della funzione se non è stato ancora risolto. Dopo che l'indirizzo è stato risolto, viene memorizzato nella GOT.
Pertanto, le voci della GOT sono utilizzate direttamente una volta che l'indirizzo di una funzione o variabile esterna è stato risolto. Le voci della PLT sono utilizzate per facilitare la risoluzione iniziale di questi indirizzi tramite il collegamento dinamico.
Esecuzione
Controlla la GOT
Ottieni l'indirizzo della tabella GOT con: objdump -s -j .got ./exec
Osserva come dopo il caricamento dell'eseguibile in GEF puoi vedere le funzioni che sono nella GOT: gef➤ x/20x 0xDIR_GOT
Utilizzando GEF puoi avviare una sessione di debugging ed eseguire got
per vedere la tabella got:
GOT2Exec
In un binario la GOT ha gli indirizzi delle funzioni o della sezione PLT che caricherà l'indirizzo della funzione. L'obiettivo di questa scrittura arbitraria è sovrascrivere una voce della GOT di una funzione che verrà eseguita successivamente con l'indirizzo del PLT della funzione system
ad esempio.
Idealmente, sovrascriverai la GOT di una funzione che verrà chiamata con parametri controllati da te (così potrai controllare i parametri inviati alla funzione di sistema).
Se system
non viene utilizzato dallo script, la funzione di sistema non avrà una voce nella PLT. In questo scenario, dovrai prima ottenere l'indirizzo della funzione system
e quindi sovrascrivere la GOT per puntare a questo indirizzo.
Puoi vedere gli indirizzi PLT con objdump -j .plt -d ./vuln_binary
Voci GOT di libc
La GOT di libc di solito è compilata con partial RELRO, rendendola un bel bersaglio per questo supponendo che sia possibile individuarne l'indirizzo (ASLR).
Le funzioni comuni della libc chiameranno altre funzioni interne le cui GOT potrebbero essere sovrascritte per ottenere l'esecuzione del codice.
Trova ulteriori informazioni su questa tecnica qui.
One Gadget
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %} one-gadget.md {% endcontent-ref %}
Protezioni
La protezione Full RELRO è pensata per proteggere da questo tipo di tecnica risolvendo tutti gli indirizzi delle funzioni quando il binario viene avviato e rendendo la tabella GOT di sola lettura dopo:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} relro.md {% endcontent-ref %}
Riferimenti
- https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite
- https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook
Impara l'hacking su AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri La Famiglia PEASS, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.