House of Einherjar

Sostieni HackTricks

Informazioni di Base

Codice

Obiettivo

  • L'obiettivo è allocare memoria in quasi ogni indirizzo specifico.

Requisiti

  • Creare un chunk falso quando vogliamo allocare un chunk:

  • Impostare i puntatori per puntare a se stessi per aggirare i controlli di integrità

  • Overflow di un byte con un byte nullo da un chunk al successivo per modificare il flag PREV_INUSE.

  • Indicare nel prev_size del chunk abusato off-by-null la differenza tra se stesso e il chunk falso

  • Anche la dimensione del chunk falso deve essere impostata alla stessa dimensione per aggirare i controlli di integrità

  • Per costruire questi chunk, avrai bisogno di una fuga di memoria dell'heap.

Attacco

  • Viene creato un chunk falso all'interno di un chunk controllato dall'attaccante puntando con fd e bk al chunk originale per aggirare le protezioni

  • Vengono allocati altri 2 chunk (B e C)

  • Sfruttando l'off-by-one nel chunk B, il bit prev in use viene pulito e i dati prev_size vengono sovrascritti con la differenza tra il luogo in cui è allocato il chunk C e il chunk falso A generato prima

  • Questo prev_size e la dimensione nel chunk falso A devono essere uguali per aggirare i controlli.

  • Quindi, la tcache viene riempita

  • Poi, C viene liberato in modo che si consolidi con il chunk falso A

  • Poi, viene creato un nuovo chunk D che inizierà nel chunk falso A e coprirà il chunk B

  • La casa di Einherjar finisce qui

  • Questo può essere continuato con un attacco al fast bin o con l'avvelenamento della Tcache:

  • Liberare B per aggiungerlo al fast bin / Tcache

  • Il fd di B viene sovrascritto facendolo puntare all'indirizzo di destinazione sfruttando il chunk D (poiché contiene B all'interno)

  • Poi, vengono fatti 2 malloc e il secondo sarà l'allocazione dell'indirizzo di destinazione

Riferimenti e altri esempi

Sostieni HackTricks

Last updated