mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
Translated ['binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-e
This commit is contained in:
parent
cca6c180f7
commit
fae5c3bc8b
1 changed files with 39 additions and 14 deletions
|
@ -2,13 +2,13 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
||||
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
|
||||
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
|
||||
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
|
@ -16,7 +16,7 @@ Njia nyingine za kusaidia HackTricks:
|
|||
|
||||
## Taarifa Msingi
|
||||
|
||||
Mbinu hii inatumia uwezo wa kudhibiti **Msingi wa Alama (EBP)** ili kuunganisha utekelezaji wa kazi nyingi kupitia matumizi makini ya kusajili EBP na mfuatano wa maagizo ya **`leave; ret`**.
|
||||
Mbinu hii inatumia uwezo wa kudhibiti **Msingi wa Alama (EBP)** ili kuunganisha utekelezaji wa kazi nyingi kupitia matumizi makini ya daftari la EBP na mfuatano wa maagizo ya **`leave; ret`**.
|
||||
|
||||
Kama kumbukumbu, **`leave`** kimsingi inamaanisha:
|
||||
```
|
||||
|
@ -28,14 +28,14 @@ Na kwa kuwa **EBP iko kwenye stack** kabla ya EIP inawezekana kuudhibiti kwa kud
|
|||
|
||||
### EBP2Ret
|
||||
|
||||
Mbinu hii ni muhimu hasa unapoweza **kubadilisha kisajili cha EBP lakini huna njia moja kwa moja ya kubadilisha kisajili cha EIP**. Inatumia tabia ya kazi wakati zinaisha kutekelezwa.
|
||||
Tekniki hii ni muhimu hasa unapoweza **kubadilisha kisajili cha EBP lakini huna njia moja kwa moja ya kubadilisha kisajili cha EIP**. Inatumia tabia ya kazi wakati zinaisha kutekelezwa.
|
||||
|
||||
Ikiwa, wakati wa utekelezaji wa `fvuln`, unaweza kuingiza **fake EBP** kwenye stack inayoelekeza kwenye eneo kwenye kumbukumbu ambapo anwani ya shellcode yako iko (pamoja na byte 4 kuhesabu operesheni ya `pop`), unaweza kudhibiti EIP kwa njia isiyo ya moja kwa moja. Wakati `fvuln` inarudi, ESP inawekwa kwenye eneo hili lililoundwa, na operesheni inayofuata ya `pop` inapunguza ESP kwa 4, **kufanya ielekeze kwa anwani iliyohifadhiwa na mshambuliaji hapo.**\
|
||||
Tambua jinsi unavyohitaji **kujua anwani 2**: Ile ambapo ESP itaenda, ambapo utahitaji kuandika anwani inayoelekezwa na ESP.
|
||||
Ikiwa, wakati wa utekelezaji wa `fvuln`, unafanikiwa kuingiza **fake EBP** kwenye stack inayoashiria eneo kwenye kumbukumbu ambapo anwani ya shellcode yako inapatikana (pamoja na byte 4 kuhesabu operesheni ya `pop`), unaweza kudhibiti EIP kwa njia isiyo ya moja kwa moja. Wakati `fvuln` inarudi, ESP inawekwa kwenye eneo lililoundwa hili, na operesheni inayofuata ya `pop` inapunguza ESP kwa 4, **kufanya iweze kuashiria anwani iliyohifadhiwa na mshambuliaji hapo.**\
|
||||
Tambua jinsi unavyohitaji **kujua anwani 2**: Moja ambapo ESP itaenda, ambapo utahitaji kuandika anwani inayoashiriwa na ESP.
|
||||
|
||||
#### Ujenzi wa Utekaji
|
||||
|
||||
Kwanza unahitaji kujua **anwani ambapo unaweza kuandika data/anwani za kiholela**. ESP itaelekeza hapa na **kutekeleza `ret` ya kwanza**.
|
||||
Kwanza unahitaji kujua **anwani ambapo unaweza kuandika data/anwani za kiholela**. ESP itaashiria hapa na **kutekeleza `ret` ya kwanza**.
|
||||
|
||||
Kisha, unahitaji kujua anwani inayotumiwa na `ret` ambayo ita **tekeleza kanuni za kiholela**. Unaweza kutumia:
|
||||
|
||||
|
@ -48,16 +48,16 @@ Kumbuka kwamba kabla ya anwani yoyote hizi katika sehemu iliyodhibitiwa ya kumbu
|
|||
|
||||
#### Utekaji wa Off-By-One
|
||||
|
||||
Kuna toleo maalum la mbinu hii inayojulikana kama "Utekaji wa Off-By-One". Hutumiwa unapoweza **kubadilisha byte ya thamani ndogo zaidi ya EBP**. Katika kesi kama hiyo, eneo la kumbukumbu linalohifadhi anwani ya kusonga kwenda na **`ret`** lazima iwe na byte tatu za kwanza na EBP, kuruhusu udanganyifu kama huo chini ya hali zilizozuiwa zaidi.\
|
||||
Kuna toleo maalum la tekniki hii linalojulikana kama "Utekaji wa Off-By-One". Hutumiwa unapoweza **kubadilisha byte ya thamani ndogo zaidi ya EBP**. Katika kesi kama hiyo, eneo la kumbukumbu linalohifadhi anwani ya kusonga kwenda na **`ret`** lazima iwe na byte tatu za kwanza na EBP, kuruhusu udanganyifu kama huo chini ya hali zilizozuiwa zaidi.\
|
||||
Kawaida, inabadilishwa byte 0x00 ili kusonga mbali iwezekanavyo.
|
||||
|
||||
Pia, ni kawaida kutumia RET sled kwenye stack na kuweka mnyororo halisi wa ROP mwishoni ili kufanya iwezekane zaidi kwamba ESP mpya inaelekeza ndani ya RET SLED na mnyororo wa mwisho wa ROP unatekelezwa.
|
||||
Pia, ni kawaida kutumia RET sled kwenye stack na kuweka mnyororo halisi wa ROP mwishoni ili kuifanya iwezekane zaidi kwamba ESP mpya inaashiria ndani ya RET SLED na mnyororo wa mwisho wa ROP unatekelezwa.
|
||||
|
||||
### **EBP Chaining**
|
||||
|
||||
Hivyo, kwa kuweka anwani iliyodhibitiwa kwenye kuingia ya `EBP` ya stack na anwani ya `leave; ret` katika `EIP`, inawezekana **kuhamisha `ESP` kwenye anwani iliyodhibitiwa ya `EBP` kutoka kwenye stack**.
|
||||
|
||||
Sasa, **`ESP`** inadhibitiwa ikiashiria kwenye anwani inayotakiwa na maelekezo inayofuata ya kutekelezwa ni `RET`. Ili kutumia hii, inawezekana kuweka mahali pa ESP iliyodhibitiwa hivi:
|
||||
Sasa, **`ESP`** inadhibitiwa ikiashiria anwani inayotakiwa na maelekezo inayofuata ya kutekelezwa ni `RET`. Ili kutumia hii, inawezekana kuweka mahali pa ESP iliyodhibitiwa hivi:
|
||||
|
||||
* **`&(EBP bandia inayofuata)`** -> Pakia EBP mpya kwa sababu ya `pop ebp` kutoka kwa maelekezo ya `leave`
|
||||
* **`system()`** -> Kuitwa na `ret`
|
||||
|
@ -68,7 +68,7 @@ Kimsingi njia hii inawezesha kuunganisha EBPs bandia kadhaa kudhibiti mtiririko
|
|||
|
||||
Hii ni kama [ret2lib](../rop-return-oriented-programing/ret2lib/), lakini ni ngumu zaidi bila faida inayoonekana lakini inaweza kuwa ya kuvutia katika hali za kipekee.
|
||||
|
||||
Zaidi ya hayo, hapa kuna [**mfano wa changamoto**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) inayotumia mbinu hii na **stack leak** kuita kazi ya kushinda. Hii ni mzigo wa mwisho kutoka kwenye ukurasa:
|
||||
Zaidi ya hayo, hapa kuna [**mfano wa changamoto**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) inayotumia tekniki hii na **stack leak** kuita kazi ya kushinda. Hii ni mzigo wa mwisho kutoka kwenye ukurasa:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -106,7 +106,7 @@ print(p.recvline())
|
|||
```
|
||||
## EBP huenda isitumike
|
||||
|
||||
Kama [**ilivyoelezwa katika chapisho hili**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), ikiwa binary imekompiliwa na baadhi ya optimizations, **EBP kamwe haitadhibiti ESP**, hivyo, shambulio lolote linalofanya kazi kwa kudhibiti EBP litashindwa kwa sababu halina athari halisi.\
|
||||
Kama [**ilivyoelezwa katika chapisho hili**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), ikiwa binary imekompiliwa na baadhi ya optimizations, **EBP kamwe haitadhibiti ESP**, hivyo, shambulio lolote linalofanya kazi kwa kudhibiti EBP litashindwa kimsingi kwa sababu halina athari halisi.\
|
||||
Hii ni kwa sababu **prologue na epilogue hubadilika** ikiwa binary imeoptimize.
|
||||
|
||||
* **Haijaoptimize:**
|
||||
|
@ -204,9 +204,34 @@ Angalia mbinu ya ret2esp hapa:
|
|||
|
||||
## ARM64
|
||||
|
||||
Katika ARM64, **prologue na epilogue** ya functions **hawaweki na kurejesha SP registry** kwenye stack. Kwa hiyo, kwa chaguo-msingi, **hutaweza kudhibiti SP registry** kwa kubadilisha data fulani ndani ya stack.
|
||||
Katika ARM64, **prologue na epilogue** ya functions **hawaweki na kurejesha SP registry** kwenye stack. Zaidi ya hayo, maagizo ya **`RET`** hayarudi kwenye anwani inayoelekezwa na SP, bali **kwenye anwani ndani ya `x30`**.
|
||||
|
||||
Hivyo, kwa chaguo-msingi, kwa kudanganya epilogue tu **hutaweza kudhibiti SP registry** kwa kuandika data fulani kwenye stack. Na hata kama utaweza kudhibiti SP bado utahitaji njia ya **kudhibiti `x30`** register.
|
||||
|
||||
* prologue
|
||||
|
||||
```armasm
|
||||
sub sp, sp, 16
|
||||
stp x29, x30, [sp] // [sp] = x29; [sp + 8] = x30
|
||||
mov x29, sp // FP inaelekeza rekodi ya fremu
|
||||
```
|
||||
* epilogue
|
||||
|
||||
```armasm
|
||||
ldp x29, x30, [sp] // x29 = [sp]; x30 = [sp + 8]
|
||||
add sp, sp, 16
|
||||
ret
|
||||
```
|
||||
|
||||
{% hint style="danger" %}
|
||||
Njia ya kufanya kitu kama stack pivoting katika ARM64 itakuwa kuweza **kudhibiti `SP`** (kwa kudhibiti baadhi ya register ambayo thamani yake inapitishwa kwa `SP` au kwa sababu fulani `SP` inachukua anwani yake kutoka kwenye stack na tuna overflow) na kisha **kudanganya epilogue** kusoma **`x30`** register kutoka kwa **`SP` iliyodhibitiwa** na **`RET`** kwake.
|
||||
{% endhint %}
|
||||
|
||||
Pia kwenye ukurasa ufuatao unaweza kuona sawa na **Ret2esp katika ARM64**:
|
||||
|
||||
{% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg.md" %}
|
||||
[ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
<details>
|
||||
|
||||
|
|
Loading…
Reference in a new issue