#题一
开启NX、Canary保护,64位,动态编译,IDA分析:
很明显存在格式化字符串漏洞,同时左边还有__stack_chk_fail函数
这边补充一个知识点
随机生成canary被改变后会退出程序,那它如何退出的呢,就是通过执行__stack_chk_fail函数退出程序
既然题目给了我们__stack_chk_fail函数的地址,又存在格式化字符串漏洞,那我们就可以通过
fmtstr_payload(偏移,{被修改的got表:改之后的地址})来将__stack_chk_fail函数的got地址修改为main函数地址,这样在canary被修改之后执行__stack_chk_fail函数退出程序时实际上就相当于返回了main函数
可以看到程序确实是将__stack_chk_fail函数的got地址修改成了fmt(main)函数地址
之后我们就可以再一次栈溢出泄露libc基址了
这边为什么不能是p64(elf.got['read'])+b'%7$s'呢?
首先在%7$s后面补四个a是为了让它变成八个字节,防止它影响后面泄露的地址
而将p64(elf.got['read'])放在b'%7$saaa