House of Force
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
此攻击的目标是能够在特定地址分配一个块。
一个允许覆盖顶部块头部大小的溢出(例如 -1)。
能够控制堆分配的大小。
如果攻击者想要在地址 P 中分配一个块以覆盖此处的值。他首先通过 -1
(可能通过溢出)覆盖顶部块的大小。这确保了 malloc 不会对任何分配使用 mmap,因为顶部块将始终有足够的空间。
然后,计算顶部块地址与要分配的目标空间之间的距离。这是因为将执行一个具有该大小的 malloc,以便将顶部块移动到该位置。这就是如何轻松计算差异/大小的方式:
因此,分配大小为 target - old_top - 4*sizeof(long)
(4个long是因为顶部块和新分配块的元数据)将把顶部块移动到我们想要覆盖的地址。
然后,再次进行malloc以在目标地址获取一个块。
这个场景的目标是ret2win,我们需要修改一个函数的地址,该函数将由ret2win函数的地址调用
二进制文件存在一个溢出,可以利用它来修改顶部块的大小,该大小被修改为-1或p64(0xffffffffffffffff)
然后,计算指针要覆盖的地址,并且从当前顶部块的位置到那里之间的差值用malloc
分配
最后,分配一个新块,其中将包含这个期望的目标,该目标将被ret2win函数覆盖
在Input your name:
中存在一个初始漏洞,允许从堆中泄漏一个地址
然后在Org:
和Host:
功能中,可以在询问org name时填充s
指针的64B,在栈中紧随其后的是v2的地址,然后是指示的host name。由于strcpy将复制s的内容到一个大小为64B的块中,因此可以用host name中放入的数据覆盖顶部块的大小。
现在任意写入成为可能,atoi
的GOT被覆盖为printf的地址。然后可以用%24$p
泄漏IO_2_1_stderr
的地址。通过这个libc泄漏,可以再次用system
的地址覆盖atoi
的GOT,并传递/bin/sh
作为参数调用它
在这个其他写作中提出的替代方法是用puts
覆盖free
,然后在稍后将被释放的指针中添加atoi@got
的地址,以便泄漏并通过这个泄漏再次用system
覆盖atoi@got
并用/bin/sh
调用它。
存在一个UAF,允许重用一个未清除指针的已释放块。由于存在一些读取方法,可以通过在这里将指向free函数的指针写入GOT来泄漏libc地址,然后调用读取函数。
然后,使用House of force(利用UAF)将剩余空间的大小覆盖为-1,分配一个足够大的块以到达free hook,然后分配另一个块,该块将包含free hook。然后,在hook中写入system
的地址,在一个块中写入"/bin/sh"
,最后释放包含该字符串内容的块。