WWW2Exec - GOT/PLT

Reading time: 6 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Basic Information

GOT: Global Offset Table

Global Offset Table (GOT) ni mekanizma inayotumika katika binaries zinazounganishwa kwa njia ya dynamic ili kudhibiti anwani za kazi za nje. Kwa kuwa anwani hizi hazijulikani hadi wakati wa utekelezaji (kwa sababu ya uunganishaji wa dynamic), GOT inatoa njia ya kudumisha anwani za alama hizi za nje mara tu zinapokuwa zimepatiwa.

Kila kipengele katika GOT kinahusiana na alama katika maktaba za nje ambazo binary inaweza kuita. Wakati kazi inapoitwa kwa mara ya kwanza, anwani yake halisi inapatikana na linker wa dynamic na kuhifadhiwa katika GOT. Kuitwa kwa kazi hiyo tena hutumia anwani iliyohifadhiwa katika GOT, hivyo kuepusha mzigo wa kutafuta anwani hiyo tena.

PLT: Procedure Linkage Table

Procedure Linkage Table (PLT) inafanya kazi kwa karibu na GOT na inatumika kama trampoline kushughulikia simu za kazi za nje. Wakati binary inapoiita kazi ya nje kwa mara ya kwanza, udhibiti unapelekwa kwa kipengele katika PLT kinachohusishwa na kazi hiyo. Kipengele hiki cha PLT kinawajibika kwa kuita linker wa dynamic ili kupata anwani ya kazi hiyo ikiwa haijapatikana tayari. Baada ya anwani kupatikana, inahifadhiwa katika GOT.

Hivyo, vipengele vya GOT vinatumika moja kwa moja mara tu anwani ya kazi au variable ya nje inapokuwa imepatiwa. Vipengele vya PLT vinatumika kuwezesha upatikanaji wa awali wa anwani hizi kupitia linker wa dynamic.

Get Execution

Check the GOT

Pata anwani ya jedwali la GOT kwa: objdump -s -j .got ./exec

Tazama jinsi baada ya kupakia executable katika GEF unaweza kuona kazi ambazo ziko katika GOT: gef➤ x/20x 0xADDR_GOT

Kwa kutumia GEF unaweza kuanza kikao cha debugging na kutekeleza got ili kuona jedwali la got:

GOT2Exec

Katika binary GOT ina anwani za kazi au sehemu ya PLT ambayo itapakia anwani ya kazi. Lengo la kuandika hii bila mpangilio ni kufuta kipengele cha GOT cha kazi ambayo itatekelezwa baadaye na anwani ya PLT ya system kazi kwa mfano.

Kwa njia bora, utakuwa unafuta GOT ya kazi ambayo itaitwa na vigezo vinavyodhibitiwa na wewe (hivyo utaweza kudhibiti vigezo vinavyotumwa kwa kazi ya system).

Ikiwa system haitumiki na binary, kazi ya system haitakuwa na kipengele katika PLT. Katika hali hii, utahitaji kuvuja kwanza anwani ya kazi ya system na kisha kufuta GOT ili kuelekeza kwenye anwani hii.

Unaweza kuona anwani za PLT kwa objdump -j .plt -d ./vuln_binary

libc GOT entries

GOT ya libc kwa kawaida inajumuishwa na partial RELRO, na kuifanya kuwa lengo zuri kwa hii ikiwa inawezekana kubaini anwani yake (ASLR).

Kazi za kawaida za libc zitaita kazi nyingine za ndani ambazo GOT yake inaweza kufutwa ili kupata utekelezaji wa msimbo.

Pata maelezo zaidi kuhusu mbinu hii hapa.

Free2system

Katika uhalifu wa heap CTFs ni kawaida kuwa na uwezo wa kudhibiti maudhui ya chunks na kwa wakati fulani hata kufuta jedwali la GOT. Njia rahisi ya kupata RCE ikiwa gadgets moja hazipatikani ni kufuta anwani ya free GOT ili kuelekeza kwenye system na kuandika ndani ya chunk "/bin/sh". Kwa njia hii wakati chunk hii itakapofutwa, itatekeleza system("/bin/sh").

Strlen2system

Mbinu nyingine ya kawaida ni kufuta anwani ya strlen GOT ili kuelekeza kwenye system, hivyo ikiwa kazi hii itaitwa na pembejeo ya mtumiaji inawezekana kupitisha mfuatano "/bin/sh" na kupata shell.

Zaidi ya hayo, ikiwa puts inatumika na pembejeo ya mtumiaji, inawezekana kufuta anwani ya strlen GOT ili kuelekeza kwenye system na kupitisha mfuatano "/bin/sh" ili kupata shell kwa sababu puts itaita strlen na pembejeo ya mtumiaji.

One Gadget

One Gadget

Abusing GOT from Heap

Njia ya kawaida ya kupata RCE kutoka kwa udhaifu wa heap ni kutumia fastbin ili iwezekane kuongeza sehemu ya jedwali la GOT ndani ya fast bin, hivyo kila wakati chunk hiyo itakapopangwa itakuwa inawezekana kufuta kiashiria cha kazi, kawaida free.
Kisha, kuelekeza free kwenye system na kufuta chunk ambapo ilandikwa /bin/sh\x00 itatekeleza shell.

Inawezekana kupata mfano hapa.

Protections

Ulinzi wa Full RELRO unakusudia kulinda dhidi ya aina hii ya mbinu kwa kutatua anwani zote za kazi wakati binary inapoanzishwa na kufanya jedwali la GOT kuwa lisiloweza kusomeka baada ya hapo:

Relro

References

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks