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