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

article/2025/10/7 18:10:49

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

1.Sulley现在的情况

    先说说现在的开发者情况,在github上目前的watch数量为118,star数量为894,fork数量为270,看来用的人还挺多的,不过一看它更新频率还是挺慢的,之前读了它的官方文档,作者说还有很多东西将来会引入,不过这几年缺没怎么管,哈哈,不过这也不能改变它好用的事实。
    同时值得注意的一个事项是,Sulley上面有一个分支boofuzz,它的热度也很高,它的目标是可拓展性和fuzzing everything,还有很多特性,有机会的话,我们也会介绍一下它。

2.一些名词

    一些常见的术语如下:

名词含义
host主机主动发起fuzzing请求的主机
target主机被测试的主机,fuzzing的目标
Agents代理主要作用是监控,监控target,获取流量什么的
request请求也就是发送的数据包,一个数据报文一个request
session会话几个数据包组成的图,相当于有状态的协议的状态图

3.整体框架图和4大组件

    整体框架图如下图1:

sulley框架图

图1. sulley框架图

    是不是被这图迷晕了头脑,没关系,我们一个一个模块来解读这个图

3.1 数据生成模块

    数据生成模块的结构如下图2:

sulley数据生成模块

图2. sulley数据生成模块

值得注意的是,sulley的数据生成方式是基于生成(generation-based)的方式,我们需要对协议或者文件进行建模

  • 一个数据报文由基元(Primitives)、块(Blocks组成)
  • 多个基元可以组成块,块可以相互嵌套
  • 在基元的基础上我们可以创建自定义的特殊的复杂基元(Legos,数据积木,暂且这么翻译吧),例如Email的地址,IP地址等。
  • 最后还有一些有用的工具,例如算length长度、校验和、加密模块等

3.2 session管理模块

    session会话管理模块的结构下图3:

session管理模块

图3. session管理模块

    当我们构建好一个一个Resquest以后,怎么把这些Request组成在一起构成状态机呢?这就需要我们应用Pgraph这个Python graph构建库来绘制了,Pgraph可以可以创建、修改和渲染graph。让我们简单地来看一个的例子,如图4:

session example

图4. session样例

    可以看出,每个节点都连接起来,组成一幅有状态的图,我们可以在图里的每个节点进行操作,同时也可以定义一些callback回调函数,是不是很像协议里面的状态机(如果协议是有状态的话),在下一章我们会再次回顾这个例子,先在此打住。

3.3 Agents代理模块

    Agents代理模块的结构如下图5:

Agents代理模块

图5. Agents代理模块

    Agents代理模块主要是用来监测的,常见有三个字模块:VMControl、Netmon和Procmon。

  • VMControl子模块:用来控制虚拟机,一种常见的用法是把Target目标放在虚拟机中,使用这个子模块来控制虚拟机的启动、关闭、创建快照等,最重要的功能是能在目标出现崩溃的时候恢复主机的状态。
  • Netmon子模块:监视网络流量,并把PCAP文件保存到磁盘中,捕捉的双向流量
  • Procmon子模块:使用Sulley的团队的另一个项目,windows下调试器PyDbg来记录程序崩溃错误和监控程序状态,同时会把错误编录到一个"crash_bin“文件中。

3.4 Utilities一些工具

    这些独立的工具主要是处理各种各样任务,结构如下图6:

Utilities工具

图6. Utilities工具
  • crashbin_explorer:查看引起错误的每一个测试用例,展示每个错误发生的地址,错误的堆栈追踪并把它画在一个图上
  • 其余的模块暂时不会讲,等用到的时候再讲吧

4.本章总结

    Sulley最主要的就是4大模块,协议构建的过程是先进行数据报文建模,然后再连接每一个数据报文组成状态机,至于其他的模块是辅助fuzzing,来让用户更好地了解fuzzing的状态。
    本章的内容有点难懂,最好的方式是通过编码的形式来了解Sulley,没关系,大家可以在之后的章节中回顾这些内容。


http://chatgpt.dhexx.cn/article/5KhZVsal.shtml

相关文章

模糊测试工具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…

递归实现整数划分

递归思想 递归是算法设计中的一种基本而重要的算法。递归方法通过函数调用自身将问题转化为本质相同但规模较小的子问题,是分治策略的具体体现。 不多废话,直接上故事 ->从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故…

复杂的整数划分

复杂的整数划分 又到了动态规划的时间了! 记得我之前讲过的三要素哦 下面这一条题目其实思路并不是非常的难,但是在细节处理上要非常仔细,而且它有3个相互独立的动态规划问题。 总时间限制: 200ms 内存限制: 65536kB 描述 将正整数n 表…

整数划分(DP)

一个正整数 n 可以表示成若干个正整数之和,形如:nn1n2…nk,其中 n1≥n2≥…≥nk,k≥1。 我们将这样的一种表示称为正整数 n 的一种划分。 现在给定一个正整数 n,请你求出 n 共有多少种不同的划分方法。 输入格式 共一行&#x…