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 Sanitätsprüfungen zu umgehen
- Ein-Byte-Überlauf mit einem Null-Byte von einem Chunk zum nächsten, um das
PREV_INUSE
-Flag zu ändern. - Geben Sie in der
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 Sanitätsprüfungen zu umgehen
- Zum Konstruieren dieser Chunks benötigen Sie einen Heap-Leak.
Angriff
- Ein gefälschter Chunk wird innerhalb eines vom Angreifer kontrollierten Chunks erstellt, der mit
fd
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 derC
-Chunk zugewiesen wird, und dem zuvor generierten gefälschtenA
-Chunk überschrieben - Diese
prev_size
und die Größe im gefälschten ChunkA
müssen gleich sein, um Prü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älschtenA
-Chunk beginnt und denB
-Chunk abdeckt - Das Haus von Einherjar endet hier
- Dies kann mit einem Fast-Bin-Angriff oder Tcache-Poisoning fortgesetzt werden:
B
freigeben, um es zum Fast-Bin / Tcache hinzuzufügenB
'sfd
wird überschrieben, sodass es auf die Zieladresse zeigt, indem derD
-Chunk 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, werden 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-Poisoning 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.