House of Einherjar
Last updated
Last updated
Ucz się i praktykuj Hacking AWS:HackTricks Szkolenie AWS Red Team Expert (ARTE) Ucz się i praktykuj Hacking GCP: HackTricks Szkolenie GCP Red Team Expert (GRTE)
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)
Celem jest alokacja pamięci praktycznie w dowolnym określonym adresie.
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
Przepełnij jeden bajt z bajtem null z jednego kawałka do następnego, aby zmodyfikować flagę PREV_INUSE
.
Wskaż w prev_size
nadużywanego kawałka off-by-null 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.
A
fałszywy kawałek jest tworzony wewnątrz kawałka kontrolowanego przez atakującego, wskazując z fd
i bk
na oryginalny kawałek, aby ominąć zabezpieczenia
Allokowane są 2 inne kawałki (B
i C
)
Wykorzystując off by one w B
, bit prev in use
jest czyszczony, a dane prev_size
są nadpisywane różnicą między miejscem, w którym jest allokowany kawałek C
, a fałszywym kawałkiem A
wygenerowanym wcześniej
Ten prev_size
i rozmiar w fałszywym kawałku A
muszą być takie same, aby ominąć kontrole.
Następnie wypełniany jest tcache
Następnie, C
jest zwalniane, aby skonsolidować się z fałszywym kawałkiem A
Następnie tworzony jest nowy kawałek D
, który będzie zaczynał się w fałszywym kawałku A
i pokrywał kawałek B
Dom Einherjar kończy się tutaj
Można kontynuować to atakiem na fast bin lub zatruciem Tcache:
Zwolnij B
, aby dodać go do fast bin / Tcache
Nadpisz fd
B
, aby wskazywał na docelowy adres nadużywając kawałka D
(ponieważ zawiera w sobie B
)
Następnie wykonuje się 2 alokacje pamięci i druga z nich będzie alokować docelowy adres
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 nieuporządkowanym pojemniku i wyciekane są wskaźniki, które zawiera (wyciek libc), a następnie nowa sterta jest umieszczana w nieuporządkowanym pojemniku i wyciekany jest adres sterty z wskaźnika, który otrzymuje.
Błąd przepełnienia bajtem null w strtok
.
Użyj Domu Einherjar, aby uzyskać sytuację nakładających się kawałków i zakończ zatruciem Tcache, aby uzyskać arbitralne pisanie.