House of Einherjar
Reading time: 3 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
Podstawowe informacje
Kod
- Sprawdź przykład z https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- Lub ten z https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation (możesz potrzebować wypełnić tcache)
Cel
- Celem jest przydzielenie pamięci w prawie dowolnym konkretnym adresie.
Wymagania
- Utwórz fałszywy kawałek, gdy chcemy przydzielić kawałek:
- Ustaw wskaźniki, aby wskazywały na siebie, aby obejść kontrole poprawności
- Przepełnienie o jeden bajt z bajtem null z jednego kawałka do następnego, aby zmodyfikować flagę
PREV_INUSE
. - Wskaź w
prev_size
fałszywego kawałka wykorzystanego w sposób off-by-null powinien wskazywać różnicę między nim a fałszywym kawałkiem - Rozmiar fałszywego kawałka również musi być ustawiony na ten sam rozmiar, aby obejść kontrole poprawności
- Do konstruowania tych kawałków będziesz potrzebować wycieku z sterty.
Atak
A
fałszywy kawałek jest tworzony wewnątrz kawałka kontrolowanego przez atakującego, wskazującfd
ibk
na oryginalny kawałek, aby obejść zabezpieczenia- Przydzielane są 2 inne kawałki (
B
iC
) - Wykorzystując błąd off by one w kawałku
B
, bitprev in use
jest czyszczony, a daneprev_size
są nadpisywane różnicą między miejscem, w którym przydzielany jest kawałekC
, a fałszywym kawałkiemA
utworzonym wcześniej - Ten
prev_size
i rozmiar w fałszywym kawałkuA
muszą być takie same, aby obejść kontrole. - Następnie, tcache jest wypełniane
- Następnie,
C
jest zwalniane, aby skonsolidować się z fałszywym kawałkiemA
- Następnie tworzony jest nowy kawałek
D
, który zacznie się w fałszywym kawałkuA
i pokryje kawałekB
- Dom Einherjar kończy się tutaj
- Można to kontynuować atakiem na szybki bin lub zatruciem Tcache:
- Zwalniamy
B
, aby dodać go do szybkiego bin / Tcache fd
kawałkaB
jest nadpisywany, co sprawia, że wskazuje na docelowy adres, wykorzystując kawałekD
(ponieważ zawieraB
wewnątrz)- Następnie wykonuje się 2 malloci, a drugi z nich będzie przydzielał adres docelowy
Odniesienia i inne przykłady
- https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c
- CTF https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad
- Po zwolnieniu wskaźników nie są one ustawiane na null, więc nadal możliwe jest uzyskanie dostępu do ich danych. Dlatego kawałek jest umieszczany w nieposortowanym binie i wyciekają wskaźniki, które zawiera (wyciek libc), a następnie nowa sterta jest umieszczana w nieposortowanym binie i wyciekany jest adres sterty z uzyskanego wskaźnika.
- baby-talk. DiceCTF 2024
- Błąd przepełnienia bajtu null w
strtok
. - Użyj House of Einherjar, aby uzyskać sytuację z nakładającymi się kawałkami i zakończyć zatruciem Tcache, aby uzyskać prymitywne zapisywanie dowolnych danych.
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.