mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
48 lines
2.6 KiB
Markdown
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}}
|