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

6.6 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. Na ovaj način razlika/veličina se 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 cilj - stari_vrh - 4*sizeof(long) (4 long-a su zbog metapodataka vrhunskog bloka i novog bloka kada se alocira) premestiće vrhunski blok na adresu koju želimo da prepisujemo.
Zatim, uradite još jedan malloc da biste dobili blok koji sadrži na početku podatke za pisanje ciljne adrese.

Reference & Drugi Primeri