8.3 KiB
WWW2Exec - GOT/PLT
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
Basiese Inligting
GOT: Globale Verskuiwingstabel
Die Globale Verskuiwingstabel (GOT) is 'n meganisme wat gebruik word in dinamies gekoppelde bineêre lêers om die adresse van eksterne funksies te bestuur. Aangesien hierdie adresse nie bekend is tot tyd van uitvoering (as gevolg van dinamiese koppeling nie), bied die GOT 'n manier om die adresse van hierdie eksterne simbole dinamies by te werk sodra hulle opgelos is.
Elke inskrywing in die GOT stem ooreen met 'n simbool in die eksterne biblioteke wat die bineêre lêer mag aanroep. Wanneer 'n funksie vir die eerste keer geroep word, word sy werklike adres opgelos deur die dinamiese koppelaar en in die GOT gestoor. Volgende oproepe na dieselfde funksie gebruik die adres wat in die GOT gestoor is, en vermy dus die oorhoofse van die adres weer op te los.
PLT: Prosedure Koppelings Tabel
Die Prosedure Koppelings Tabel (PLT) werk nou saam met die GOT en dien as 'n trampolien om oproepe na eksterne funksies te hanteer. Wanneer 'n bineêre lêer 'n eksterne funksie vir die eerste keer roep, word beheer oorgedra na 'n inskrywing in die PLT wat met daardie funksie geassosieer is. Hierdie PLT-inskrywing is verantwoordelik vir die aanroeping van die dinamiese koppelaar om die adres van die funksie op te los indien dit nog nie opgelos is nie. Nadat die adres opgelos is, word dit in die GOT gestoor.
Daarom word GOT-inskrywings direk gebruik sodra die adres van 'n eksterne funksie of veranderlike opgelos is. PLT-inskrywings word gebruik om die aanvanklike oplossing van hierdie adresse deur die dinamiese koppelaar te fasiliteer.
Kry Uitvoering
Kontroleer die GOT
Kry die adres van die GOT-tabel met: objdump -s -j .got ./exec
Let op hoe na die laai van die uitvoerbare in GEF jy die funksies kan sien wat in die GOT is: gef➤ x/20x 0xADDR_GOT
Met GEF kan jy 'n foutopsporing-sessie begin en got
uitvoer om die got-tabel te sien:
GOT2Exec
In 'n bineêre lêer het die GOT die adresse van die funksies of van die PLT-afdeling wat die funksie-adres sal laai. Die doel van hierdie willekeurige skryf is om 'n GOT-inskrywing te **oorheers van 'n funksie wat later uitgevoer gaan word met die adres van die PLT van die system
funksie byvoorbeeld.
Ideaal gesproke sal jy die GOT van 'n funksie oorskryf wat geroep gaan word met parameters wat deur jou beheer word (sodat jy die parameters wat na die stelsel funksie gestuur word, kan beheer).
As system
nie deur die bineêre lêer gebruik word nie, sal die stelsel funksie nie 'n inskrywing in die PLT hê nie. In hierdie scenario sal jy eerstens die adres moet lek van die system
funksie en dan die GOT moet oorskryf om na hierdie adres te verwys.
Jy kan die PLT-adresse sien met objdump -j .plt -d ./vuln_binary
libc GOT-inskrywings
Die GOT van libc is gewoonlik saamgestel met gedeeltelike RELRO, wat dit 'n goeie teiken maak vir hierdie aanname dat dit moontlik is om sy adres te bepaal (ASLR).
Gewone funksies van die libc gaan ander interne funksies aanroep waarvan die GOT oorskryf kan word om kode-uitvoering te kry.
Vind meer inligting oor hierdie tegniek hier.
Free2system
In hoop-uitbuiting CTF's is dit algemeen om die inhoud van stukke te kan beheer en op 'n stadium selfs die GOT-tabel te kan oorskryf. 'n Eenvoudige truuk om RCE te kry as een gadgets nie beskikbaar is nie, is om die free
GOT-adres te oorskryf om na system
te wys en binne 'n stukkie "/bin/sh"
te skryf. Op hierdie manier, wanneer hierdie stukkie vrygelaat word, sal dit system("/bin/sh")
uitvoer.
Strlen2system
'n Ander algemene tegniek is om die strlen
GOT-adres te oorskryf om na system
te wys, sodat as hierdie funksie met gebruikerinvoer geroep word, dit moontlik is om die string "/bin/sh"
te stuur en 'n skaal te kry.
Verder, as puts
met gebruikerinvoer gebruik word, is dit moontlik om die puts
GOT-adres te oorskryf om na system
te wys en die string "/bin/sh"
te stuur om 'n skaal te kry omdat puts
strlen
met die gebruikerinvoer sal roep.
One Gadget
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %} one-gadget.md {% endcontent-ref %}
Misbruik van GOT vanaf Heap
'n Gewone manier om RCE vanaf 'n hoop-kwesbaarheid te verkry, is om 'n fastbin te misbruik sodat dit moontlik is om die deel van die GOT-tabel in die fast bin in te sluit, sodat wanneer daardie stukkie toegewys word, dit moontlik sal wees om die wyser van 'n funksie, gewoonlik free
, te oorskryf.
Daarna, deur free
na system
te wys en 'n stukkie waarin geskryf is /bin/sh\x00
vry te stel, sal dit 'n skaal uitvoer.
Dit is moontlik om 'n voorbeeld hier te vind.
Beskerming
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 lêer begin en die GOT-tabel lees alleen te maak nadat dit:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} relro.md {% endcontent-ref %}
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
Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien jou maatskappy geadverteer in HackTricks of HackTricks aflaai in PDF-formaat Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling van eksklusiewe NFTs
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel jou haktruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.