mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 16:39:32 +00:00
4.2 KiB
4.2 KiB
Dom Einherjar
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 na GitHubie.
Podstawowe informacje
Kod
- Sprawdź przykład z https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- Lub z https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (może być konieczne uzupełnienie tcache)
Cel
- Celem jest alokacja pamięci praktycznie w dowolnym określonym adresie.
Wymagania
- Utwórz fałszywy kawałek, gdy chcemy zaalokować kawałek:
- Ustaw wskaźniki tak, aby wskazywały na siebie same, aby ominąć kontrole spójności
- Przesunięcie o jeden kawałek do innego w celu zmodyfikowania poprzedniego w użyciu
- Wskaż w
prev_size
nadużywanego kawałka o jeden różnicę między nim a fałszywym kawałkiem - Rozmiar fałszywego kawałka musi również być ustawiony na ten sam rozmiar, aby ominąć kontrole spójności
- Do skonstruowania tych kawałków będziesz potrzebować wycieku sterty.
Atak
A
fałszywy kawałek jest tworzony wewnątrz kawałka kontrolowanego przez atakującego, wskazując zfd
ibk
na oryginalny kawałek, aby ominąć zabezpieczenia- Alokowane są 2 inne kawałki (
B
iC
) - Wykorzystując przesunięcie o jeden w kawałku
B
, bitprev in use
jest czyszczony, a daneprev_size
są nadpisywane różnicą między miejscem, w którym jest alokowany kawałekC
, a fałszywym kawałkiemA
wygenerowanym wcześniej - Ten
prev_size
oraz rozmiar w fałszywym kawałkuA
muszą być takie same, aby ominąć kontrole. - Następnie wypełniana jest tcache
- Następnie
C
jest zwalniane, aby skonsolidowało się z fałszywym kawałkiemA
- Następnie tworzony jest nowy kawałek
D
, który będzie zaczynał się w fałszywym kawałkuA
i pokrywał kawałekB
- Dom Einherjar kończy się tutaj
- Można kontynuować to atakiem na fast bin:
- Zwolnij
B
, aby dodać go do fast bin - Nadpisz
fd
B
, aby wskazywał na docelowy adres nadużywając kawałekD
(ponieważ zawiera w sobieB
) - Następnie wykonuje się 2 alokacje i druga z nich będzie alokować docelowy adres
Odwołania i inne przykłady
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Po zwolnieniu wskaźników nie są one zerowane, więc wciąż można uzyskać do nich dostęp. Dlatego kawałek jest umieszczany w nieposortowanym pojemniku i wyciekane są wskaźniki, które zawiera (wyciek libc), a następnie nowa sterta jest umieszczana w nieposortowanym pojemniku i wyciekany jest adres sterty z wskaźnika, który otrzymuje.