# House of Einherjar {{#include ../../banners/hacktricks-training.md}} ## Temel Bilgiler ### Kod - [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) adresinden örneği kontrol edin - Ya da [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) adresindeki örneği kontrol edin (tcache'i doldurmanız gerekebilir) ### Hedef - Hedef, neredeyse herhangi bir belirli adreste bellek ayırmaktır. ### Gereksinimler - Bir parça ayırmak istediğimizde sahte bir parça oluşturun: - Sanity kontrollerini atlatmak için işaretçileri kendisine işaret edecek şekilde ayarlayın - `PREV_INUSE` bayrağını değiştirmek için bir parçadan diğerine bir null byte ile bir bayt taşması - Null ile istismar edilen parçanın `prev_size`'ında kendisi ile sahte parça arasındaki farkı belirtin - Sahte parça boyutu da sanity kontrollerini atlatmak için aynı boyutta ayarlanmış olmalıdır - Bu parçaları oluşturmak için bir heap leak'e ihtiyacınız olacak. ### Saldırı - `A` sahte parçası, saldırgan tarafından kontrol edilen bir parça içinde oluşturulur ve `fd` ve `bk` ile orijinal parçaya işaret eder, böylece korumaları atlatır - 2 başka parça (`B` ve `C`) ayrılır - `B` parçasındaki bir bayt taşmasını istismar ederek `prev in use` biti temizlenir ve `prev_size` verisi, `C` parçasının ayrıldığı yer ile daha önce oluşturulan sahte `A` parçası arasındaki fark ile üzerine yazılır - Bu `prev_size` ve sahte parça `A`'daki boyut aynı olmalıdır ki kontrolleri atlatabilsin. - Sonra, tcache doldurulur - Sonra, `C` serbest bırakılır, böylece sahte parça `A` ile birleştirilir - Sonra, sahte `A` parçasında başlayacak ve `B` parçasını kaplayacak yeni bir parça `D` oluşturulur - Einherjar evi burada sona erer - Bu, hızlı bin saldırısı veya Tcache zehirlenmesi ile devam edilebilir: - `B`'yi serbest bırakın, hızlı bin / Tcache'e ekleyin - `B`'nin `fd`'si, hedef adrese işaret edecek şekilde üzerine yazılır ve `D` parçasını istismar eder (çünkü içinde `B`'yi barındırır) - Sonra, 2 malloc yapılır ve ikincisi **hedef adresi ayıracaktır** ## Referanslar ve diğer örnekler - [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) - İşaretçileri serbest bıraktıktan sonra null hale gelmezler, bu nedenle verilerine erişmek hala mümkündür. Bu nedenle, bir parça sıralanmamış bin içine yerleştirilir ve içerdiği işaretçileri sızdırır (libc leak) ve ardından yeni bir heap sıralanmamış bin üzerine yerleştirilir ve aldığı işaretçiden bir heap adresi sızdırır. - [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/) - `strtok` içindeki null-byte taşma hatası. - Overlapping chunks durumu elde etmek için House of Einherjar'ı kullanın ve Tcache zehirlenmesi ile bitirerek keyfi yazma ilkesini elde edin. {{#include ../../banners/hacktricks-training.md}}