# House of Einherjar {{#include ../../banners/hacktricks-training.md}} ## Basic Information ### Code - Angalia mfano kutoka [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) - Au ile kutoka [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) (huenda ukahitaji kujaza tcache) ### Goal - Lengo ni kugawa kumbukumbu katika anwani maalum karibu yoyote. ### Requirements - Unda chunk bandia tunapotaka kugawa chunk: - Weka viashiria kuashiria yenyewe ili kupita ukaguzi wa usalama - Overflow ya byte moja na byte ya null kutoka chunk moja hadi nyingine ili kubadilisha bendera ya `PREV_INUSE`. - Onyesha katika `prev_size` ya chunk iliyoathiriwa na null tofauti kati yake na chunk bandia - Ukubwa wa chunk bandia lazima pia uwe umewekwa sawa ili kupita ukaguzi wa usalama - Ili kujenga hizi chunks, utahitaji kuvuja heap. ### Attack - `A` chunk bandia inaundwa ndani ya chunk inayodhibitiwa na mshambuliaji ikielekeza na `fd` na `bk` kwa chunk asilia ili kupita ulinzi - Chunks 2 nyingine (`B` na `C`) zinagawiwa - Kwa kutumia off by one katika `B` bendera ya `prev in use` inafutwa na data ya `prev_size` inabadilishwa na tofauti kati ya mahali ambapo chunk `C` inagawiwa, hadi chunk bandia `A` iliyoundwa hapo awali - Hii `prev_size` na ukubwa katika chunk bandia `A` lazima iwe sawa ili kupita ukaguzi. - Kisha, tcache inajazwa - Kisha, `C` inachukuliwa ili kuungana na chunk bandia `A` - Kisha, chunk mpya `D` inaundwa ambayo itaanza katika chunk bandia `A` na kufunika chunk `B` - Nyumba ya Einherjar inamalizika hapa - Hii inaweza kuendelea na shambulio la fast bin au Tcache poisoning: - Free `B` ili kuiongeza kwenye fast bin / Tcache - `fd` ya `B` inabadilishwa ikifanya iweke kwenye anwani ya lengo ikitumia chunk `D` (kama inavyojumuisha `B` ndani) - Kisha, mallocs 2 zinafanywa na ya pili itakuwa **ikigawa anwani ya lengo** ## References and other examples - [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) - Baada ya kuachilia viashiria havifutwi, hivyo bado inawezekana kufikia data zao. Kwa hivyo chunk inawekwa katika bin isiyo na mpangilio na kuvuja viashiria inavyoshikilia (libc leak) na kisha heap mpya inawekwa kwenye bin isiyo na mpangilio na kuvuja anwani ya heap kutoka kwa kiashiria inachopata. - [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/) - Null-byte overflow bug katika `strtok`. - Tumia House of Einherjar kupata hali ya chunks zinazoshirikiana na kumaliza na Tcache poisoning ili kupata primitive ya kuandika isiyo na mpangilio. {{#include ../../banners/hacktricks-training.md}}