House of Einherjar

Wesprzyj HackTricks

Podstawowe informacje

Kod

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ł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 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

Odwołania i inne przykłady

Last updated