mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
4.7 KiB
4.7 KiB
Przepełnienie o jeden
Naucz się hakować 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 repozytoriów na GitHubie.
Podstawowe informacje
Mając dostęp tylko do przepełnienia o jeden bajt, atakujący może zmodyfikować poprzednie informacje o metadanych rozmiaru, co pozwala manipulować, które bloki są faktycznie zwalniane, generując w końcu blok zawierający inny legalny blok.
Przykład kodu:
- https://github.com/DhavalKapil/heap-exploitation/blob/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/shrinking_free_chunks.c
- Ten atak już nie działa ze względu na użycie Tcaches.
- Ponadto, jeśli spróbujesz go wykorzystać, używając większych bloków (aby tcaches nie były zaangażowane), otrzymasz błąd:
malloc(): invalid next size (unsorted)
Cel
- Umieścić blok wewnątrz innego bloku, dzięki czemu dostęp do zapisu w tym drugim bloku pozwala nadpisać zawartość zawartego bloku
Wymagania
- Przepełnienie o jeden bajt, aby zmodyfikować poprzednie informacje o metadanych rozmiaru
Atak
- Rezerwowane są 3 bloki pamięci (a, b, c) jeden po drugim. Następnie środkowy jest zwalniany. Pierwszy zawiera podatność na przepełnienie o jeden bajt i atakujący wykorzystuje to z użyciem 0x00 (jeśli poprzedni bajt był 0x10, sprawiłoby to, że środkowy blok wskazywałby, że jest o 0x10 mniejszy, niż naprawdę jest).
- Następnie, w środkowym zwolnionym bloku (b) alokowane są 2 mniejsze bloki, jednakże, ponieważ
b + b->size
nigdy nie aktualizuje bloku c, ponieważ wskazany adres jest mniejszy, niż powinien. - Następnie, b1 i c są zwalniane. Ponieważ
c - c->prev_size
nadal wskazuje na b (teraz b1), oba są scalane w jeden blok. Jednakże, b2 nadal znajduje się wewnątrz pomiędzy b1 i c. - Wreszcie, wykonywane jest nowe malloc, odzyskując ten obszar pamięci, który faktycznie będzie zawierał b2, pozwalając właścicielowi nowego malloc kontrolować zawartość b2.
To zdjęcie doskonale wyjaśnia atak:
Referencje
Naucz się hakować 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 repozytoriów na GitHubie.