3.9 KiB
AW2Exec - GOT/PLT
{{#include ../../../banners/hacktricks-training.md}}
Basiese Inligting
GOT: Globale Offset Tabel
Die Globale Offset Tabel (GOT) is 'n mechanisme wat in dinamies gekoppelde binêre gebruik word om die adresse van eksterne funksies te bestuur. Aangesien hierdie adresse nie bekend is tot tyd van uitvoering (as gevolg van dinamiese koppeling), bied die GOT 'n manier om die adresse van hierdie eksterne simbole dinamies op te dateer sodra hulle opgelos is.
Elke inskrywing in die GOT kom ooreen met 'n simbool in die eksterne biblioteke wat die binêre mag aanroep. Wanneer 'n funksie vir die eerste keer aangeroep word, word sy werklike adres deur die dinamiese skakelaar opgelos en in die GOT gestoor. Volgende oproepe na dieselfde funksie gebruik die adres wat in die GOT gestoor is, en vermy dus die oorhoofse koste van die adres weer op te los.
PLT: Prosedure Koppeling Tabel
Die Prosedure Koppeling Tabel (PLT) werk nou saam met die GOT en dien as 'n trampolien om oproepe na eksterne funksies te hanteer. Wanneer 'n binêre 'n eksterne funksie vir die eerste keer aanroep, word beheer oorgedra na 'n inskrywing in die PLT wat met daardie funksie geassosieer is. Hierdie PLT-inskrywing is verantwoordelik om die dinamiese skakelaar aan te roep om die funksie se adres op te los as dit nog nie opgelos is nie. Nadat die adres opgelos is, word dit in die GOT gestoor.
Daarom, GOT-inskrywings word direk gebruik sodra die adres van 'n eksterne funksie of veranderlike opgelos is. PLT-inskrywings word gebruik om die aanvanklike resolusie van hierdie adresse via die dinamiese skakelaar te fasiliteer.
Kry Uitvoering
Kontroleer die GOT
Kry die adres na die GOT tabel met: objdump -s -j .got ./exec
Let op hoe jy na laai van die uitvoerbare in GEF die funksies wat in die GOT is kan sien: gef➤ x/20x 0xADDR_GOT
Met GEF kan jy 'n debugging sessie begin en got uitvoer om die got tabel te sien:
GOT2Exec
In 'n binêre het die GOT die adresse na die funksies of na die PLT afdeling wat die funksie adres sal laai. Die doel van hierdie arbitrêre skrywe is om 'n GOT-inskrywing van 'n funksie wat later gaan uitgevoer word te oorskry met die adres van die PLT van die system funksie byvoorbeeld.
Ideaal gesproke, sal jy die GOT van 'n funksie wat met parameters wat deur jou beheer word gaan aangeroep word oorskry (sodat jy die parameters wat na die system funksie gestuur word kan beheer).
As system nie gebruik word deur die skrip nie, sal die system funksie nie 'n inskrywing in die PLT hê nie. In hierdie scenario, sal jy eers die adres van die system funksie moet lek en dan die GOT oorskry om na hierdie adres te wys.
Jy kan die PLT adresse sien met objdump -j .plt -d ./vuln_binary
Een Gadget
{{#ref}} ../one-gadget.md {{#endref}}
Beskermings
Die Volle RELRO beskerming is bedoel om teen hierdie soort tegniek te beskerm deur al die adresse van die funksies op te los wanneer die binêre begin en die GOT tabel slegs leesbaar te maak daarna:
{{#ref}} ../common-binary-protections-and-bypasses/relro.md {{#endref}}
Verwysings
- 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
{{#include ../../../banners/hacktricks-training.md}}


