House of Force

学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 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)
*/

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

参考资料和其他示例

Last updated