mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
98 lines
9.4 KiB
Markdown
98 lines
9.4 KiB
Markdown
# Nyumba ya Rangi
|
|
|
|
<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 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 kuvamia 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
|
|
|
|
### Kanuni
|
|
|
|
* Pata mfano katika [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c)
|
|
* Mbinu ya uvamizi ilisuluhishwa katika [patch hii](https://sourceware.org/git/?p=glibc.git;a=blobdiff;f=stdlib/abort.c;h=117a507ff88d862445551f2c07abb6e45a716b75;hp=19882f3e3dc1ab830431506329c94dcf1d7cc252;hb=91e7cf982d0104f0e71770f5ae8e3faf352dea9f;hpb=0c25125780083cbba22ed627756548efe282d1a0) hivyo haitafanyi kazi tena (ilifanya kazi katika toleo la chini ya 2.26)
|
|
* Mfano sawa **na maoni zaidi** katika [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
|
|
|
|
### Lengo
|
|
|
|
* Tumia `malloc_printerr` kazi
|
|
|
|
### Mahitaji
|
|
|
|
* Badilisha ukubwa wa kipande cha juu
|
|
* Leaks za Libc na heap
|
|
|
|
### Msingi
|
|
|
|
Baadhi ya msingi muhimu kutoka kwa maoni kutoka [**mfano huu**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)**:**
|
|
|
|
Jambo ni kwamba, katika toleo za zamani za libc, wakati kazi ya `malloc_printerr` ilipoitwa inge **pitia orodha ya miundo ya `_IO_FILE` iliyohifadhiwa katika `_IO_list_all`**, na kimsingi **kutekeleza** kipande cha maagizo katika miundo hiyo.\
|
|
Uvamizi huu utatengeneza **miundo bandia ya `_IO_FILE`** ambayo tutaiandika kwa **`_IO_list_all`**, na kusababisha `malloc_printerr` kufanya kazi.\
|
|
Kisha itatekeleza anwani yoyote ile iliyohifadhiwa katika miundo ya **`_IO_FILE`**, na tutapata utekelezaji wa nambari
|
|
|
|
### Uvamizi
|
|
|
|
Uvamizi huanza kwa kufanikiwa kupata **kipande cha juu** ndani ya **bin isiyoainishwa**. Hii inafanikiwa kwa kuita `malloc` na ukubwa mkubwa kuliko ukubwa wa kipande cha juu cha sasa lakini mdogo kuliko **`mmp_.mmap_threshold`** (chaguo-msingi ni 128K), ambayo vinginevyo itasababisha kutengwa kwa `mmap`. Mara tu ukubwa wa kipande cha juu unapobadilishwa, ni muhimu kuhakikisha kwamba **kipande cha juu + ukubwa wake** kinafaa kwenye ukurasa na kwamba biti ya **prev\_inuse** ya kipande cha juu daima imewekwa.
|
|
|
|
Ili kupata kipande cha juu ndani ya bin isiyoainishwa, tenga kipande ili uunda kipande cha juu, badilisha ukubwa wa kipande cha juu (kwa kujaa katika kipande kilichotengwa) ili **kipande cha juu + ukubwa** uwe kwenye ukurasa na biti ya **prev\_inuse** iwe imewekwa. Kisha tenga kipande kikubwa kuliko ukubwa mpya wa kipande cha juu. Kumbuka kwamba `free` kamwe haiitwi ili kupata kipande cha juu ndani ya bin isiyoainishwa.
|
|
|
|
Kipande cha juu cha zamani sasa iko ndani ya bin isiyoainishwa. Kukisia tunaweza kusoma data ndani yake (labda kutokana na udhaifu uliosababisha kujaa), inawezekana kuvuja anwani za Libc kutoka humo na kupata anwani ya **\_IO\_list\_all**.
|
|
|
|
Uvamizi wa bin isiyoainishwa unafanywa kwa kudhuru kujaa ili kuandika `topChunk->bk->fwd = _IO_list_all - 0x10`. Wakati kipande kipya kinatengwa, kipande cha juu cha zamani kitagawanywa, na kidokezo kwenye bin isiyoainishwa kitandikwa kwenye **`_IO_list_all`**.
|
|
|
|
Hatua inayofuata ni kupunguza ukubwa wa kipande cha juu cha zamani ili kufanana na bin ndogo, hasa kwa kuweka ukubwa wake kuwa **0x61**. Hii inahudumia madhumuni mawili:
|
|
|
|
1. **Kuingizwa kwenye Bin Ndogo 4**: Wakati `malloc` inapitia bin isiyoainishwa na kuona kipande hiki, itajaribu kuweka kwenye bin ndogo 4 kutokana na ukubwa wake mdogo. Hii inafanya kipande kumalizia kichwa cha orodha ya bin ndogo 4 ambayo ni eneo la kidokezo la FD ya kipande cha **`_IO_list_all`** kama tulivyoandika anwani karibu katika **`_IO_list_all`** kupitia uvamizi wa bin isiyoainishwa.
|
|
2. **Kuzindua Ukaguzi wa Malloc**: Ujanja wa ukubwa wa kipande hiki utasababisha `malloc` kufanya ukaguzi wa ndani. Wakati inakagua ukubwa wa kipande kinachofuata, ambacho kitakuwa sifuri, itasababisha kosa na kuita `malloc_printerr`.
|
|
|
|
Udhibiti wa bin ndogo utakuruhusu kudhibiti kidokezo cha mbele cha kipande. Kujitokeza na **\_IO\_list\_all** hutumiwa kutengeneza miundo bandia ya **\_IO\_FILE**. Miundo hiyo imeundwa kwa uangalifu kujumuisha uga muhimu kama vile `_IO_write_base` na `_IO_write_ptr` vilivyowekwa kwenye thamani ambazo zinapita ukaguzi wa ndani katika libc. Kwa kuongezea, jedwali la kuruka linajengwa ndani ya miundo bandia, ambapo kidokezo cha maagizo kimewekwa kwenye anwani ambapo nambari za aina yoyote (k.m., kazi ya `system`) zinaweza kutekelezwa.
|
|
|
|
Kufupisha sehemu iliyobaki ya mbinu:
|
|
|
|
* **Punguza Kipande cha Juu cha Zamani**: Badilisha ukubwa wa kipande cha juu cha zamani kuwa **0x61** ili kukifanya kifanane na bin ndogo.
|
|
* **Sanidi Miundo Bandia ya `_IO_FILE`**: Jitokeze na kipande cha juu cha zamani cha bin isiyoainishwa na miundo bandia ya **\_IO\_FILE** na weka uga kwa njia inayofaa kudhibiti mtiririko wa utekelezaji.
|
|
|
|
Hatua inayofuata ni kutengeneza miundo bandia ya **\_IO\_FILE** inayojitokeza na kipande cha juu cha zamani cha bin sasa kwenye bin isiyoainishwa. Bytes za kwanza za miundo hii zimeundwa kwa uangalifu kujumuisha kidokezo kwa amri (k.m., "/bin/sh") ambayo itatekelezwa.
|
|
|
|
Uga muhimu katika miundo bandia ya **\_IO\_FILE**, kama vile `_IO_write_base` na `_IO_write_ptr`, vimewekwa kwenye thamani ambazo zinapita ukaguzi wa ndani katika libc. Kwa kuongezea, jedwali la kuruka linajengwa ndani ya miundo bandia, ambapo kidokezo cha maagizo kimewekwa kwenye anwani ambapo nambari za aina yoyote zinaweza kutekelezwa. Kawaida, hii itakuwa anwani ya kazi ya `system` au kazi nyingine inayoweza kutekeleza amri za shell.
|
|
|
|
Uvamizi unakamilika wakati wito wa `malloc` unazindua utekelezaji wa nambari kupitia miundo ya **\_IO\_FILE** iliyodhibitiwa. Hii inaruhusu utekelezaji wa nambari za aina yoyote, kawaida ikisababisha kupatikana kwa shell au mzigo mwingine wenye nia mbaya kutekelezwa.
|
|
|
|
**Muhtasari wa Uvamizi:**
|
|
|
|
1. **Sanidi kipande cha juu**: Tenga kipande na ubadilishe ukubwa wa kipande cha juu.
|
|
2. **Lazimisha kipande cha juu kuingia kwenye bin isiyoainishwa**: Tenga kipande kikubwa zaidi.
|
|
3. **Vuja anwani za Libc**: Tumia udhaifu kusoma kutoka kwenye bin isiyoainishwa.
|
|
4. **Fanya uvamizi wa bin isiyoainishwa**: Andika kwenye **\_IO\_list\_all** kwa kutumia kujaa.
|
|
5. **Punguza kipande cha juu cha zamani**: Badilisha ukubwa wake ili kifanane na bin ndogo.
|
|
6. **Sanidi miundo bandia ya \_IO\_FILE**: Jitokeze miundo bandia ya faili kudhibiti mtiririko wa udhibiti.
|
|
7. **Zindua utekelezaji wa nambari**: Tenga kipande kutekeleza uvamizi na kukimbia nambari za aina yoyote.
|
|
|
|
Mbinu hii inatumia mifumo ya usimamizi wa kipande, uvujaji wa habari za libc, na kujaa kwa kipande ili kufikia utekelezaji wa nambari bila kuita moja kwa moja `free`. Kwa kujenga kwa uangalifu miundo bandia ya **\_IO\_FILE** na kuweka mahali sahihi, uvamizi unaweza kudhibiti mtiririko wa udhibiti wakati wa operesheni za kawaida za kutengeneza kumbukumbu. Hii inawezesha utekelezaji wa nambari za aina yoyote, kawaida ikisababisha kupatikana kwa shell au shughuli nyingine zenye nia mbaya.
|
|
## Marejeo
|
|
|
|
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/)
|
|
* [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
|
|
|
|
Njia nyingine za kusaidia HackTricks:
|
|
|
|
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
|
|
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
|
|
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
|
|
|
</details>
|