mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
3.3 KiB
3.3 KiB
House of Einherjar
{{#include ../../banners/hacktricks-training.md}}
Informazioni di base
Codice
- Controlla l'esempio da https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- O quello da https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (potresti dover riempire il tcache)
Obiettivo
- L'obiettivo è allocare memoria in quasi qualsiasi indirizzo specifico.
Requisiti
- Creare un chunk falso quando vogliamo allocare un chunk:
- Impostare i puntatori per puntare a se stessi per bypassare i controlli di sanità
- Overflow di un byte con un byte nullo da un chunk al successivo per modificare il flag
PREV_INUSE. - Indicare nel
prev_sizedel chunk abusato off-by-null la differenza tra se stesso e il chunk falso - La dimensione del chunk falso deve essere stata impostata alla stessa dimensione per bypassare i controlli di sanità
- Per costruire questi chunk, avrai bisogno di un heap leak.
Attacco
- Un chunk
Aè creato all'interno di un chunk controllato dall'attaccante che punta confdebkal chunk originale per bypassare le protezioni - Altri 2 chunk (
BeC) sono allocati - Abusando l'off by one nel chunk
B, il bitprev in useviene ripulito e i datiprev_sizevengono sovrascritti con la differenza tra il posto in cui il chunkCè allocato e il chunk falsoAgenerato prima - Questo
prev_sizee la dimensione nel chunk falsoAdevono essere gli stessi per bypassare i controlli. - Poi, il tcache viene riempito
- Poi,
Cviene liberato in modo che si consolidi con il chunk falsoA - Poi, un nuovo chunk
Dviene creato che inizierà nel chunk falsoAe coprirà il chunkB - La casa di Einherjar finisce qui
- Questo può essere continuato con un attacco fast bin o avvelenamento Tcache:
- Libera
Bper aggiungerlo al fast bin / Tcache fddiBviene sovrascritto facendolo puntare all'indirizzo target abusando del chunkD(poiché contieneBall'interno)- Poi, vengono eseguite 2 malloc e il secondo andrà a allocare l'indirizzo target
Riferimenti e altri esempi
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Dopo aver liberato i puntatori, non vengono annullati, quindi è ancora possibile accedere ai loro dati. Pertanto, un chunk viene posizionato nel bin non ordinato e vengono rivelati i puntatori che contiene (libc leak) e poi un nuovo heap viene posizionato nel bin non ordinato e viene rivelato un indirizzo heap dal puntatore che ottiene.
- baby-talk. DiceCTF 2024
- Bug di overflow di byte nullo in
strtok. - Usa House of Einherjar per ottenere una situazione di chunk sovrapposti e finire con avvelenamento Tcache per ottenere una primitiva di scrittura arbitraria.
{{#include ../../banners/hacktricks-training.md}}