WWW2Exec - __malloc_hook & __free_hook
Last updated
Last updated
学习并练习AWS黑客技术:HackTricks培训AWS红队专家(ARTE) 学习并练习GCP黑客技术:HackTricks培训GCP红队专家(GRTE)
正如您可以在GNU官方网站上看到的,变量**__malloc_hook
是一个指针,指向将在调用malloc()
时调用的函数的地址**,存储在libc库的数据段中。因此,如果将此地址覆盖为例如One Gadget,并调用malloc
,则将调用One Gadget。
要调用malloc,可以等待程序调用它,或者通过调用printf("%10000$c")
,这将分配太多字节,使libc
调用malloc在堆中分配它们。
有关One Gadget的更多信息,请参见:
One Gadget请注意,对于GLIBC >= 2.34,挂钩已禁用。现代GLIBC版本可以使用其他技术。请参见:https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md。
这在页面中滥用快速bin攻击后滥用未排序bin攻击的示例中被滥用:
Unsorted Bin Attack如果二进制文件具有符号,则可以使用以下命令找到__free_hook
的地址:
在这篇文章中 ,您可以找到一个关于如何在没有符号的情况下定位__free_hook
地址的逐步指南。总结一下,在free
函数中:
在上述代码中的断点处,$eax
中将会存储__free_hook
的地址。
现在执行一个快速bin攻击:
首先发现可以在**__free_hook
位置使用大小为200的快速块**:
如果我们成功在这个位置获得大小为0x200的快速块,就可以覆盖一个将被执行的函数指针
为此,创建一个大小为0xfc
的新块,并使用该指针两次调用合并函数,这样我们就可以获得一个指向大小为0xfc*2 = 0x1f8
的已释放块的指针。
然后,在这个块中调用编辑函数,将这个快速块的**fd
地址修改为指向之前的__free_hook
**函数。
接着,创建一个大小为0x1f8
的块,从快速bin中检索之前无用的块,然后再创建一个大小为0x1f8
的块,以在**__free_hook
中获取一个快速bin块,将其覆盖为system
**函数的地址。
最后,释放一个包含字符串/bin/sh\x00
的块,调用删除函数,触发指向带有/bin/sh\x00
参数的**__free_hook
**函数。