Double Free
Double Free
原理
在UAF的情境下,如果程序中没有edit编辑函数,这时候就要用到double free。这里要注意fastbin中有一个检查机制,我们不可以连续free同一个堆块,所以我们要在中间隔一个堆块来绕过fastbin检查,比如我们连续malloc两个个相同大小的符合fastbin大小的堆块,chunk0,1,再按0,1,0的顺序连续free掉三个堆块,现在该大小的fastbin中:chunk0——>chunk1——>chunk0,这时候我们malloc一个堆块把第一个chunk0申请出来,要注意程序中的add函数中要有输入fd指针的功能,这时我们如果把add的内容写成后门函数或者malloc_hook函数,那么此时的fastbin中的chunk0的fd指针也会被修改,fastbin中:chunk1——>chunk0——>malloc_hook,那么我们接着malloc申请这一大小的堆块,第三次就可以把malloc_hook函数申请出来,又因为没有edit函数,所以我们在申请出来的时候就要通过add函数的写入功能往malloc_hook位置写入one_gadget。
例题
就是一道简单的菜单题,有UAF漏洞,无edit函数,先把交互菜单写好
接着用之前堆溢出提到过的方法通过unsorted bin泄露libc地址
接下来就是double free,之前的原理已经很详细了,下面是exp:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Kong's blog!
评论
WalineGiscus



