# Einherjar之屋
{% hint style="success" %}
学习并练习AWS黑客:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
学习并练习GCP黑客:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
支持HackTricks
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
{% endhint %}
## 基本信息
### 代码
* 查看示例:[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://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)
### 目标
* 目标是在几乎任意特定地址上分配内存。
### 要求
* 当我们想要分配一个块时,创建一个伪造的块:
* 设置指针指向自身以绕过完整性检查
* 通过一个块到下一个块的一个字节溢出,使用空字节修改`PREV_INUSE`标志。
* 在被滥用的块的`prev_size`中指示自身与伪造块之间的差异
* 伪造块的大小也必须设置为相同大小以绕过完整性检查
* 为构造这些块,您将需要一个堆泄漏。
### 攻击
* 攻击者在一个受攻击者控制的块内创建一个伪造块,用`fd`和`bk`指向原始块以绕过保护
* 分配2个其他块(`B`和`C`)
* 在`B`中滥用`prev in use`,清除`prev_size`数据,并用`C`块分配的位置与之前生成的伪造`A`块之间的差异进行覆盖
* 这个`prev_size`和伪造块`A`中的大小必须相同以绕过检查。
* 然后,填充tcache
* 然后,释放`C`,使其与伪造块`A`合并
* 然后,创建一个新块`D`,它将从伪造`A`块开始,覆盖`B`块
* Einherjar之屋到此结束
* 这可以继续进行快速bin攻击或Tcache污染:
* 释放`B`以将其添加到快速bin / Tcache
* 覆盖`B`的`fd`,使其指向目标地址,滥用包含`B`的`D`块(因为它包含`B`)
* 然后,进行2次malloc,第二次将**分配目标地址**
## 参考和其他示例
* [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)
* 在释放指针后,它们没有被置空,因此仍然可以访问它们的数据。因此,在未排序的bin中放置一个块,并泄漏它包含的指针(libc泄漏),然后在未排序的bin中放置一个新堆,并从它获得的指针泄漏一个堆地址。
* [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/)
* `strtok`中的空字节溢出漏洞。
* 使用Einherjar之屋获得重叠块情况,并最终通过Tcache污染获得任意写入原语。
{% hint style="success" %}
学习并练习AWS黑客:[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)\
学习并练习GCP黑客:[**HackTricks培训GCP红队专家(GRTE)**](https://training.hacktricks.xyz/courses/grte)
支持HackTricks
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
{% endhint %}