今天看CTF-Wiki学到的一种利用方法,就是将malloc_hook函数指针修改成gadget地址,之后再调用malloc就执行了gadget的指令。

关于malloc_hook更详细介绍可以看这里:Linux进程内存管理(一)

查看malloc_hook

先找到main_arena的地址,将其减16就是malloc_hook。

利用pwndbg的find_fake_fast 可以找到malloc_hook附近的合法size,这样就能将chunk劫持到此处,然后覆盖malloc_hook地址。

one_gadget

我们可以将箭头指向的地址改成one_gadget:

这些地址是libc中的偏移,需要通过漏洞leak处libc基地址,然后加上它们,将其写入到malloc_hook,之后再调用malloc就会call到execve。

但是这里有一个坑,这些gadget不是每一个都能用,我今天就遇到了,使用前三个虽然/bin/sh确实创建了进程,但是pwntools无法交互,后来用的最后一个就正常了。