FUZZ工具—Boofuzz框架

news/2024/11/30 2:36:34/

Boofuzz介绍

官方文档

https://github.com/jtpereyda/boofuzz

FUZZ案例脚本

boofuzz/examples at master · jtpereyda/boofuzz · GitHub

boofuzz/request_definitions at master · jtpereyda/boofuzz · GitHub

api文档

boofuzz: Network Protocol Fuzzing for Humans — boofuzz 0.4.1 documentation

Boofuzz是一个基于著名的Sulley模糊测试框架的分支和继承者。除了修复了许多bug,Boofuzz还致力于扩展性。其目标是:fuzz everything。

关于Sulley

https://github.com/Bit9/sulley

Sulley 是一款开源模糊测试工具的佼佼者,但是已经不再维护了。

Boofuzz特点

和 Sulley 一样,boofuzz 包含了所有关键的模糊测试元素:

  • 易于快速生成数据。
  • 插桩 - 即故障检测。
  • 故障后目标重置。
  • 记录测试数据。

与 Sulley 不同,boofuzz 还具有:

  • 在线文档。
  • 支持任意通信介质。
  • 内置支持串行模糊测试、以太网和 IP 层、UDP 广播。
  • 更好的测试数据记录 - 一致、全面、清晰。
  • 测试结果 CSV 导出。
  • 可扩展的插桩/故障检测。
  • 安装体验更加简单!
  • 错误更少。

Boofuzz安装

Windows安装

git clone https://github.com/jtpereyda/boofuzz.git
cd boofuzz
pip install .

其他系统安装方式参考官方文档:Installing boofuzz — boofuzz 0.4.1 documentation

Boofuzz使用

Boofuzz API

Session — boofuzz 0.4.1 documentation

api模块

  • Session
  • Target
  • Connections
  • Monitors
  • Logging
  • Protocol Definition

由于官方API文档对此的描述非常详细,一般是需要的时候再来找对应的api使用即可,鉴于刚开始使用过于繁杂,我们拿一个官方提供的脚本来解析对应的基础功能来快速入门。

下面一个是通过对FTP协议的默认端口进行FUZZ的脚本;

#!/usr/bin/env python3
"""Demo FTP fuzzer as a standalone script."""from boofuzz import *def main():"""This example is a very simple FTP fuzzer. It uses no process monitory(procmon) and assumes that the FTP server is already running."""session = Session(target=Target(connection=TCPSocketConnection("127.0.0.1", 21)))define_proto(session=session)session.fuzz()def define_proto(session):# disable Black formatting to keep custom indentation# fmt: offuser = Request("user", children=(String(name="key", default_value="USER"),Delim(name="space", default_value=" "),String(name="val", default_value="anonymous"),Static(name="end", default_value="\r\n"),))passw = Request("pass", children=(String(name="key", default_value="PASS"),Delim(name="space", default_value=" "),String(name="val", default_value="james"),Static(name="end", default_value="\r\n"),))stor = Request("stor", children=(String(name="key", default_value="STOR"),Delim(name="space", default_value=" "),String(name="val", default_value="AAAA"),Static(name="end", default_value="\r\n"),))retr = Request("retr", children=(String(name="key", default_value="RETR"),Delim(name="space", default_value=" "),String(name="val", default_value="AAAA"),Static(name="end", default_value="\r\n"),))# fmt: onsession.connect(user)session.connect(user, passw)session.connect(passw, stor)session.connect(passw, retr)def define_proto_static(session):"""Same protocol, using the static definition style."""s_initialize("user")s_string("USER")s_delim(" ")s_string("anonymous")s_static("\r\n")s_initialize("pass")s_string("PASS")s_delim(" ")s_string("james")s_static("\r\n")s_initialize("stor")s_string("STOR")s_delim(" ")s_string("AAAA")s_static("\r\n")s_initialize("retr")s_string("RETR")s_delim(" ")s_string("AAAA")s_static("\r\n")session.connect(s_get("user"))session.connect(s_get("user"), s_get("pass"))session.connect(s_get("pass"), s_get("stor"))session.connect(s_get("pass"), s_get("retr"))if __name__ == "__main__":main()

BooFuzz快速指引

实例化Session对象

Session对象是模糊测试会话的中心。创建Session对象时,需要传递一个Target对象,该对象本身将接收一个Connection对象。例如:

session = Session(target=Target(connection=TCPSocketConnection("127.0.0.1", 80)),)

连接对象实现 ITargetConnection。可用选项包括:

  • TCPSocketConnection
  • UDPSocketConnection
  • SSLSocketConnection
  • RawL2SocketConnection
  • RawL3SocketConnection
  • SocketConnection (depreciated)
  • SerialConnection

每一个都有对应的协议,具体用法可以参考官方说明;

有了Session对象后,接下来需要定义协议中的消息;

定义消息(Request)

user = Request("user", children=(String(name="key", default_value="USER"),Delim(name="space", default_value=" "),String(name="val", default_value="anonymous"),Static(name="end", default_value="\r\n"),))passw = Request("pass", children=(String(name="key", default_value="PASS"),Delim(name="space", default_value=" "),String(name="val", default_value="james"),Static(name="end", default_value="\r\n"),))stor = Request("stor", children=(String(name="key", default_value="STOR"),Delim(name="space", default_value=" "),String(name="val", default_value="AAAA"),Static(name="end", default_value="\r\n"),))retr = Request("retr", children=(String(name="key", default_value="RETR"),Delim(name="space", default_value=" "),String(name="val", default_value="AAAA"),Static(name="end", default_value="\r\n"),))
"""
这里的代码是跟上面一样的作用,只是换一种取值方式
"""
#s_initialize 初始化一个新的块请求。此调用后生成的所有块/原语都适用于命名请求。s_initialize("user")
#s_string 将字符串压入当前块堆栈。s_string("USER")
#s_delim 将分隔符压入当前块堆栈。s_delim(" ")s_string("anonymous")
#s_static 将静态值压入当前块堆栈。s_static("\r\n")

一旦定义了信息,将使用刚刚创建的Session对象将它们连接成一个图形:

#s_get 返回具有指定名称的请求,如果未指定名称,则返回当前请求。使用它可以从全局函数样式请求操作切换到直接对象操作。session.connect(s_get("user"))session.connect(s_get("user"), s_get("pass"))session.connect(s_get("pass"), s_get("stor"))session.connect(s_get("pass"), s_get("retr"))

根据上面构建的顺序,当模糊化时,boofuzz将在模糊化passw之前发送user,在模糊化stor或retr之前发送user和passw。

Fuzz

通过下面代码既可以开始模糊测试;

session.fuzz()

查看结果

注意,此时你只有一个非常基本的模糊测试器。如何让它更加强大取决于你。存储每次运行的日志数据将保存在当前工作目录中的boofuzz-results目录中的SQLite数据库中。你可以随时使用这些数据库重新打开Web界面。

$ boo open <run-*.db>

官方提供了很多案例模板,且网上关于boofuzz的使用介绍很多,也比较成熟,在各个领域都有,可以通过官方提供的案例也看得出来,然后覆盖的面也非常的全,目前也就只有ble、zigbee这种无线电通信协议的覆盖不了。

参考

初探BooFuzz - 先知社区

IoT 设备网络协议模糊测试工具boofuzz实战_江下枫的博客-CSDN博客


http://www.ppmy.cn/news/567786.html

相关文章

智能井盖传感器:以科技破解城市顽疾

在城市的道路网络中&#xff0c;井盖扮演着重要的角色&#xff0c;用于覆盖下方的管道和设施&#xff0c;然而&#xff0c;由于井盖的老化、损坏或被盗&#xff0c;常常会导致安全问题的发生&#xff0c;如路面塌陷、行人受伤等。井盖的状态监测和维护一直是城市管理者面临的挑…

全志科技T507-H工业核心板规格书(4核ARM Cortex-A53,主频1.416GHz)

1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板&#xff0c;主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案&#xff0c;国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…

穿越火线找回装备服务器,装备丢失也不怕 CF手游遗失分解装备找回攻略

CF手游在继承端游的同时也进行了突破和创新。首先&#xff0c;游戏采用双摇杆操作方式&#xff0c;左手控制角色移动&#xff0c;右手控制瞄准和射击&#xff0c;精准的摇杆移动能够让玩家快速上手。同时&#xff0c;手游采用了次世代引擎&#xff0c;画面质感达到了枪战手游的…

ftp怎么用计算机打开 不用浏览器打开,win7 访问ftp站点 不用浏览器显示

1.先在IE高级选项里勾上,启用ftp文件夹视图,IE9是写法不一样,但是人就看得懂,勾上就行了然后在IE中(如果是IE9,请按Alt键先弹出菜单栏,"查看"->"工具栏"->.勾上"命令栏")在命令栏点“页面”-“在Windows资源管理器中打开”&#xff0c;但立…

玩穿越火线中途计算机黑屏,cf不能全屏两边黑黑的如何解决

cf是款很受玩家们喜爱的大型网络游戏&#xff0c;但是在游戏的时候&#xff0c;可能大多数小伙伴会遇到这样一个情况&#xff0c;就是cf不能全屏玩耍&#xff0c;电脑两边会黑黑的&#xff0c;那么遇到玩cf电脑两边黑屏怎么办呢&#xff1f;我们可以通过修改注册表键值来解决&a…

复制链接到safari浏览器打开_3种方法导入书签到Safari浏览器

您知道电脑硬盘是如何读取和存储数据的吗&#xff1f;恢复软件是如何找回数据的吗&#xff1f;通过这个视频教程&#xff0c;你将了解你丢失的数据是否还在&#xff0c;这些文件能否找回。 请点击 - 》》》》 观看视频 如何安全找回丢失数据的方法 1. 下载并安装B计划数据恢复软…

浏览器复制粘贴以及手机端webview复制粘贴

一、浏览器赋值粘贴 1、document.execCommand 这部分参考文档&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web/API/Document/execCommand 咱们再浏览器中使用的复制大部分都是用的这个原理 2、例子&#xff1a; //这是一个点击方法&#xff0c;放到复制按钮上…

大数据应用——工程实践III

任务一&#xff1a;完成Hadoop集群部署前环境的准备工作 1.1 虚拟机环境准备 1. 安装虚拟机 2. 克隆虚拟机 3. 修改网络配置 4. 修改主机名和映射 5. 关闭防火墙 1.2 安装JDK 1.3 安装Hadoop 1.4 集群配置 1. 编写集群分发脚本xsync 2. 集群部署规划 表 1.1 hadoop101 …