mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 22:18:27 +00:00
114 lines
8.3 KiB
Markdown
114 lines
8.3 KiB
Markdown
# WWW2Exec - GOT/PLT
|
|
|
|
{% hint style="success" %}
|
|
Leer & oefen AWS-hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Leer & oefen GCP-hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Ondersteun HackTricks</summary>
|
|
|
|
* Controleer de [**abonnementsplannen**](https://github.com/sponsors/carlospolop)!
|
|
* **Sluit aan bij de** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of de [**telegramgroep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Deel hacktrucs door PR's in te dienen bij de** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
## **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), 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**. Daaropvolgende oproepe na dieselfde funksie gebruik die adres wat in die GOT gestoor is, en vermy dus die oorhoofse van die adres wat weer opgelos moet word.
|
|
|
|
### **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`**
|
|
|
|
![](<../../.gitbook/assets/image (121).png>)
|
|
|
|
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`
|
|
|
|
![](<../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>)
|
|
|
|
Met GEF kan jy 'n **foutopsporing**-sessie begin en **`got`** uitvoer om die got-tabel te sien:
|
|
|
|
![](<../../.gitbook/assets/image (496).png>)
|
|
|
|
### GOT2Exec
|
|
|
|
In 'n bineêre lêer het die GOT die **adresse na die funksies of** na 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 deur jou beheerde parameters** (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**](../common-binary-protections-and-bypasses/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**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
|
|
|
|
### **Free2system**
|
|
|
|
In heap-uitbuiting CTF's is dit algemeen om die inhoud van stukke te kan beheer en op 'n stadium selfs die GOT-tabel te 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 stuk `"/bin/sh"` te skryf. Op hierdie manier, wanneer hierdie stuk 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 gebruikersinvoer geroep word, dit moontlik is om die string `"/bin/sh"` te stuur en 'n skaal te kry.
|
|
|
|
Verder, as `puts` met gebruikersinvoer gebruik word, is dit moontlik om die `strlen` 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 gebruikersinvoer sal roep**.
|
|
|
|
## **Een Gadget**
|
|
|
|
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
|
|
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
|
|
{% endcontent-ref %}
|
|
|
|
## **Misbruik van GOT vanaf Heap**
|
|
|
|
'n Gewone manier om RCE vanaf 'n heap-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 voeg, sodat wanneer daardie stuk 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 stuk waarin geskryf is `/bin/sh\x00` vry te stel, sal 'n skaal uitvoer.
|
|
|
|
Dit is moontlik om 'n [**voorbeeld hier te vind**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk\_extend\_overlapping/#hitcon-trainging-lab13)**.**
|
|
## **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](../common-binary-protections-and-bypasses/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/got-overwrite/exploiting-a-got-overwrite)
|
|
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
|
|
|
|
{% hint style="success" %}
|
|
Leer & oefen AWS Hack: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Leer & oefen GCP Hack: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Ondersteun HackTricks</summary>
|
|
|
|
* Kontroleer die [**inskrywingsplanne**](https://github.com/sponsors/carlospolop)!
|
|
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Deel hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
|
|
|
</details>
|
|
{% endhint %}
|