mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
75 lines
4.8 KiB
Markdown
75 lines
4.8 KiB
Markdown
# Einherjar之屋
|
||
|
||
{% hint style="success" %}
|
||
学习并练习AWS黑客:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
学习并练习GCP黑客:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>支持HackTricks</summary>
|
||
|
||
* 查看[**订阅计划**](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来分享黑客技巧。
|
||
|
||
</details>
|
||
{% 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黑客:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家(ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||
学习并练习GCP黑客:<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家(GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||
|
||
<details>
|
||
|
||
<summary>支持HackTricks</summary>
|
||
|
||
* 查看[**订阅计划**](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来分享黑客技巧。
|
||
|
||
</details>
|
||
{% endhint %}
|