hacktricks/binary-exploitation/heap/house-of-einherjar.md

56 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Einherjar Evi
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
## 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 noktalarını kendisine işaret etmek için işaretçileri ayarlayın
* Bir parçadan diğerine bir tane eksik olacak şekilde yanlışlıkla geçin ve önceki kullanımda değişiklik yapın
* Yanlışlıkla yanlış kullanılan parçanın `prev_size`'ına kendisi ile sahte parça arasındaki farkı gösterin
* Sahte parça boyutu da kontrol noktalarını 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 yanlışlık kullanılarak `prev in use` biti temizlenir ve `C` parçasının tahsis edildiği yer ile önce oluşturulan sahte `A` parçası arasındaki farkla `prev_size` verisi üzerine yazılır
* Bu `prev_size` ve sahte parçadaki boyut aynı olmalıdır kontrol noktalarını atlamak için.
* Sonra, 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çayı kapsayacak yeni bir parça `D` oluşturulur
* Einherjar Evi burada biter
* Bu, hızlı bin saldırısı ile devam ettirilebilir:
* `B`'yi serbest bırakarak hızlı bine ekleyin
* `B`'nin `fd`si üzerine yazılarak hedef adresi hedefleyen `D` parçasını (çünkü içinde `B` bulunmaktadır) işaret eder
* Sonra, 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)
* [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ırlamadığınızda serbest bırakıldıktan sonra, verilerine hala erişmek mümkündür. Bu nedenle, bir parça sıralanmamış kutuya yerleştirilir ve içerdiği işaretçiler sızdırılır (libc sızıntısı) ve ardından bir yeni heap sıralanmamış kutuya yerleştirilir ve aldığı işaretçiden bir heap adresi sızdırılır.