# House of Einherjar {{#include ../../banners/hacktricks-training.md}} ## Basiese Inligting ### Kode - Kyk na die voorbeeld van [https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c) - Of die een van [https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation](https://guyinatuxedo.github.io/42-house_of_einherjar/house_einherjar_exp/index.html#house-of-einherjar-explanation) (jy mag dalk die tcache moet vul) ### Doel - Die doel is om geheue in byna enige spesifieke adres toe te ken. ### Vereistes - Skep 'n valse chunk wanneer ons 'n chunk wil toeken: - Stel wysers in om na hulself te wys om sanity kontroles te omseil - Een-byte oorgang met 'n null byte van een chunk na die volgende om die `PREV_INUSE` vlag te verander. - Dui in die `prev_size` van die off-by-null misbruikte chunk die verskil tussen homself en die valse chunk aan - Die grootte van die valse chunk moet ook dieselfde grootte wees om sanity kontroles te omseil - Om hierdie chunks te konstrueer, sal jy 'n heap leak nodig hê. ### Aanval - `A` valse chunk word binne 'n chunk geskep wat deur die aanvaller beheer word wat met `fd` en `bk` na die oorspronklike chunk wys om beskermings te omseil - 2 ander chunks (`B` en `C`) word toegeken - Deur die off by een in die `B` een word die `prev in use` bit skoongemaak en die `prev_size` data word oorgeskryf met die verskil tussen die plek waar die `C` chunk toegeken word, na die valse `A` chunk wat voorheen gegenereer is - Hierdie `prev_size` en die grootte in die valse chunk `A` moet dieselfde wees om kontroles te omseil. - Dan word die tcache gevul - Dan word `C` vrygestel sodat dit saamgevoeg word met die valse chunk `A` - Dan word 'n nuwe chunk `D` geskep wat in die valse `A` chunk begin en die `B` chunk bedek - Die huis van Einherjar eindig hier - Dit kan voortgegaan word met 'n vinnige bin aanval of Tcache vergiftiging: - Vry `B` om dit by die vinnige bin / Tcache te voeg - `B`'s `fd` word oorgeskryf sodat dit na die teikenadres wys deur die `D` chunk te misbruik (aangesien dit `B` binne bevat) - Dan word 2 mallocs gedoen en die tweede een gaan **die teikenadres toeken** ## Verwysings en ander voorbeelde - [https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c](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**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad) - Na die vrystelling van wysers word hulle nie genullifiseer nie, so dit is steeds moontlik om toegang tot hul data te verkry. Daarom word 'n chunk in die onsorteerde bin geplaas en die wysers wat dit bevat, word geleak (libc leak) en dan word 'n nuwe heap op die onsorteerde bin geplaas en 'n heap adres van die wysers wat dit ontvang, geleak. - [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/) - Null-byte oorgang fout in `strtok`. - Gebruik House of Einherjar om 'n oorvleuelende chunks situasie te kry en eindig met Tcache vergiftiging om 'n arbitrêre skryf primitief te verkry. {{#include ../../banners/hacktricks-training.md}}