# House of Lore | Attacco Small bin {{#include ../../banners/hacktricks-training.md}} ## Informazioni di base ### Codice - Controlla quello da [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/) - Questo non funziona - Oppure: [https://github.com/shellphish/how2heap/blob/master/glibc_2.39/house_of_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc_2.39/house_of_lore.c) - Questo non funziona nemmeno se cerca di bypassare alcuni controlli ottenendo l'errore: `malloc(): unaligned tcache chunk detected` - Questo esempio funziona ancora: [**https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html**](https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html) ### Obiettivo - Inserire un **finto small chunk nel small bin in modo che sia possibile allocarlo**.\ Nota che il small chunk aggiunto è quello falso creato dall'attaccante e non uno falso in una posizione arbitraria. ### Requisiti - Creare 2 fake chunks e collegarli insieme e con il chunk legittimo nel small bin: - `fake0.bk` -> `fake1` - `fake1.fd` -> `fake0` - `fake0.fd` -> `legit` (devi modificare un puntatore nel chunk del small bin liberato tramite qualche altra vulnerabilità) - `legit.bk` -> `fake0` Poi sarai in grado di allocare `fake0`. ### Attacco - Un small chunk (`legit`) viene allocato, poi un altro viene allocato per prevenire la consolidazione con il top chunk. Poi, `legit` viene liberato (spostandolo nella lista del bin non ordinato) e viene allocato un chunk più grande, **spostando `legit` nel small bin.** - Un attaccante genera un paio di fake small chunks e fa il collegamento necessario per bypassare i controlli di sanità: - `fake0.bk` -> `fake1` - `fake1.fd` -> `fake0` - `fake0.fd` -> `legit` (devi modificare un puntatore nel chunk del small bin liberato tramite qualche altra vulnerabilità) - `legit.bk` -> `fake0` - Un small chunk viene allocato per ottenere legit, rendendo **`fake0`** nella lista principale dei small bins - Un altro small chunk viene allocato, ottenendo `fake0` come chunk, permettendo potenzialmente di leggere/scrivere puntatori al suo interno. ## Riferimenti - [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/) - [https://heap-exploitation.dhavalkapil.com/attacks/house_of_lore](https://heap-exploitation.dhavalkapil.com/attacks/house_of_lore) - [https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html](https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html) {{#include ../../banners/hacktricks-training.md}}