Sulley fuzzer learning---5
字数 1757 2025-08-20 18:18:05

Sulley Fuzzer 学习指南 - Vulnserver 实战篇

1. 前言

Sulley 是一个功能强大的模糊测试框架,本教程将详细介绍如何使用 Sulley 对 Vulnserver 进行模糊测试。Vulnserver 是由 Stephen Bradshaw 编写的故意包含漏洞的服务器程序,专门用于学习模糊测试技术。

2. 模糊测试流程概述

完整的模糊测试过程包含以下关键阶段:

  1. 确定目标:在本例中为运行在端口 9999 上的 Vulnserver
  2. 识别输入:找出应用程序接受的所有输入
  3. 生成模糊数据:创建无效输入数据
  4. 执行模糊测试:将数据发送到目标
  5. 检测异常:监控服务器崩溃情况
  6. 确定可利用性:分析导致崩溃的输入数据

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 启动监控工具

在开始模糊测试前,需要启动两个关键监控工具:

  1. 网络监控器:记录所有网络通信

    python network_monitor.py -d 0 -f "src or dst port 9999" -P audits\vulnserver\
    
  2. 进程监控器:检测 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 关键组件解析

  1. 数据模型

    • s_initialize 初始化数据组
    • s_group 定义所有命令名称
    • s_block_start/s_block_end 定义命令体结构
    • s_delim 指定分隔符(空格)
    • s_string 指定要模糊测试的字符串参数
    • s_static 指定固定内容(回车换行)
  2. 会话管理

    • sessions.session 创建会话,支持后续恢复
  3. 目标配置

    • 指定目标IP和端口
    • 配置网络和进程监控器连接
    • 定义进程启动/停止命令

5. 执行模糊测试

  1. 设置PYTHONPATH:

    export PYTHONPATH="$PYTHONPATH:/home/user/sulley/
    
  2. 启动模糊测试:

    python requests/vulnserver.py
    
  3. 监控进度:

    • 通过Web界面 http://127.0.0.1:26000 查看进度
    • 界面显示测试完整性及导致崩溃的输入

6. 结果分析

Sulley 成功发现了 Vulnserver 中的所有六个漏洞:

命令 崩溃次数 示例崩溃输入
TRUN 3x -
GMON 1x -
KSTET 4x -
GTER 2x -
HTER 1x -
LTER 1x LTER /.:/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n

7. 关键点总结

  1. 数据模型设计:正确构建输入数据结构是模糊测试成功的关键
  2. 监控配置:网络和进程监控器必须正确配置才能捕获崩溃
  3. 会话管理:支持从崩溃点恢复测试
  4. 目标管理:确保目标进程能在崩溃后自动重启
  5. 结果分析:通过Web界面高效分析测试结果

8. 结论

Sulley 是一个强大的模糊测试框架,通过本教程的 Vulnserver 实战,我们学习了:

  • 如何构建有效的模糊测试数据模型
  • 配置和管理模糊测试会话
  • 监控和分析测试结果
  • 识别和验证软件漏洞

这种方法可以扩展到其他网络服务和应用程序的测试中,是安全研究人员发现软件漏洞的有力工具。

Sulley Fuzzer 学习指南 - Vulnserver 实战篇 1. 前言 Sulley 是一个功能强大的模糊测试框架,本教程将详细介绍如何使用 Sulley 对 Vulnserver 进行模糊测试。Vulnserver 是由 Stephen Bradshaw 编写的故意包含漏洞的服务器程序,专门用于学习模糊测试技术。 2. 模糊测试流程概述 完整的模糊测试过程包含以下关键阶段: 确定目标 :在本例中为运行在端口 9999 上的 Vulnserver 识别输入 :找出应用程序接受的所有输入 生成模糊数据 :创建无效输入数据 执行模糊测试 :将数据发送到目标 检测异常 :监控服务器崩溃情况 确定可利用性 :分析导致崩溃的输入数据 3. 准备工作 3.1 识别 Vulnserver 输入 通过 telnet 连接到 Vulnserver 并执行 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 启动监控工具 在开始模糊测试前,需要启动两个关键监控工具: 网络监控器 :记录所有网络通信 进程监控器 :检测 Vulnserver 崩溃 4. Vulnserver 模糊测试脚本详解 以下是完整的 vulnserver.py 模糊测试脚本: 4.1 关键组件解析 数据模型 : s_initialize 初始化数据组 s_group 定义所有命令名称 s_block_start/s_block_end 定义命令体结构 s_delim 指定分隔符(空格) s_string 指定要模糊测试的字符串参数 s_static 指定固定内容(回车换行) 会话管理 : sessions.session 创建会话,支持后续恢复 目标配置 : 指定目标IP和端口 配置网络和进程监控器连接 定义进程启动/停止命令 5. 执行模糊测试 设置PYTHONPATH: 启动模糊测试: 监控进度: 通过Web界面 http://127.0.0.1:26000 查看进度 界面显示测试完整性及导致崩溃的输入 6. 结果分析 Sulley 成功发现了 Vulnserver 中的所有六个漏洞: | 命令 | 崩溃次数 | 示例崩溃输入 | |------|---------|-------------| | TRUN | 3x | - | | GMON | 1x | - | | KSTET| 4x | - | | GTER | 2x | - | | HTER | 1x | - | | LTER | 1x | LTER /.:/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n | 7. 关键点总结 数据模型设计 :正确构建输入数据结构是模糊测试成功的关键 监控配置 :网络和进程监控器必须正确配置才能捕获崩溃 会话管理 :支持从崩溃点恢复测试 目标管理 :确保目标进程能在崩溃后自动重启 结果分析 :通过Web界面高效分析测试结果 8. 结论 Sulley 是一个强大的模糊测试框架,通过本教程的 Vulnserver 实战,我们学习了: 如何构建有效的模糊测试数据模型 配置和管理模糊测试会话 监控和分析测试结果 识别和验证软件漏洞 这种方法可以扩展到其他网络服务和应用程序的测试中,是安全研究人员发现软件漏洞的有力工具。