Double Free
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wenn du einen Block Speicher mehr als einmal freigibst, kann das die Daten des Allocators durcheinanderbringen und die Tür zu Angriffen öffnen. So passiert es: Wenn du einen Block Speicher freigibst, geht er zurück in eine Liste freier Blöcke (z. B. den "fast bin"). Wenn du denselben Block zweimal hintereinander freigibst, erkennt der Allocator dies und wirft einen Fehler. Aber wenn du dazwischen einen anderen Block freigibst, wird die Double-Free-Prüfung umgangen, was zu einer Beschädigung führt.
Wenn du jetzt neuen Speicher anforderst (mit malloc
), könnte der Allocator dir einen Block geben, der zweimal freigegeben wurde. Dies kann dazu führen, dass zwei verschiedene Zeiger auf denselben Speicherort zeigen. Wenn ein Angreifer einen dieser Zeiger kontrolliert, kann er den Inhalt dieses Speichers ändern, was zu Sicherheitsproblemen führen oder ihm sogar ermöglichen kann, Code auszuführen.
Beispiel:
In diesem Beispiel, nachdem der Tcache mit mehreren freigegebenen Chunks (7) gefüllt wurde, freed der Code Chunk h
, dann Chunk i
und dann h
erneut, was zu einem Double Free führt (auch bekannt als Fast Bin dup). Dies eröffnet die Möglichkeit, überlappende Speicheradressen beim Reallokieren zu erhalten, was bedeutet, dass zwei oder mehr Zeiger auf denselben Speicherort zeigen können. Das Manipulieren von Daten über einen Zeiger kann dann den anderen beeinflussen, was ein kritisches Sicherheitsrisiko und Potenzial für Ausnutzung schafft.
Beim Ausführen, beachten Sie, wie i1
und i2
die gleiche Adresse erhalten haben:
Wir können nur Fast-Bin-große Chunks außer der Größe 0x70
zuweisen, was das übliche __malloc_hook
Überschreiben verhindert.
Stattdessen verwenden wir PIE-Adressen, die mit 0x56
beginnen, als Ziel für Fast Bin dup (1/2 Chance).
Ein Ort, an dem PIE-Adressen gespeichert sind, ist in main_arena
, das sich innerhalb von Glibc und in der Nähe von __malloc_hook
befindet.
Wir zielen auf einen bestimmten Offset von main_arena
, um dort einen Chunk zuzuweisen und weiterhin Chunks zuzuweisen, bis wir __malloc_hook
erreichen, um Codeausführung zu erhalten.
Mit Tcache-Bins und einem Null-Byte-Overflow können wir eine Double-Free-Situation erreichen:
Wir weisen drei Chunks der Größe 0x110
zu (A
, B
, C
)
Wir geben B
frei
Wir geben A
frei und weisen erneut zu, um den Null-Byte-Overflow zu nutzen
Jetzt ist das Größenfeld von B
0x100
, anstatt 0x111
, sodass wir es erneut freigeben können
Wir haben einen Tcache-Bin der Größe 0x110
und einen der Größe 0x100
, die auf dieselbe Adresse zeigen. Also haben wir einen Double Free.
Wir nutzen den Double Free mit Tcache poisoning
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)