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

7.1 KiB

Casa della Forza

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Informazioni di Base

Codice

  • Questa tecnica è stata corretta (qui) e produce questo errore: malloc(): corrupted top size
  • Puoi provare il codice da qui per testarlo se vuoi.

Obiettivo

  • L'obiettivo di questo attacco è quello di poter allocare un chunk in un indirizzo specifico.

Requisiti

  • Un overflow che permette di sovrascrivere la dimensione dell'intestazione del top chunk (ad es. -1).
  • Essere in grado di controllare la dimensione dell'allocazione dell'heap

Attacco

Se un attaccante vuole allocare un chunk nell'indirizzo P per sovrascrivere un valore qui. Inizia sovrascrivendo la dimensione del top chunk con -1 (forse con un overflow). Questo garantisce che malloc non utilizzerà mmap per nessuna allocazione poiché il Top chunk avrà sempre abbastanza spazio.

Quindi, calcola la distanza tra l'indirizzo del top chunk e lo spazio target da allocare. Questo perché verrà eseguita un'allocazione malloc con quella dimensione per spostare il top chunk in quella posizione. Ecco come la differenza/dimensione può essere facilmente calcolata:

// 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)
*/

Pertanto, allocare una dimensione di target - old_top - 4*sizeof(long) (i 4 long sono a causa dei metadati del chunk superiore e del nuovo chunk quando allocato) sposterà il chunk superiore all'indirizzo che vogliamo sovrascrivere.
Successivamente, eseguire un'altra malloc per ottenere un chunk contenente l'inizio dei dati in modo da scrivere l'indirizzo target.

Riferimenti ed Altri Esempi