hacktricks/binary-exploitation/libc-heap/house-of-rabbit.md

4.9 KiB

Nyumba ya Sungura

{% hint style="success" %} Jifunze & zoezi la Kuvamia AWS:Mafunzo ya HackTricks ya Mtaalam wa Timu Nyekundu ya AWS (ARTE)
Jifunze & zoezi la Kuvamia GCP: Mafunzo ya HackTricks ya Mtaalam wa Timu Nyekundu ya GCP (GRTE)

Support HackTricks
{% endhint %}

Mahitaji

  1. Uwezo wa kubadilisha kidole cha mbele cha fast bin fd au ukubwa: Hii inamaanisha unaweza kubadilisha kidole cha mbele cha kipande katika fastbin au ukubwa wake.
  2. Uwezo wa kuzindua malloc_consolidate: Hii inaweza kufanywa kwa kutoa kipande kikubwa au kufunga kipande cha juu, ambacho kinasababisha kufunga vipande vya heap.

Malengo

  1. Kuunda vipande vinavyolingana: Ili kuwa na kipande kimoja kifunike kingine, kuruhusu mabadiliko zaidi ya heap.
  2. Kufanya vipande vya uwongo: Kudanganya mpangishaji ili atambue kipande cha uwongo kama kipande halali wakati wa shughuli za heap.

Hatua za shambulio

POC 1: Badilisha ukubwa wa kipande cha fast bin

Lengo: Unda kipande kinachofunika kwa kubadilisha ukubwa wa kipande cha fastbin.

  • Hatua 1: Kutenga Vipande
unsigned long* chunk1 = malloc(0x40);  // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40);  // Allocates another chunk of 0x40 bytes at 0x602050
malloc(0x10);                          // Allocates a small chunk to change the fastbin state

Tunagawa vipande viwili vya herufi 0x40 kila kimoja. Vipande hivi vitawekwa kwenye orodha ya kontena ya haraka baada ya kuachiliwa.

  • Hatua 2: Fungua Vipande
free(chunk1);  // Frees the chunk at 0x602000
free(chunk2);  // Frees the chunk at 0x602050

Hatua ya 3: Badilisha Ukubwa wa Kipande

chunk1[-1] = 0xa1;  // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])

Tunabadilisha metadata ya ukubwa wa chunk1 kuwa 0xa1. Hii ni hatua muhimu ya kudanganya mpangishaji wakati wa kufanya ujumuishaji.

  • Hatua 4: Anzisha malloc_consolidate
malloc(0x1000);  // Allocate a large chunk to trigger heap consolidation

Kutenga kipande kikubwa kunaanzisha kazi ya malloc_consolidate, ikifunga vipande vidogo kwenye bakuli la haraka. Ukubwa uliobadilishwa wa chunk1 unasababisha kufunika na chunk2.

Baada ya kufunga, chunk1 inafunika na chunk2, ikiruhusu unyonyaji zaidi.

POC 2: Badilisha kidude cha fd

Lengo: Unda kipande bandia kwa kubadilisha kidude cha fd kwenye bakuli la haraka.

  • Hatua 1: Kutenga Vipande
unsigned long* chunk1 = malloc(0x40);  // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050

Maelezo: Tunatenga vipande viwili, kimoja kidogo na kingine kikubwa, ili kuweka kiwango cha rundo kwa ajili ya kipande bandia.

  • Hatua 2: Unda kipande bandia
chunk2[1] = 0x31;  // Fake chunk size 0x30
chunk2[7] = 0x21;  // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
  • Hatua ya 3: Fungua chunk1
free(chunk1);  // Frees the chunk at 0x602000

Maelezo: Tunafuta chunk1, tukiiongeza kwenye orodha ya fastbin.

  • Hatua 4: Badilisha fd ya chunk1
chunk1[0] = 0x602060;  // Modify the fd of chunk1 to point to the fake chunk within chunk2

Maelezo: Tunabadilisha kiashiria cha mbele (fd) cha chunk1 ili kielekeze kwenye kipande chetu bandia ndani ya chunk2.

  • Hatua 5: Chochote malloc_consolidate
malloc(5000);  // Allocate a large chunk to trigger heap consolidation

Kutenga kipande kikubwa tena husababisha malloc_consolidate, ambayo huprocess kipande bandia.

Kipande bandia huingizwa kwenye orodha ya fastbin, ikifanya iwe kipande halali kwa ajili ya uchunguzi zaidi.

Muhtasari

Mbinu ya House of Rabbit inahusisha kubadilisha ukubwa wa kipande cha fast bin ili kuunda vipande vinavyolingana au kudhibiti kielekezi cha fd ili kuunda vipande bandia. Hii inaruhusu wachomozaji kuunda vipande halali kwenye rundo, kuruhusu aina mbalimbali za uchunguzi. Kuelewa na kufanya mazoezi ya hatua hizi kutaboresha ujuzi wako wa uchunguzi wa rundo.