Pwn-Protect_full-HelloPwner
解题思路
Checksec后可以看到是64位保护全开,IDA打开分析反汇编代码
在
vuln
函数中的read读取数据时存在栈溢出,之后还可以看到程序中存在一个backdoor
的后门函数,偏移地址位0xA33
先用gdb打开,分别在
fork
函数和read
函数上下断点当程序断到fork时,输入
set follow-fork-mode child
,使当前gdb跟进程序子线程之后直接c 输入完数据后,可以使用
x /30gx $rsi
和x /1gx $rbp
|x /1gx $rsi
分别确定用户输入的buf的地址到rbp的距离,也就是打印出整个栈空间,找到\x00
结尾的数据,便是canary写脚本爆破canary后,在利用vsyscall爆破backdoor的地址
利用vsyscall爆破时需要注意,与无fork函数创建子进程的程序写法不同,无需重新加载整个源程序。
源码编译
1 | //gcc hello.c -z now -fpie -pie -g -m64 -fstack-protector -o hello_Pwner |
EXP
1 | #coding=utf-8 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 偏有宸机!
评论