House of Einherjar
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
目标是在几乎任何特定地址分配内存。
当我们想要分配一个块时,创建一个假块:
设置指针指向自身以绕过完整性检查
使用一个字节溢出从一个块到下一个块,修改 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,第二次将 分配目标地址
释放指针后,它们不会被置为 null,因此仍然可以访问它们的数据。因此,一个块被放置在未排序的 bin 中并泄漏它包含的指针(libc leak),然后在未排序的 bin 中放置一个新的堆并泄漏从它获取的指针的堆地址。
strtok
中的空字节溢出漏洞。
使用 Einherjar 之屋来获得重叠块的情况,并通过 Tcache 中毒结束以获得任意写入原语。
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)