拿到题目,例行检查
64位的程序,保护全开,应该是堆溢出的题目
将程序放入ida中,程序没有后门函数所以需要泄露libc的版本
进入主页面查看,进行代码审计
在输入内容函数中
可以看到result这行,没有对用户输入的v3进行限定,所以存在堆溢出,可以用fastbin atack去做这道题
首先我们需要泄露libc的版本
我这里使用的方法是通过溢出将chunk2释放到unstbin中获得libc的值,也可以使用double free去泄露
泄露libc的版本需要知道偏移,可以通过vmmap,用泄露出的值减去0x7f72f8758000,得到偏移是3951480
获得libc的偏移后可以通过溢出到fd指针将堆转移到malloc_hook的周围,
因为程序调用malloc的时候都会检查malloc_hook的值,free也是同样如此
当我们在malloc_hook覆盖上one_gadget的值后
malloc一个堆就是相当于运行system(‘bin/sh‘)
完整exp如下
成功获取shell
结束!!!