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