WWW2Exec - GOT/PLT

Reading time: 5 minutes

tip

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)

Podržite HackTricks

Osnovne informacije

GOT: Global Offset Table

Global Offset Table (GOT) je mehanizam koji se koristi u dinamički povezanim binarnim datotekama za upravljanje adresama spoljašnjih funkcija. Pošto su te adrese nepoznate 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 dodatno opterećenje rešavanja adrese ponovo.

PLT: Procedure Linkage Table

Procedure Linkage Table (PLT) blisko sarađuje sa GOT i služi kao trampolin za upravljanje pozivima spoljašnjim funkcijama. Kada binarna datoteka prvi put pozove spoljašnju funkciju, kontrola se prebacuje na unos u PLT koji je 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.

Dakle, GOT unosi se koriste direktno nakon što 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.

Dobijanje izvršenja

Proverite GOT

Dobijte adresu GOT tabele sa: objdump -s -j .got ./exec

Primetite kako nakon učitavanja izvršne datoteke u GEF možete videti funkcije koje se nalaze u GOT: gef➤ x/20x 0xADDR_GOT

Koristeći GEF možete početi sesiju debugovanja i izvršiti got da vidite got tabelu:

GOT2Exec

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

libc GOT unosi

GOT libc se obično kompajlira sa delimičnim RELRO, što ga čini dobrim 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.

Free2system

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. Jednostavna trik da se dobije RCE ako jedan gadgeti nisu dostupni je da se prepiše free GOT adresa da pokazuje na system i da se unese u deo "/bin/sh". Na ovaj način, kada se ovaj deo oslobodi, izvršiće se system("/bin/sh").

Strlen2system

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.

Jedan Gadget

One Gadget

Zloupotreba GOT iz Heap-a

Uobičajen način da se dobije RCE 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 izvršiće shell.

Moguće je pronaći primer ovde.

Zaštite

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:

Relro

Reference

tip

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)

Podržite HackTricks