很好的参考资料:
pwn题堆利用的一些姿势 – malloc_hook
一、malloc hook
使用malloc hook主要是应对保护全开的时候,因为got表无法劫持,所以使用malloc hoook + onegadget来实现
(一)初级利用
malloc_hook是在malloc函数调用前会执行的钩子函数。 在程序中,通常malloc_hook的函数地址对应值为0,也就是不会执行任何东西,我们在利用过程中将其覆盖为onegadget地址,这样再执行一次malloc就会执行onegadget。
关于malloc_hook的地址有两种获取方法,第一种是泄露main_arnea后相差0x10,第二种是通过基址和ELF函数获取
- malloc_hook = main_arnea - 0x10
- malloc_hook = libc基址 + libc.sym["__malloc_hook"]
但从本质上讲,如果程序本身有shellcode,malloc hook的利用就和got表劫持一样简单
(二)程序中有/bin/sh字符串的利用方法
可以将malloc_hook修改为system函数地址,假设/bin/sh在0x400000位置,那么就将申请堆块大小写成0x400000输入,就会执行sy