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

6.5 KiB

Kuća sile

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije

Kod

  • Ova tehnika je zakrpljena (ovde) i proizvodi ovu grešku: malloc(): corrupted top size
  • Možete probati kod odavde da ga testirate ako želite.

Cilj

  • Cilj ovog napada je da se može alocirati komad na određenoj adresi.

Zahtevi

  • Prekoračenje koje omogućava prepisivanje veličine zaglavlja vrha komada (npr. -1).
  • Biti u mogućnosti da se kontroliše veličina alociranja hipa

Napad

Ako napadač želi da alocira komad na adresi P da bi prepisao vrednost ovde. Počinje tako što prepisuje veličinu vrha komada sa -1 (možda sa prekoračenjem). Ovo osigurava da malloc neće koristiti mmap za bilo koju alokaciju jer će Vrh komada uvek imati dovoljno prostora.

Zatim, izračunajte udaljenost između adrese vrha komada i ciljnog prostora za alokaciju. Ovo je zato što će se malloc sa tom veličinom izvršiti kako bi se premestio vrh komada na tu poziciju. Ovo je kako se razlika/veličina može lako izračunati:

// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/

Dakle, alociranjem veličine target - old_top - 4*sizeof(long) (4 long-a zbog metapodataka vrhunskog bloka i novog bloka kada je alociran) premestiće vrhunski blok na adresu koju želimo da prepisujemo.
Zatim, uradite još jedan malloc da biste dobili blok na ciljanoj adresi.

Reference & Drugi Primeri