看到程序先例行检查一下
可以看到开启了canary和nx保护,需要注意的是这个acnary
将程序放入ida中shift+f12
没有关键性函数。我们进入main函数中
在main的gift程序里面我们可以看到明显的格式字符串漏洞,printf没有进行限定输入,所以我们可以通过这个程序获取到canary的值
我们进入程序试验一下,发现当第六个偏移的时候出现了61(%6是查看第6个,$p是以指针形式显示)
我们可以设置一下断点,stack查看栈
可以看到df38的位置就是canary的值,所以我们可以通过输入 %7$p 获取到canary的值
查看vuln函数
read允许的0x64远远大于buf的0x20,所以我们可以在这里泄露libc版本拿到shell
完整exp如下
但是不知道为什么远程总是不能成功获取到shell
也在payload3加上了ret的地址,让其栈对齐但是还是获取不到shell,希望有懂得师傅教导一下!
结束