House of Force

Reading time: 7 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

基本信息

代码

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

目标

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

要求

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

攻击

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

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

c
// 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以在目标地址获取一个块。

参考文献与其他示例

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks