House of Force
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
此攻击的目标是能够在特定地址分配一个块。
允许覆盖顶部块头部大小(例如 -1)的溢出。
能够控制堆分配的大小。
如果攻击者想要在地址 P 中分配一个块以覆盖这里的值。他首先通过将顶部块大小覆盖为 -1
(可能通过溢出)来开始。这确保了 malloc 不会为任何分配使用 mmap,因为顶部块始终有足够的空间。
然后,计算顶部块地址和目标空间之间的距离以进行分配。这是因为将执行具有该大小的 malloc 以将顶部块移动到该位置。这就是差异/大小可以轻松计算的方式:
因此,分配目标地址 - 旧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
作为参数
另一种方法在这篇其他文章中提出,是将free
覆盖为puts
,然后将atoi@got
的地址添加到稍后将被释放的指针中,以便泄漏,然后使用此泄漏再次将atoi@got
覆盖为system
并调用它以/bin/sh
。
存在UAF允许重用未清除指针的已释放块。由于存在一些读取方法,因此可以在这里将指针写入GOT中的free函数以泄漏libc地址,然后调用读取函数。
然后,使用House of force(滥用UAF)覆盖左侧空间的大小为-1,分配足够大的块以到达free hook,然后分配另一个包含free hook的块。然后,在hook中写入system
的地址,在一个块中写入"/bin/sh"
,最后释放包含该字符串内容的块。