WWW2Exec - GOT/PLT

Reading time: 5 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)

Support HackTricks

Basic Information

GOT: Global Offset Table

Global Offset Table (GOT) ni mekanizma inayotumika katika binaries zilizounganishwa 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 kupdate 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 kuzuia 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 kinachohusiana na kazi hiyo. Kipengele hiki cha PLT kinawajibika kwa kuita linker wa dynamic ili kutafuta 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 kutafuta awali za 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 bila mpangilio hili ni kuziba kipengele cha GOT cha kazi ambayo itatekelezwa baadaye na anwani ya PLT ya system kazi kwa mfano.

Kwa kawaida, utakuwa ukiziba GOT ya kazi ambayo itaitwa na vigezo vinavyodhibitiwa na wewe (hivyo utaweza kudhibiti vigezo vinavyotumwa kwa kazi ya mfumo).

Ikiwa system haitumiki na binary, kazi ya mfumo haitakuwa na kipengele katika PLT. Katika hali hii, utahitaji kuvuja kwanza anwani ya kazi ya system na kisha kubadilisha 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 inakusanywa na partial RELRO, na kuifanya kuwa lengo zuri kwa hili ikiwa inawezekana kubaini anwani yake (ASLR).

Kazi za kawaida za libc zitaita kazi nyingine za ndani ambazo GOT yake inaweza kubadilishwa 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 kubadilisha jedwali la GOT. Njia rahisi ya kupata RCE ikiwa gadgets moja hazipatikani ni kubadilisha 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 kubadilisha anwani ya strlen GOT ili kuelekeza kwenye system, hivyo ikiwa kazi hii itaombwa na pembejeo ya mtumiaji inawezekana kupitisha mfuatano "/bin/sh" na kupata shell.

Zaidi ya hayo, ikiwa puts inatumika na pembejeo ya mtumiaji, inawezekana kubadilisha 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

{{#ref}} ../rop-return-oriented-programing/ret2lib/one-gadget.md {{#endref}}

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 kuziba 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 kutafuta anwani zote za kazi wakati binary inapoanzishwa na kufanya jedwali la GOT kuwa lisilosomeka baada ya hapo:

{{#ref}} ../common-binary-protections-and-bypasses/relro.md {{#endref}}

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)

Support HackTricks