House of Einherjar

支持HackTricks

基本信息

代码

目标

  • 目标是在几乎任意特定地址上分配内存。

要求

  • 当我们想要分配一个块时,创建一个伪造的块:

  • 设置指针指向自身以绕过完整性检查

  • 通过一个块到下一个块的一个字节溢出,使用空字节修改PREV_INUSE标志。

  • 在被滥用的块的prev_size中指示自身与伪造块之间的差异

  • 伪造块的大小也必须设置为相同大小以绕过完整性检查

  • 为构造这些块,您将需要一个堆泄漏。

攻击

  • 攻击者在一个受攻击者控制的块内创建一个伪造块,用fdbk指向原始块以绕过保护

  • 分配2个其他块(BC

  • B中滥用prev in use,清除prev_size数据,并用C块分配的位置与之前生成的伪造A块之间的差异进行覆盖

  • 这个prev_size和伪造块A中的大小必须相同以绕过检查。

  • 然后,填充tcache

  • 然后,释放C,使其与伪造块A合并

  • 然后,创建一个新块D,它将从伪造A块开始,覆盖B

  • Einherjar之屋到此结束

  • 这可以继续进行快速bin攻击或Tcache污染:

  • 释放B以将其添加到快速bin / Tcache

  • 覆盖Bfd,使其指向目标地址,滥用包含BD块(因为它包含B

  • 然后,进行2次malloc,第二次将分配目标地址

参考和其他示例

支持HackTricks

Last updated