Sulley fuzzer learning---5
字数 1757 2025-08-20 18:18:05
Sulley Fuzzer 学习指南 - Vulnserver 实战篇
1. 前言
Sulley 是一个功能强大的模糊测试框架,本教程将详细介绍如何使用 Sulley 对 Vulnserver 进行模糊测试。Vulnserver 是由 Stephen Bradshaw 编写的故意包含漏洞的服务器程序,专门用于学习模糊测试技术。
2. 模糊测试流程概述
完整的模糊测试过程包含以下关键阶段:
- 确定目标:在本例中为运行在端口 9999 上的 Vulnserver
- 识别输入:找出应用程序接受的所有输入
- 生成模糊数据:创建无效输入数据
- 执行模糊测试:将数据发送到目标
- 检测异常:监控服务器崩溃情况
- 确定可利用性:分析导致崩溃的输入数据
3. 准备工作
3.1 识别 Vulnserver 输入
通过 telnet 连接到 Vulnserver 并执行 HELP 命令可以获取所有有效命令:
telnet localhost 9999
HELP
Vulnserver 支持的命令包括:
- HELP
- STATS [stat_value]
- RTIME [rtime_value]
- LTIME [ltime_value]
- SRUN [srun_value]
- TRUN [trun_value]
- GMON [gmon_value]
- GDOG [gdog_value]
- KSTET [kstet_value]
- GTER [gter_value]
- HTER [hter_value]
- LTER [lter_value]
- KSTAN [lstan_value]
- EXIT
3.2 启动监控工具
在开始模糊测试前,需要启动两个关键监控工具:
-
网络监控器:记录所有网络通信
python network_monitor.py -d 0 -f "src or dst port 9999" -P audits\vulnserver\ -
进程监控器:检测 Vulnserver 崩溃
python process_monitor.py -c audits\vulnserver.crashbin -p vulnserver.exe
4. Vulnserver 模糊测试脚本详解
以下是完整的 vulnserver.py 模糊测试脚本:
#!/usr/bin/python
from sulley import *
import sys
import time
# 接收服务器banner
def banner(sock):
sock.recv(1024)
# 定义数据模型
s_initialize("VulnserverDATA")
s_group("commands", values=['HELP', 'STATS', 'RTIME', 'LTIME', 'SRUN', 'TRUN', 'GMON', 'GDOG', 'KSTET', 'GTER', 'HTER', 'LTER', 'KSTAN', 'EXIT'])
s_block_start("CommandBlock", group="commands")
s_delim(' ')
s_string('fuzz')
s_static('\r\n')
s_block_end()
# 会话设置
s = sessions.session(session_filename="audits/vulnserver.session")
# 定义状态模型
s.connect(s_get("VulnserverDATA"))
# 定义目标
target = sessions.target("192.168.1.126", 9999)
target.netmon = pedrpc.client("192.168.1.126", 26001)
target.procmon = pedrpc.client("192.168.1.126", 26002)
target.procmon_options = {
"proc_name" : "vulnserver.exe",
"stop_commands" : ['wmic process where (name="vulnserver.exe") delete'],
"start_commands" : ['C:\\Users\\eleanor\\Desktop\\vulnserver\\vulnserver.exe'],
}
# 设置banner接收
s.pre_send = banner
# 开始模糊测试
s.add_target(target)
s.fuzz()
4.1 关键组件解析
-
数据模型:
s_initialize初始化数据组s_group定义所有命令名称s_block_start/s_block_end定义命令体结构s_delim指定分隔符(空格)s_string指定要模糊测试的字符串参数s_static指定固定内容(回车换行)
-
会话管理:
sessions.session创建会话,支持后续恢复
-
目标配置:
- 指定目标IP和端口
- 配置网络和进程监控器连接
- 定义进程启动/停止命令
5. 执行模糊测试
-
设置PYTHONPATH:
export PYTHONPATH="$PYTHONPATH:/home/user/sulley/ -
启动模糊测试:
python requests/vulnserver.py -
监控进度:
- 通过Web界面
http://127.0.0.1:26000查看进度 - 界面显示测试完整性及导致崩溃的输入
- 通过Web界面
6. 结果分析
Sulley 成功发现了 Vulnserver 中的所有六个漏洞:
| 命令 | 崩溃次数 | 示例崩溃输入 |
|---|---|---|
| TRUN | 3x | - |
| GMON | 1x | - |
| KSTET | 4x | - |
| GTER | 2x | - |
| HTER | 1x | - |
| LTER | 1x | LTER /.:/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n |
7. 关键点总结
- 数据模型设计:正确构建输入数据结构是模糊测试成功的关键
- 监控配置:网络和进程监控器必须正确配置才能捕获崩溃
- 会话管理:支持从崩溃点恢复测试
- 目标管理:确保目标进程能在崩溃后自动重启
- 结果分析:通过Web界面高效分析测试结果
8. 结论
Sulley 是一个强大的模糊测试框架,通过本教程的 Vulnserver 实战,我们学习了:
- 如何构建有效的模糊测试数据模型
- 配置和管理模糊测试会话
- 监控和分析测试结果
- 识别和验证软件漏洞
这种方法可以扩展到其他网络服务和应用程序的测试中,是安全研究人员发现软件漏洞的有力工具。