House of Einherjar
Grundlegende Informationen
Code
Überprüfen Sie das Beispiel unter https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
Oder das unter https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (möglicherweise müssen Sie den Tcache füllen)
Ziel
Das Ziel ist es, Speicher fast an einer bestimmten Adresse zuzuweisen.
Anforderungen
Erstellen Sie einen gefälschten Chunk, wenn wir einen Chunk zuweisen möchten:
Setzen Sie Zeiger so, dass sie auf sich selbst zeigen, um die Integritätsprüfungen zu umgehen
Ein-Byte-Überlauf mit einem Nullbyte von einem Chunk zum nächsten, um das
PREV_INUSE
-Flag zu ändern.Geben Sie im
prev_size
des missbrauchten Off-by-Null-Chunks den Unterschied zwischen ihm selbst und dem gefälschten Chunk anDie Größe des gefälschten Chunks muss ebenfalls auf die gleiche Größe gesetzt worden sein, um die Integritätsprüfungen zu umgehen
Für den Aufbau dieser Chunks benötigen Sie ein Heap-Leak.
Angriff
Es wird ein gefälschter Chunk innerhalb eines vom Angreifer kontrollierten Chunks erstellt, der mit
fd
undbk
auf den Original-Chunk zeigt, um Schutzmechanismen zu umgehen2 weitere Chunks (
B
undC
) werden allokiertDurch den Missbrauch des Off-by-One im
B
wird dasprev in use
-Bit gelöscht und dieprev_size
-Daten mit dem Unterschied zwischen dem Ort, an dem derC
-Chunk allokiert ist, und dem zuvor generierten gefälschtenA
-Chunk überschriebenDiese
prev_size
und die Größe im gefälschten ChunkA
müssen gleich sein, um die Prüfungen zu umgehen.Dann wird der Tcache gefüllt
Dann wird
C
freigegeben, damit es sich mit dem gefälschten ChunkA
konsolidiertDann wird ein neuer Chunk
D
erstellt, der im gefälschtenA
-Chunk beginnt und denB
-Chunk abdecktDas Haus von Einherjar endet hier
Dies kann mit einem Fast-Bin-Angriff oder Tcache-Vergiftung fortgesetzt werden:
Geben Sie
B
frei, um es dem Fast-Bin / Tcache hinzuzufügenDas
fd
vonB
wird überschrieben, sodass es auf die Zieladresse zeigt und denD
-Chunk missbraucht (da erB
enthält)Dann werden 2 mallocs durchgeführt und der zweite wird die Zuweisung der Zieladresse sein
Referenzen und weitere Beispiele
Nach dem Freigeben von Zeigern werden sie nicht nullifiziert, sodass es immer noch möglich ist, auf ihre Daten zuzugreifen. Daher wird ein Chunk in den unsortierten Bin platziert und die darin enthaltenen Zeiger geleakt (libc leak) und dann wird ein neuer Heap im unsortierten Bin platziert und eine Heap-Adresse aus dem Zeiger geleakt.
Null-Byte-Überlauf-Bug in
strtok
.Verwenden Sie das House of Einherjar, um eine Situation mit überlappenden Chunks zu erhalten, und beenden Sie sie mit Tcache-Vergiftung, um ein beliebiges Schreib-Primitive zu erhalten.
Last updated