48 lines
2.6 KiB
Markdown

# 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}}