House of Einherjar
Reading time: 4 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
代码
- 查看示例 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 中毒结束以获得任意写入原语。
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。