mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
3.5 KiB
3.5 KiB
Einherjar之屋
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFTs收藏品
- 加入 💬 Discord群组 或 电报群组 或在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_size
中指示自身与假块之间的差异 - 假块的大小也必须设置为相同的大小以绕过完整性检查
- 要构造这些块,您将需要一个堆泄漏。
攻击
- 攻击者在一个受攻击者控制的块内创建一个假块,用
fd
和bk
指向原始块以绕过保护 - 分配2个其他块(
B
和C
) - 在
B
中滥用偏移一个字节,清除prev in use
位,并用C
块分配的位置与之前生成的假A
块之间的差异覆盖prev_size
数据 - 这个
prev_size
和假块A
中的大小必须相同以绕过检查。 - 然后,填充tcache
- 然后,释放
C
,使其与假块A
合并 - 然后,创建一个新块
D
,它将从假A
块开始,覆盖B
块 - Einherjar之屋到此结束
- 这可以继续进行快速bin攻击:
- 释放
B
以将其添加到快速bin - 覆盖
B
的fd
,使其指向目标地址,滥用包含B
的D
块(因为它包含B
) - 然后,执行2次malloc,第二次将分配目标地址
参考资料和其他示例
- 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
- 释放指针后它们不会被置空,因此仍然可以访问它们的数据。因此,在未排序的bin中放置一个块,并泄漏它包含的指针(libc泄漏),然后在未排序的bin中放置一个新堆,并从它获得的指针中泄漏一个堆地址。