hacktricks/binary-exploitation/heap/house-of-force.md

6.1 KiB
Raw Blame History

强制之屋

从零开始学习AWS黑客技术成为 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

基本信息

代码

  • 这种技术已被修补(在此处),并产生此错误:malloc(): corrupted top size
  • 您可以尝试这里的代码进行测试。

目标

  • 此攻击的目标是能够在特定地址分配一个块。

要求

  • 允许覆盖顶部块头部大小(例如-1的溢出。
  • 能够控制堆分配的大小

攻击

如果攻击者想要在地址P中分配一个块以覆盖这里的值。他首先通过覆盖顶部块大小为-1可能通过溢出来开始。这确保了malloc不会为任何分配使用mmap因为顶部块始终有足够的空间。

然后计算顶部块地址和目标空间之间的距离以进行分配。这是因为将执行具有该大小的malloc以将顶部块移动到该位置。这就是如何轻松计算差异/大小的方法:

// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/

因此,分配大小为target - old_top - 4*sizeof(long)4个long是因为顶部块的元数据和分配时的新块将把顶部块移动到我们想要覆盖的地址。
然后再次执行malloc以获取一个包含要写入目标地址的数据开头的块。

参考资料和其他示例