# Einherjar Evi
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks'i Destekleyin
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
{% endhint %}
## Temel Bilgiler
### Kod
* Örneği kontrol edin: [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)
* Veya şu adresten bakın: [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) (tcache'yi doldurmanız gerekebilir)
### Amaç
* Hemen hemen herhangi bir belirli adreste bellek tahsis etmek.
### Gereksinimler
* Bir parça tahsis etmek istediğimizde sahte bir parça oluşturun:
* Kontrolü atlamak için işaretçileri kendisine işaret etmesini sağlayın
* Bir parçadan diğerine bir null bayt ile bir bayt taşması yaparak `PREV_INUSE` bayrağını değiştirin.
* Yanlışlıkla kullanılan parçanın `prev_size`'ına kendisi ile sahte parça arasındaki farkı belirtin
* Sahte parça boyutu da kontrolü atlamak için aynı boyutta olmalıdır
* Bu parçaları oluşturmak için bir heap sızıntısına ihtiyacınız olacak.
### Saldırı
* Saldırgan tarafından kontrol edilen bir parçanın içine `A` sahte bir parça oluşturulur ve korumaları atlamak için `fd` ve `bk` ile orijinal parçaya işaret eder
* 2 diğer parça (`B` ve `C`) tahsis edilir
* `B`'deki bir hata kullanılarak `prev in use` biti temizlenir ve `prev_size` verisi, önce oluşturulan sahte `A` parçasının yerinden `C` parçasının tahsis edildiği yere kadar olan farkla değiştirilir
* Bu `prev_size` ve sahte parçadaki boyut olan `A` aynı olmalıdır kontrolü atlamak için.
* Ardından, tcache doldurulur
* Sonra, `C` serbest bırakılır, böylece sahte parça `A` ile birleşir
* Sonra, sahte `A` parçasında başlayacak ve `B` parçasını kapsayacak yeni bir parça `D` oluşturulur
* Einherjar Evi burada biter
* Bu, hızlı bin saldırısı veya Tcache zehirlenmesi ile devam ettirilebilir:
* `B`'yi serbest bırakarak hızlı bin / Tcache'e ekleyin
* `B`'nin `fd`si üzerine yazarak, içinde `B` bulunan `D` parçasına işaret etmesini sağlayın
* Ardından, 2 malloc yapılır ve ikincisi **hedef adresi tahsis edecek**
## 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 sıfırlanmadığı için serbest bırakıldıktan sonra hala verilerine erişmek mümkündür. Bu nedenle, bir parça sıralanmamış kutuya yerleştirilir ve içerdiği işaretçileri sızdırır (libc sızıntısı) ve ardından yeni bir heap sıralanmamış kutuya yerleştirilir ve aldığı işaretçiden bir heap adresi sızdırılır.
* [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/)
* `strtok`'daki null bayt taşma hatası.
* Örtüşen parçalar durumu elde etmek için Einherjar Evi'ni kullanın ve Tcache zehirlenmesi ile keyfi yazma ilkelini elde edin.