模糊测试面面观 | 模糊测试工具知多少

自1988年威斯康星大学的Barton Miller首次提出模糊测试这一概念以来,模糊测试领域经历了持续长久发展。模糊测试作为一种软件测试方法,旨在通过向程序输入模糊、随机、异常的数据,探测和发现潜在的漏洞和错误。这种方法备受安全研究人员的青睐。随着时间的推移,这一领域呈现出了蓬勃发展的景象,出现了丰富多样的模糊测试工具。
根据测试的特定目标,模糊测试工具可以被划分为不同类别,包括文件格式类模糊测试工具、网络协议类模糊测试工具、操作系统类模糊测试工具、Web服务类模糊测试工具、专注于特定编程语言的模糊测试工具等等。这些不同类型的模糊测试工具为软件安全性的提升带来了创新性的贡献。它们有针对性地探索和发现软件中的漏洞和脆弱性,能够帮助安全人员更好地了解潜在的安全隐患。
模糊测试领域涌现出了众多可供选择的工具,下面将介绍一些知名的开源模糊测试工具,以便帮助读者选择最适合自己需求的工具。
文件格式类模糊测试工具
文件格式类模糊测试工具主要用于测试文件格式解析器的健壮性和安全性,它专门针对某些文件格式,例如PDF、JPEG、MP3等。通过生成不符合文件规范的随机输入数据去尝试触发目标程序中未处理的异常情况,包括缓冲区溢出、内存泄漏等错误。
01
AFL
AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。

02
WinAFL
WinAFL是AFL的Windows版本,是一款专为Windows平台设计的开源模糊测试工具。与传统的AFL不同,WinAFL使用DynamoRIO动态插桩技术来监视目标程序的执行,收集代码覆盖率信息,并依此反馈来调整输入样本。

03
libFuzzer
libFuzzer是一款由LLVM项目开发的开源模糊测试库,用于进行持续、进化的模糊测试。与AFL等其他工具不同,libFuzzer是一个针对库函数的模糊测试器,它直接与目标库函数链接,无需与外部程序进行交互。

网络协议类模糊测试工具
网络协议类模糊测试工具是一种专门用于测试网络协议实现的安全和健壮性的测试工具。通过向目标系统发送随机或半随机的、可能违反协议规范的数据包,试图去引发目标系统的异常行为,例如崩溃、内存错误、或者更严重的安全问题。
01
Peach Fuzzer
Peach之前是一个遵守MIT开源许可证的模糊测试框架,是第一款综合性的开源工具,其中创建模糊器由XML语言实现。Peach主要有3个版本,最初采用Python语言编写,发布于2004年;第二版于2007年发布;Peach 3发布于2013年初,使用C#重写了整个框架。Peach支持对文件格式、网络协议、API等进行模糊测试。Peach提供了丰富的扩展和定制功能,以适应各种不同的测试需求和场景。值得注意的是在2020年Peach被GitLab收购,不再开源。

02
Boofuzz
Boofuzz是一个开源的由Python编写的网络协议模糊测试框架,继承自Sulley。Boofuzz提供了对于网络协议进行模糊测试的规范和功能函数,以此作为基础,我们可以编写针对自己目标的Python脚本,从而可以针对特定目标量身定制模糊测试工具。

03
AFLNet
AFLNet 是一款灰盒协议模糊测试工具,采用了代码覆盖率反馈、种子变异以及状态反馈等技术。与传统的基于生成的协议模糊测试工具相比,它采用Server和 Client之间的通信消息数据作为种子,无需任何的协议规范。本质上是模拟一个Client来发送一系列消息到 Server,并保留可以触发新的代码执行路径或者响应状态的变异数据。AFLNet使用Server 端的响应码来识别消息序列触发的不同状态,根据这种反馈,AFLNet 可以尽可能向有效的状态区域靠近。

操作系统类模糊测试工具
操作系统类模糊测试工具是一种专门针对操作系统内核和相关组件进行模糊测试的工具,旨在自动发现和识别潜在的漏洞和缺陷。通过生成随机或半随机的输入,并将其送入操作系统的各个层次和接口,模糊测试工具试图触发非预期的行为。与常规的模糊测试工具不同,操作系统模糊测试工具需处理更复杂的环境和上下文,通常涉及对底层硬件、驱动、系统调用等进行模拟和测试。
01
kAFL
kAFL(Kernel AFL)是一款专注于Linux内核和其他复杂的内核组件模糊测试的工具。基于流行的AFL设计,kAFL通过自动化、持续地提供随机或半随机输入来触发潜在错误。与AFL不同,kAFL专门针对内核空间的代码进行测试,能够识别出一些用户空间模糊器难以发现的漏洞。kAFL具备虚拟化技术支持,能够在虚拟机中执行测试,从而确保测试过程的隔离和安全。它还采用了覆盖率导向的方法,自动调整输入以最大限度地探索内核代码的执行路径。

02
syzkaller
syzkaller由Google的安全团队开发和维护,是一款高效的内核模糊测试工具。它主要使用Go编程语言实现,兼容Linux、Android、FreeBSD和Windows等多种操作系统,已成功发现上千个漏洞。syzkaller通过不断生成并执行一系列随机化的系统调用,尝试去触发内核的异常行为,如崩溃、死锁或内存泄露。

Web服务类模糊测试工具
Web服务类模糊测试工具是一种专门针对Web应用程序的安全测试工具,用于自动发现潜在的Web安全漏洞。通过生成一系列随机或半随机的HTTP请求,Web模糊器能够测试Web应用程序的各个组件,如URL、表单、参数、头部等。它可以快速识别常见的安全问题,如SQL注入、跨站脚本攻击(XSS)、文件包含等安全问题。
01
WFuzz
WFuzz是用Python实现的Web应用程序安全性模糊工具和库。它基于一个简单的理念:它将给定有效负载的值替换为对关键字的任一引用。它是一款出色的辅助模糊测试工具,可以在HTTP请求中插入各种输入值,用于对不同的Web应用程序组件进行多种复杂攻击,包括参数、认证、表单、头部等等。

02
WebScarab
WebScarab是一款开源的Web应用程序安全测试工具,由OWASP开发和维护。它是一款用Java编写的代理工具,主要用于分析和审查HTTP和HTTPS通信。它包含了一个基础的模糊测试器,能够将模糊测试值注入到应用参数中。

特定编程语言的模糊测试工具
特定编程语言的模糊测试工具是专门为某种编程语言设计的工具,用于自动检测代码中的漏洞和错误。特定编程语言的模糊测试工具有更深入的语言集成和理解,可以更精确地针对特定语言特性进行测试。与其他模糊测试工具相比,这些工具通常能提供更有效的测试,更容易集成到开发工作流程中,并能发现更深入、更特定的问题。
01
go-fuzz
go-fuzz是一款针对Go语言的模糊测试工具,使用覆盖率指导技术自动寻找能触发程序异常的输入。与Go的工具链紧密集成,它可以自动发现和最小化触发漏洞的输入,有效简化漏洞诊断和修复过程。作为Go开发人员和安全工程师的重要工具,go-fuzz在许多知名Go项目中成功地发现了漏洞。

02
Kelinci
Kelinci是一款配合AFL进行Java程序模糊测试的工具,通过插桩Java字节码来分析程序覆盖率。它通过创建一个C语言接口与AFL通信,接收AFL的变异数据,并通过TCP传递给Java端的Instrumentor。Instrumentor则负责将这些数据传递给Java的原始目标程序,并将运行结果反馈给C语言接口。Kelinci与AFL共同构建了一个闭环数据流,使AFL能够间接地对Java程序进行有效的模糊测试。

03
fuzzilli
fuzzilli是Google开源的一款JavaScript的模糊测试工具,使用swift语言开发。它整合了语法变异、模板生成、覆盖引导等多种技术,使用自定义中间语言用于语法变异,再将变异后的中间语言转换成JS代码。fuzzilli在3大主流JS引擎的测试中,收获颇丰,发现了不少漏洞,

这些开源工具为安全专业人员提供了更多选择,使他们能够更有效地发现安全漏洞,进而推动整个软件安全领域向前发展。
相关文章:
模糊测试面面观 | 模糊测试工具知多少
自1988年威斯康星大学的Barton Miller首次提出模糊测试这一概念以来,模糊测试领域经历了持续长久发展。模糊测试作为一种软件测试方法,旨在通过向程序输入模糊、随机、异常的数据,探测和发现潜在的漏洞和错误。这种方法备受安全研究人员的青睐…...
esp8266+电压检测模块检测电池电压
该模块5v时输出1v,因esp8266 ADC引脚(A0)支持电压范围是0v-1v,所以该方案仅支持0-5v电压检测 接线: - 接 esp8266GND 可不接 S 接 ADC esp8266 为 A0 VCC 被检测直流电 GND 被检测直流电- #include <Wire.h>const int adcPin A0; // …...
MongoDB增删改查操作
数据库操作: 在MongoDB中,文档集合存在数据库中。 要选择使用的数据库,请在mongo shell程序中发出 use <db> 语句 // 查看有哪些数据库 show dbs;// 如果数据库不存在,则创建并切换到该数据库,存在则直接切换到…...
Python | Package | Python的三种包安装方式(pip/whl/tar.gz)
文章目录 PIP 安装与卸载Source 安装与卸载Whell 安装与卸载 PIP 安装与卸载 pip install xxx pip install xxxversion_numberpip install captcha pip install captcha0.4# XXX/anaconda3/envs/py373/lib/python3.7/site-packages pip uninstall captchaSource 安装与卸载 p…...
1. 微信小程序开发环境搭建
下载 微信的小程序开发需要使用到微信开发者工具,通过https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html可以下载 下载完成后 安装...
Redis五大基本数据类型及其使用场景
文章目录 **一 什么是NoSQL?****二 redis是什么?****三 redis五大基本类型**1 String(字符串)**应用场景** 2 List(列表)**应用场景** 3 Set(集合)4 sorted set(有序集合…...
优于立方复杂度的 Rust 中矩阵乘法
优于立方复杂度的 Rust 中矩阵乘法 迈克克维特 跟随 发表于 更好的编程 6 分钟阅读 7月 <> 143 中途:三次矩阵乘法 一、说明 几年前,我在 C 年编写了 Strassen 矩阵乘法算法的实现,最近在 Rust 中重新实现了它,因为我继续…...
CentOS gcc介绍及快速升级
1.gcc介绍 GCC(GNU Compiler Collection)是一个开源的编译器套件,由 GNU(GNUs Not Unix!的递归缩写) 项目开发和维护。它是一个功能强大且广泛使用的编译器,支持多种编程语言,包括 C、C、Objective-C、Fortran、Ada 和…...
IO多路复用中select的TCP服务器模型和poll服务模型
select的TCP服务器模型 服务器端 #include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <sys/select.h> #include <sys/time.h>#define PORT 6666 //1024~4…...
AI工程师招募;60+开发者AI工具清单;如何用AI工具读懂插件源码;开发者出海解读;斯坦福LLM课程 | ShowMeAI日报
👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 一则AI工程师招募信息:新领域需要新技能 Vision Flow (目的涌现) 是一家基于 AGI 原生技术的创业公司,是全球探…...
Mysql 使用JSON_SEARCH函数 判断多表查询时,某个拼接字段是否包含另外一个字段
场景 两个表管理查询 关联字段为A表id, B表的ids A表id是正常的整数, B的ids是id拼接成的字符类型, 格式是111,222,333这样的. A: B: id ids11 11,22,3322 33,44,5533 …...
C++头文件
C头文件 一般头文件特殊头文件windows.hbits/stdc.h 一般头文件 C头文件是一种包含预定义函数、类和变量声明的文件。它们通常用于在源代码文件中引入外部库或模块的功能。 头文件的作用是提供程序所需的声明信息,以便在源代码文件中使用这些声明。当你在源代码文…...
无脑入门pytorch系列(四)—— scatter_
本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…...
【Spring源码】Spring扩展点及顺序
Spring扩展点及顺序 01-调用BeanFactoryPostProcessor的构造器 02-调用了BeanFactoryPostProcessor的postProcessBeanFactory 03-调用了BeanPostProcessor构造器 04-调用InstantiationAwareBeanPostProcessor构造方法 05-调用了InstantiationAwareBeanPostProcessor接口的Befo…...
广州华锐互动:3D数字孪生开发编辑器助力企业高效开发数字孪生应用
3D数字孪生开发编辑器是一种新兴的技术,它可以帮助企业更好地管理和维护其物联网设备。这些工具可以帮助企业实现对设备的实时监控、故障排除和优化,从而提高生产效率和降低成本。 数字孪生系统是一种将物理世界与数字世界相结合的技术,它可以…...
【脚踢数据结构】图(纯享版)
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的…...
[leetcode] 707 设计链表
707. 设L计链表 中等 902 相关企业 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需…...
JIRA:项目管理的秘密武器
引言 在当今动态且快速变化的商业环境中,项目管理已经成为任何组织成功的关键因素。能够有效地管理项目,保证项目在设定的时间和预算内按照预期的质量完成,是每个项目经理的目标。为了实现这个目标,项目经理需要依赖强大的工具&a…...
ARM 作业1
一、思维导图 二、 1. 2. .text 文本段 .globl _start 声明_start:mov r0,#0mov r1,#0fun:cmp r1,#100bhi stopadd r0,r0,r1add r1,r1,#1b fun stop:b stop .end...
【解析postman工具的使用---基础篇】
postman前端请求详解 主界面1.常见类型的接口请求1.1 查询参数的接口请求1.1.1 什么是查询参数?1.1.2 postman如何请求 1.2 ❤表单类型的接口请求1.2.1 复习下http请求1.2.2❤ 什么是表单 1.3 上传文件的表单请求1.4❤ json类型的接口请求 2. 响应接口数据分析2.1 postman的响…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
