mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
2.8 KiB
2.8 KiB
House of Einherjar
{{#include ../../banners/hacktricks-training.md}}
基本信息
代码
- 查看示例 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(你可能需要填充 tcache)
目标
- 目标是在几乎任何特定地址分配内存。
要求
- 当我们想要分配一个块时,创建一个假块:
- 设置指针指向自身以绕过完整性检查
- 使用一个字节溢出从一个块到下一个块,修改
PREV_INUSE标志。 - 在被滥用的块的
prev_size中指示它与假块之间的差异 - 假块的大小也必须设置为相同的大小以绕过完整性检查
- 构造这些块时,你需要一个堆泄漏。
攻击
- 在攻击者控制的块内创建一个
A假块,fd和bk指向原始块以绕过保护 - 分配另外两个块(
B和C) - 利用
B中的越界,清除prev in use位,并用C块分配位置与之前生成的假A块之间的差异覆盖prev_size数据 - 这个
prev_size和假块A中的大小必须相同以绕过检查。 - 然后,填充 tcache
- 然后,释放
C以便与假块A合并 - 然后,创建一个新的块
D,它将从假A块开始并覆盖B块 - Einherjar 之家在这里结束
- 这可以通过快速 bin 攻击或 Tcache 中毒继续:
- 释放
B以将其添加到快速 bin / Tcache B的fd被覆盖,使其指向目标地址,利用D块(因为它包含B)- 然后,进行两次 malloc,第二次将 分配目标地址
参考和其他示例
- 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
- 释放指针后它们并未被置为 null,因此仍然可以访问它们的数据。因此,一个块被放置在未排序的 bin 中并泄漏它包含的指针(libc leak),然后在未排序的 bin 中放置一个新的堆并泄漏从它获取的指针的堆地址。
- baby-talk. DiceCTF 2024
strtok中的空字节溢出漏洞。- 使用 Einherjar 之家获取重叠块的情况,并通过 Tcache 中毒结束以获得任意写入原语。
{{#include ../../banners/hacktricks-training.md}}