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

6.5 KiB

Kuća sile

{% 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
{% endhint %}

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