模糊测试工具Sulley开发指南(2)——与Peach比较

article/2025/10/7 18:17:40

基于已知漏洞的ftp服务器的漏洞挖掘

    我们的测试对象是EasyFTP 1.7.0.11,已知漏洞如下(github):

命令个数
CWD1
LIST1
11

Peach

简介

    MichaelW Eddington等人开发的Peach是一个遵守MIT开源许可证的模糊测试框架,最初采用Python语言编写,发布于2004年,第二版于2007年发布,最新的第三版使用C#重写了整个框架。现在已经逐渐转入商业支持,我们这边调研使用的是peach社区版。

整体工作流程

sulley-2-1

xml的编写,一些重要的元素

    DataModel定义发送的数据和接收的数据,可以支持很多协议的特性,例如校验码、固定长度元素等特性。
DataModel
    StateModel是最重要的元素,定义是状态机,规定输入和输出,按照有步骤的来。
StateModel
    还有一些其他的元素……

运行截图

    命令行运行我们编写的ftp.xml,日志文件在c:\logs下。
peach-cmd
    在此命令下每个test生成10个测试用例,然后会显示发送和接收的数据。
peach-debug
    在运行过程中会发现一些错误:
peach-error

错误发现

    peach会在WinDebugger监视进程下记录所有可能导致程序异常的的测试用例和栈的情况,测试时间和结果如下:
peach-result1
    文件夹下记录status和出现的fault:
peach-result2
    fault文件下文件夹命名方式和已知的漏洞和一些未知的错误
peach-result3
peach-result4
    能查看导致程序崩溃的发送的数据和stack情况
peach-result5

Sulley

简介

    Sulley一款用Python实现的开源Fuzz testing框架,主要应用于网络协议方面的测试. 目前现在关于这方面的测试工具也挺不少,不管是开源的(比如历史悠久的SPIKE, 或者是本文介绍的Sulley)还是商业的(比如Mu Dynamics公司的产品)
    事实上,在Sulley出来之前,这方面的工具已经有一些了,但是为什么Sulley的作者还要选择重新造轮子呢?根据Sulley的文档,他这么做的理由是,当时已有的工具主要是专注在”数据生成“部分,**而仅仅做到这一步对Sulley是不够的,因为Sulley设计的目标是:不仅要简化数据生成,同样要简化与目标系统的之间的数据传输,以及目标系统的监控。**因此我们可以把刚才这段话理解成,Sulley要做的是一个能支持fuzz testing的整个测试流程的框架。在这一点上,显然Sulley的定位比起之前的工具高出了很多。而且事实上,Sulley的作者也不算是在造一个全新的轮子,比如在具体实现Sulley的时候,他也借鉴了一些当时已经成熟很成熟的Fuzz框架(SPIKE)的经验,比如用“块”结构的方式来构造数据,这点从Sulley构造Request所用的API接口就可以看出来,包括对于特定数据类型所用到的fuzz library也都直接从SPIKE拿过来

整体工作流程

sulley-2-2

sulley里面还有一些模块可以扩展,例如vmcontrol模块,可以控制虚拟机中程序奔溃返回原始状态

重要的概念–session,区别于peach里面的状态机

    ftp里面的session如下图,sulley可以根据这幅图,自动遍历所有节点,保证每个节点顺利通过测试。

sulley-2-3

运行截图

    运行process_monitor模块:
sulley-run1
    运行network_monitor模块:
sulley-run2
    运行编写的ftp2.py文件后,开始生成测试用例:
sulley-run3
    运行的时候还可以通过http:\\127.0.0.1:26000查看运行进度:
sulley-run4

结果

    运行时会对进行每个测试用例时候的网卡进行抓包
sulley-network
sulley-network2
    sulley会把运行的时候错误写在.crash_bin文件里,通过特定的插件可以查看crashbin文件里的内容,如下:
sulley-result1
sulley-result2

Sulley和Peach

    功能方面:sulley和peach完成的功能点都是一样
    开发角度:peach专注于xml文件的编写,其余部分几乎很少能改写,代码量比较大、没有详细的代码注释、现在开放的是社区版;sulley用代码来写测试,可以开发一些插件、监视器等,适用于深度开发。
    ftp测试需要的代码量比较:peach的xml需要上千行代码,而sulley只需要300百行。


http://chatgpt.dhexx.cn/article/IiqB0eL1.shtml

相关文章

我的sulley安装过程

好了,最开始是在freebuf上看到的一个附录上有这个sulley的安装过程,我欣喜若狂。之后才知道这个就是人家的官方文档。 废话不多说。来贴上google安装源路劲:https://github.com/OpenRCE/sulley/wiki/Windows-Installation# 自己在贴出来看看…

Fuzzing及Sulley简介

一、模糊测试(Fuzzing) 1、泛化定义: Fuzzing是一种软件漏洞检测技术,通过提供非预期的、随机的或者错误的数据作为输入来检测软件漏洞,在软件出现崩溃时监视异常结果来找出其存在的潜在漏洞。 2、类比理解 可以将…

模糊测试工具Sulley开发指南(3)——整体介绍

我们开始来讲一些Sulley里面的整体介绍,方便我们能系统地了解Sulley的架构,了解Fuzzing的思路,最后能生成py文件来具体运行fuzzing。这章主要是整体印象,下一章开始会讲具体的模块以及如何写代码。 1.Sulley现在的情况 先说说现在…

模糊测试工具Sulley开发指南(1)——安装Sulley(多图,超详细)

本教程是针对的是windows上面的安装,至于其他系统的安装有时间的话会贴出来,本教程翻译自OpenRCE/Sulley-GitHub-Wiki官网教程,但是里面有一些错误我会更正指出。值得一提是,我是在win10 64位系统下面完成本次安装和运行(64位系统…

网络socket编程(c语言)

一.socket通信简介 Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议,主要利用三元组【ip地址,协议,端口】。 socket起…

Socket的通信原理和使用

目录 一、什么是 Socket? 二、Socket 通信过程 2.1 通信过程介绍 2.2 实现TCP建立连接的三次握手过程 三、 使用Socket进行通信【php】 3.1 PHP中Socket常量和函数介绍 3.2 php实现Socket通信过程 一、什么是 Socket? Socket 的中文翻译过来就是“套接…

linux 网络编程socket

前言 socket(套接字)是linux下进程间通信的一种方式,通常使用C-S(客户端-服务端)的方式通信,它可以是同一主机下的不同进程间通信或者不同主机的进程通信。 socket是夹在应用层和TCP/UDP协议层间的软件抽象…

什么是socket?socket详解

“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时&#xff…

【Python】Socket的简单应用

前言 今天“出差在外”,晚上又琐事缠身,实在也没办法特别沉下心去学什么内容,但还是不希望一天一篇的flag就此倒下,只能多多参考别人的博客浅浅学习一下python的socket应用,后续课内做实验了,学习更深入的…

http和socket关系

一、先说下HTTP网络协议栈 二、连接过程 三、重点来了,TCP套接字编程,也就是所谓的socket 四、通过比较发现http和socket完全是两个不同的概念,http是应用层的,socket是传输层和网络层的,http要基于socket实现。httpcl…

SOCKET函数详解

socket原理 1.socket socket位于应用层和TCP/IP协议通信中间,抽象成一组接口 1.服务端首先初始化Socket(),然后和接口进行绑定bind()和监听listen(),然后调用accept()进行阻塞。 2.客户端初始化socket(),然后调用connect()与服务端进行连接…

用大白话解释什么是Socket

好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 我在去年就学习过Java中Socket的使用,但对于Socket的理解一直都是迷迷糊糊…

Socket详解

“一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。 ——有感于实际编程和开源项目研究。 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时&#xff…

Java socket详解

整理和总结了一下经常遇到的问题: 1. 客户端socket发送消息后,为什么服务端socket没有收到? 2. 使用while 循环实现连续输入,是不是就是多线程模式? 3. 对多线程处理机制不是很明白,希望详细讲解…

Socket的详细介绍

文章目录 前言1-Socket出现的原因1.1-Socket出现的背景1.2-Socket解决的问题 2-Socket的组成及关键点2.1-What:什么是Socket?2.2-How: Socket通信实现的步骤2.3-How: Socket编写流程 3-Socket的关键实现3.1-socket()函数创建套接字…

Socket到底是什么?

学习java网络编程一段时间后,突然被问到socket是什么?回答不上来,感觉很尴尬,于是赶紧是查阅资料。 网络由下往上分为 物理层 、数据链路层 、 网络层 、 传输层 、 会话层 、 表现层 和 应用层。 通过初步了解,我知道…

什么是Socket?

一、什么是Socket? 在计算机通信领域,socket 被翻译为“套接字”(套接字主机端口号),它是计算机之间进行通信的一种约定或一种方式。通过 socket这种约定,一台计算机可以接收其他计算机的数据,也…

Socket的学习(一)什么是Socket?

本文参考的是《Socket通信原理》https://www.cnblogs.com/wangcq/p/3520400.html 一、TCP/IP UDP是什么? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集&#xff0c…

整数划分(递归方法)

最近讲到了递归,老师布置了一道经典的整数划分问题,浏览了网上很多代码,还是似懂非懂,想找张清晰地展现递归过程的图片也没有,今天想了想,自己画了一张才发现,想完整清晰地表现这个过程确实真的…

递归算法--整数划分

何为整数划分: 所谓整数划分,是指把一个正整数n写成为 其中, 为正整数,并且 ; 为n的一个划分。 如果 中的最大值不超过m,即 ,则称它属于n的一个m划分。 例如:6的划分: 6…