WWW2Exec - GOT/PLT
Last updated
Last updated
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Global Offset Table (GOT) je mehanizam koji se koristi u dinamički povezanim binarnim datotekama za upravljanje adresama spoljašnjih funkcija. Pošto te adrese nisu poznate do vremena izvršavanja (zbog dinamičkog povezivanja), GOT pruža način da se dinamički ažuriraju adrese ovih spoljašnjih simbola kada se jednom reše.
Svaki unos u GOT odgovara simbolu u spoljnim bibliotekama koje binarna datoteka može pozvati. Kada se funkcija prvi put pozove, njena stvarna adresa se rešava putem dinamičkog linker-a i čuva u GOT. Naknadni pozivi iste funkcije koriste adresu koja je sačuvana u GOT, čime se izbegava preopterećenje ponovnog rešavanja adrese.
Procedure Linkage Table (PLT) blisko sarađuje sa GOT-om i služi kao trampolin za upravljanje pozivima spoljašnjim funkcijama. Kada binarna datoteka pozove spoljašnju funkciju prvi put, kontrola se prenosi na unos u PLT-u povezan sa tom funkcijom. Ovaj PLT unos je odgovoran za pozivanje dinamičkog linker-a da reši adresu funkcije ako već nije rešena. Nakon što se adresa reši, ona se čuva u GOT-u.
Dakle, GOT unosi se koriste direktno kada se adresa spoljašnje funkcije ili promenljive reši. PLT unosi se koriste za olakšavanje inicijalnog rešavanja ovih adresa putem dinamičkog linker-a.
Dobijte adresu do GOT tabele sa: objdump -s -j .got ./exec
Posmatrajte kako nakon učitavanja izvršne datoteke u GEF možete videti funkcije koje se nalaze u GOT-u: gef➤ x/20x 0xADDR_GOT
Koristeći GEF možete početi sesiju debugovanja i izvršiti got
da biste videli got tabelu:
U binarnoj datoteci GOT ima adrese funkcija ili do PLT sekcije koja će učitati adresu funkcije. Cilj ovog proizvoljnog pisanja je da prepiše GOT unos funkcije koja će biti izvršena kasnije sa adresom PLT-a system
funkcije na primer.
Idealan scenario je da prepišete GOT funkcije koja će biti pozvana sa parametrima koje kontrolišete (tako da ćete moći da kontrolišete parametre poslati sistemskoj funkciji).
Ako system
nije korišćen od strane binarne datoteke, sistemska funkcija neće imati unos u PLT-u. U ovom scenariju, prvo ćete morati da iscurite adresu funkcije system
i zatim prepisati GOT da pokazuje na ovu adresu.
Možete videti PLT adrese sa objdump -j .plt -d ./vuln_binary
GOT libc se obično kompajlira sa delimičnim RELRO, što ga čini lepim ciljem za ovo pod pretpostavkom da je moguće utvrditi njegovu adresu (ASLR).
Uobičajene funkcije libc će pozvati druge interne funkcije čiji GOT bi mogao biti prepisan kako bi se dobila izvršna kod.
Pronađite više informacija o ovoj tehnici ovde.
U eksploataciji heap-a na CTF-ima je uobičajeno moći kontrolisati sadržaj delova i u nekom trenutku čak i prepisati GOT tabelu. Jedan jednostavan trik za dobijanje RCE-a ako jedan gadgeti nisu dostupni je da prepišete free
GOT adresu da pokazuje na system
i da upišete unutar dela "/bin/sh"
. Na ovaj način, kada se ovaj deo oslobodi, izvršiće system("/bin/sh")
.
Još jedna uobičajena tehnika je prepisivanje strlen
GOT adrese da pokazuje na system
, tako da ako se ova funkcija pozove sa korisničkim unosom, moguće je proslediti string "/bin/sh"
i dobiti shell.
Štaviše, ako se puts
koristi sa korisničkim unosom, moguće je prepisati strlen
GOT adresu da pokazuje na system
i proslediti string "/bin/sh"
da bi se dobio shell jer puts
će pozvati strlen
sa korisničkim unosom.
Uobičajen način dobijanja RCE-a iz ranjivosti heap-a je zloupotreba fastbin-a tako da je moguće dodati deo GOT tabele u fast bin, tako da kad god se taj deo alocira, biće moguće prepisati pokazivač funkcije, obično free
.
Zatim, usmeravanje free
na system
i oslobađanje dela gde je napisan /bin/sh\x00
će izvršiti shell.
Moguće je pronaći primer ovde.
Zaštita Full RELRO je namenjena zaštiti od ove vrste tehnike rešavanjem svih adresa funkcija kada se binarna datoteka pokrene i čineći GOT tabelu samo za čitanje nakon toga:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)