House of Force

Podržite HackTricks

Osnovne informacije

Kod

  • Ova tehnika je zakrpljena (ovde) i proizvodi ovu grešku: malloc(): corrupted top size

  • Možete probati kod odavde da je 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 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, dodeljivanje veličine cilj - stari_vrh - 4*sizeof(long) (4 long-a su zbog metapodataka vrhunskog bloka i novog bloka kada je alociran) će premestiti vrhunski blok na adresu koju želimo da prepisujemo. Zatim, uradite još jedan malloc da biste dobili blok na ciljanoj adresi.

Reference & Drugi Primeri

Last updated