hacktricks/binary-exploitation/heap/unsorted-bin-attack.md

10 KiB

Shambulio la Bin isiyo na Mpangilio

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Taarifa Msingi

Kwa habari zaidi kuhusu ni nini bin isiyo na mpangilio angalia ukurasa huu:

{% content-ref url="bins-and-memory-allocations.md" %} bins-and-memory-allocations.md {% endcontent-ref %}

Orodha zisizopangiliwa zinaweza kuandika anwani kwa unsorted_chunks (av) katika anwani ya bk ya kipande. Kwa hivyo, ikiwa mshambuliaji anaweza kurekebisha anwani ya kielekezi cha bk katika kipande ndani ya benki isiyo na mpangilio, anaweza kuwa na uwezo wa kuandika anwani hiyo katika anwani isiyojulikana ambayo inaweza kusaidia kuvuja anwani za libc au kuepuka ulinzi fulani.

Kwa hivyo, kimsingi, shambulio hili liliruhusu kubadilisha anwani isiyojulikana na nambari kubwa (anwani ambayo inaweza kuwa anwani ya rundo au anwani ya libc) kama anwani ya rundo ambayo inaweza kuvuja au kizuizi kama global_max_fast kuruhusu kuunda benki za haraka zenye ukubwa mkubwa (na kupita kutoka kwa shambulio la benki isiyo na mpangilio hadi shambulio la benki ya haraka).

{% hint style="success" %} Kwa kuangalia mfano uliotolewa katika https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle na kutumia 0x4000 na 0x5000 badala ya 0x400 na 0x500 kama ukubwa wa vipande (kuepuka tcaches) inawezekana kuona kwamba siku hizi kosa malloc(): unsorted double linked list corrupted linasababishwa.

Kwa hivyo, shambulio la benki isiyo na mpangilio sasa (pamoja na ukaguzi mwingine) pia inahitaji kuweza kurekebisha orodha iliyodoubli ili hii ipuuzwe victim->bck->fd == victim au sivyo victim->fd == av (arena). Hii inamaanisha kwamba anwani ambapo tunataka kuandika lazima iwe na anwani ya kipande bandia katika nafasi yake ya fd na kwamba kipande bandia fd inaelekeza kwenye uwanja. {% endhint %}

{% hint style="danger" %} Tafadhali kumbuka kuwa shambulio hili linaharibu benki isiyo na mpangilio (hivyo ndogo na kubwa pia). Kwa hivyo tunaweza tumia vipangi kutoka kwa benki ya haraka sasa (programu yenye utata zaidi inaweza kufanya vipangi vingine na kugonga), na kuzindua hii tunapaswa kutenga ukubwa sawa au programu itaanguka.

Tafadhali kumbuka kwamba kufanya global_max_fast kunaweza kusaidia katika kesi hii kwa kuamini kwamba benki ya haraka itaweza kushughulikia vipangi vingine vyote hadi kudukuliwa kukamilika. {% endhint %}

Msimbo kutoka guyinatuxedo unaelezea vizuri sana, ingawa ikiwa utabadilisha mallocs kuweka kumbukumbu kubwa ya kutosha ili isimalize katika tcache unaweza kuona kosa lililotajwa hapo awali linalozuia mbinu hii: malloc(): unsorted double linked list corrupted

Shambulio la Unsorted Bin Infoleak

Hii ni dhana ya msingi sana. Vipande katika benki isiyo na mpangilio vitakuwa na viunganishi vya mara mbili ili kuunda benki. Kipande cha kwanza katika benki isiyo na mpangilio kimsingi kitakuwa na FD na viungo vya BK vinavyoelekeza sehemu ya uwanja kuu (libc).
Kwa hivyo, ikiwa unaweza kuweka kipande ndani ya benki isiyo na mpangilio na kusoma (tumia baada ya kufuta) au kuweka tena bila kubadilisha angalau 1 ya viunganishi kisha kusoma kipande hicho, unaweza kupata vuja kwa libc.

Shambulio sawa lililotumiwa katika andiko hili, lilikuwa kutumia muundo wa vipande 4 (A, B, C na D - D ni kuzuia konsolidisheni na kipande cha juu) hivyo kuzidi kwa herufi sifuri katika B kulitumika kufanya C ionyeshe kuwa B haikutumiwa. Pia, katika B data ya prev_size ilibadilishwa ili ukubwa badala ya kuwa ukubwa wa B ulikuwa A+B.
Kisha C ilifutwa, na konsolidisheni na A+B (lakini B ilikuwa bado inatumika). Kipande kipya cha ukubwa wa A kilipangiwa na kisha anwani zilizovuja za libc ziliandikwa kwenye B kutoka ambapo zilivuja.

Marejeo & Mifano Mingine

  • https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#hitcon-training-lab14-magic-heap
  • Lengo ni kubadilisha kipengele cha jumla na thamani kubwa kuliko 4869 ili iwezekane kupata bendera na PIE haijashughulikiwa.
  • Inawezekana kuzalisha vipande vya ukubwa usiojulikana na kuna kipindupindu cha rundo na ukubwa unaotakiwa.
  • Shambulio linaanza kwa kuunda vipande 3: kipande0 kutumia kipindupindu, kipande1 kufanyiwa kipindupindu na kipande2 ili kipande cha juu kisikonsolidishwe na vingine vilivyotangulia.
  • Kisha, kipande1 kinafutwa na kipande0 kinafanyiwa kipindupindu ili kielekezi cha bk cha kipande1 kiashirie: bk = magic - 0x10
  • Kisha, kipande3 kinapangiwa ukubwa sawa na kipande1, ambacho kitazindua shambulio la benki isiyo na mpangilio na kurekebisha thamani ya kipengele cha jumla, ikifanya iwezekane kupata bendera.
  • https://guyinatuxedo.github.io/31-unsortedbin_attack/0ctf16_zerostorage/index.html
  • Kazi ya kufunga ina mapungufu kwa sababu ikiwa viashiria vyote viwili vilivyopitishwa ni sawa itarealloc juu yake na kisha kuifuta lakini kurudisha kielekezi kwa eneo hilo lililofutwa ambalo linaweza kutumika.
  • Kwa hivyo, vipande 2 vinavyoundwa: kipande0 ambacho kitafungwa na yenyewe na kipande1 kuzuia konsolidisheni na kipande cha juu. Kisha, kazi ya kufunga inaitwa na kipande0 mara mbili ambayo itasababisha matumizi baada ya kufuta.
  • Kisha, kazi ya view inaitwa na index 2 (ambayo ni index ya kipande baada ya kutumia) ambayo ita vujisha anwani ya libc.
  • Kwa kuwa binary ina kinga ya kutoa malloc tu ukubwa mkubwa kuliko global_max_fast hivyo hakuna fastbin inayotumiwa, shambulio la benki isiyo na mpangilio litatumika kurekebisha kipengele cha jumla global_max_fast.
  • Kisha, inawezekana kuita kazi ya hariri na index 2 (kielekezi baada ya kutumia) na kurekebisha kielekezi cha bk ili kielekeze p64(global_max_fast-0x10). Kisha, kwa kutengeneza kipande kipya kutatumia anwani ya bure iliyoharibiwa hapo awali (0x20) itazindua shambulio la benki isiyo na mpangilio kurekebisha global_max_fast na thamani kubwa sana, kuruhusu sasa kuunda vipande katika benki za haraka.
  • Sasa shambulio la benki ya haraka linatekelezwa:
  • Kwanza kabisa inagundulika kwamba inawezekana kufanya kazi na vipande vya haraka vya ukubwa 200 kwenye eneo la __free_hook:
  • gef➤  p &__free_hook
    

$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook> gef➤ x/60gx 0x7ff1e9e607a8 - 0x59 0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200

</strong>0x7ff1e9e6075f: 0x0000000000000000      0x0000000000000000
0x7ff1e9e6076f &#x3C;list_all_lock+15>:      0x0000000000000000      0x0000000000000000
0x7ff1e9e6077f &#x3C;_IO_stdfile_2_lock+15>: 0x0000000000000000      0x0000000000000000
</code></pre>
* If we manage to get a fast chunk of size 0x200 in this location, it'll be possible to overwrite a function pointer that will be executed
* For this, a new chunk of size `0xfc` is created and the merged function is called with that pointer twice, this way we obtain a pointer to a freed chunk of size `0xfc*2 = 0x1f8` in the fast bin.
* Then, the edit function is called in this chunk to modify the **`fd`** address of this fast bin to point to the previous **`__free_hook`** function.
* Then, a chunk with size `0x1f8` is created to retrieve from the fast bin the previous useless chunk so another chunk of size `0x1f8` is created to get a fast bin chunk in the **`__free_hook`** which is overwritten with the address of **`system`** function.
* And finally a chunk containing the string `/bin/sh\x00` is freed calling the delete function, triggering the **`__free_hook`** function which points to system with `/bin/sh\x00` as parameter.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Another example of abusing a 1B overflow to consolidate chunks in the unsorted bin and get a libc infoleak and then perform a fast bin attack to overwrite malloc hook with a one gadget address

<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>

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) github repos.

</details>