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