House of Einherjar
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundinformationen
Code
- Überprüfen Sie das Beispiel von https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- Oder das von https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (Sie müssen möglicherweise den tcache füllen)
Ziel
- Das Ziel ist es, Speicher an fast jeder spezifischen Adresse zuzuweisen.
Anforderungen
- Erstellen Sie einen gefälschten Chunk, wenn wir einen Chunk zuweisen möchten:
- Setzen Sie Zeiger, um auf sich selbst zu zeigen, um Sanity-Checks zu umgehen
- Ein-Byte-Überlauf mit einem Null-Byte von einem Chunk zum nächsten, um das
PREV_INUSE
-Flag zu ändern. - Geben Sie im
prev_size
des durch Null missbrauchten Chunks den Unterschied zwischen sich selbst und dem gefälschten Chunk an - Die Größe des gefälschten Chunks muss ebenfalls auf die gleiche Größe gesetzt werden, um Sanity-Checks zu umgehen
- Zum Konstruieren dieser Chunks benötigen Sie einen Heap-Leak.
Angriff
- Ein gefälschter Chunk
A
wird innerhalb eines vom Angreifer kontrollierten Chunks erstellt, der mitfd
undbk
auf den ursprünglichen Chunk zeigt, um Schutzmaßnahmen zu umgehen - 2 weitere Chunks (
B
undC
) werden zugewiesen - Durch den Missbrauch des Off-by-One im
B
wird dasprev in use
-Bit gelöscht und dieprev_size
-Daten werden mit dem Unterschied zwischen dem Ort, an dem der ChunkC
zugewiesen wird, und dem zuvor generierten gefälschten ChunkA
überschrieben - Diese
prev_size
und die Größe im gefälschten ChunkA
müssen gleich sein, um Überprüfungen zu umgehen. - Dann wird der tcache gefüllt
- Dann wird
C
freigegeben, damit es sich mit dem gefälschten ChunkA
konsolidiert - Dann wird ein neuer Chunk
D
erstellt, der im gefälschten ChunkA
beginnt und den ChunkB
abdeckt - Das Haus von Einherjar endet hier
- Dies kann mit einem Fast-Bin-Angriff oder Tcache-Vergiftung fortgesetzt werden:
B
freigeben, um es zum Fast-Bin / Tcache hinzuzufügenB
'sfd
wird überschrieben, sodass es auf die Zieladresse zeigt, indem der ChunkD
missbraucht wird (da erB
enthält)- Dann werden 2 Mallocs durchgeführt, und der zweite wird die Zieladresse zuweisen
Referenzen und andere Beispiele
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Nach dem Freigeben von Zeigern werden diese nicht auf Null gesetzt, sodass es weiterhin möglich ist, auf ihre Daten zuzugreifen. Daher wird ein Chunk in den unsortierten Bin platziert und die Zeiger, die er enthält, geleakt (libc leak) und dann wird ein neuer Heap im unsortierten Bin platziert und eine Heap-Adresse von dem Zeiger geleakt, den er erhält.
- baby-talk. DiceCTF 2024
- Null-Byte-Überlauf-Fehler in
strtok
. - Verwenden Sie House of Einherjar, um eine Überlappung von Chunks zu erreichen und mit Tcache-Vergiftung zu enden, um eine willkürliche Schreibprimitive zu erhalten.
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.