48 lines
2.8 KiB
Markdown

# House of Lore | Small bin Attack
{{#include ../../banners/hacktricks-training.md}}
## Grundinformationen
### Code
- Überprüfen Sie den von [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_lore/)
- Das funktioniert nicht
- Oder: [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)
- Das funktioniert nicht, auch wenn es versucht, einige Überprüfungen zu umgehen, und den Fehler ausgibt: `malloc(): unaligned tcache chunk detected`
- Dieses Beispiel funktioniert noch: [**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)
### Ziel
- Fügen Sie einen **falschen kleinen Chunk in den kleinen Bin ein, damit er dann zugewiesen werden kann**.\
Beachten Sie, dass der hinzugefügte kleine Chunk der gefälschte ist, den der Angreifer erstellt, und nicht ein gefälschter an einer beliebigen Position.
### Anforderungen
- Erstellen Sie 2 gefälschte Chunks und verlinken Sie sie miteinander und mit dem legitimen Chunk im kleinen Bin:
- `fake0.bk` -> `fake1`
- `fake1.fd` -> `fake0`
- `fake0.fd` -> `legit` (Sie müssen einen Zeiger im freigegebenen kleinen Bin Chunk über eine andere Schwachstelle ändern)
- `legit.bk` -> `fake0`
Dann können Sie `fake0` zuweisen.
### Angriff
- Ein kleiner Chunk (`legit`) wird zugewiesen, dann wird ein weiterer zugewiesen, um eine Konsolidierung mit dem oberen Chunk zu verhindern. Dann wird `legit` freigegeben (was ihn in die unsortierte Bin-Liste verschiebt) und ein größerer Chunk wird zugewiesen, **was `legit` in den kleinen Bin verschiebt.**
- Ein Angreifer generiert ein paar gefälschte kleine Chunks und macht die erforderlichen Verlinkungen, um die Überprüfungen zu umgehen:
- `fake0.bk` -> `fake1`
- `fake1.fd` -> `fake0`
- `fake0.fd` -> `legit` (Sie müssen einen Zeiger im freigegebenen kleinen Bin Chunk über eine andere Schwachstelle ändern)
- `legit.bk` -> `fake0`
- Ein kleiner Chunk wird zugewiesen, um legit zu erhalten, wodurch **`fake0`** in die oberste Liste der kleinen Bins gelangt
- Ein weiterer kleiner Chunk wird zugewiesen, wobei `fake0` als Chunk verwendet wird, was potenziell das Lesen/Schreiben von Zeigern innerhalb davon ermöglicht.
## Referenzen
- [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}}