House of Einherjar
Podstawowe informacje
Kod
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
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łkiemRozmiar 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ąć zabezpieczeniaAllokowane są 2 inne kawałki (
B
iC
)Wykorzystując off by one w
B
, bitprev in use
jest czyszczony, a daneprev_size
są nadpisywane różnicą między miejscem, w którym jest allokowany kawałekC
, a fałszywym kawałkiemA
wygenerowanym wcześniejTen
prev_size
i rozmiar w fałszywym kawałkuA
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ł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 lub zatruciem Tcache:
Zwolnij
B
, aby dodać go do fast bin / TcacheNadpisz
fd
B
, aby wskazywał na docelowy adres nadużywając kawałkaD
(ponieważ zawiera w sobieB
)Następnie wykonuje się 2 alokacje pamięci i druga z nich będzie alokować docelowy adres
Odwołania i inne przykłady
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.
Last updated