Peach Fuzzer漏洞挖掘实战

这篇具有很好参考价值的文章主要介绍了Peach Fuzzer漏洞挖掘实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

本文主要介绍模糊测试技术,开源模糊测试框架Peach Fuzzer,最后使用Peach Fuzzer对Modbus Slave软件进行漏洞挖掘,并成功挖掘到0DAY漏洞。(文中涉及的漏洞已提交到国家漏洞库,现已修复)

模糊测试技术

模糊测试(Fuzz Testing)是一种黑盒测试技术,它通过自动生成一些随机、半随机或者经过分析的数据输入到程序中,来发现潜在的漏洞和错误。具体来说,模糊测试会将大量的随机数据输入到被测程序中,然后观察程序的行为,如果程序崩溃或出现异常,则说明发现了一个漏洞。模糊测试常常应用于网络协议、文件格式、解析器等需要接收输入数据并对其进行处理的软件系统。

在模糊测试中,测试用例通常是自动生成的,并尽量使其包含各种可能性的边界情况,例如最大值、最小值、非法输入、异常字符等。同时,模糊测试还可以根据具体的测试目标进行一些特定的配置,比如设置特定协议数据包的有效负载长度、使用不同的编码方式、调整模糊测试引擎的参数等。

模糊测试可以使用各种工具和框架来实现,例如American Fuzzy Lop(AFL)、Peach Fuzzer、Spike等。这些工具可以自动化生成测试用例并执行测试,同时还能够记录测试过程中产生的信息,帮助开发人员更快地定位问题。在实际应用中,模糊测试通常与其他测试技术(如静态分析、符号执行等)结合使用,以提高软件的质量和安全性。

Peach Fuzzer框架

Peach Fuzzer是一款基于模型的模糊测试工具,旨在帮助测试人员发现和利用软件程序中的漏洞和缺陷。它使用一种基于模型的方法,通过分析目标系统的协议、数据格式和行为规则来生成有效的测试用例。

Peach Fuzzer具有以下特点:

高度可定制性:

提供了一个高度可定制的框架,可以轻松地扩展和定制测试用例生成和数据分析功能,以满足各种测试需求。

模型驱动的测试:

测试过程是基于目标系统的数据模型进行的。通过对目标系统进行分析和建模,可以自动生成有效的测试用例,以验证系统的行为和规则。

多协议支持:

支持多种协议和数据格式,包括HTTP、FTP、SMTP、XML和JSON等,可以用于测试各种类型的应用程序和系统。

多平台支持:

支持多种操作系统和开发平台,包括Windows、Linux、macOS和Android等。

Peach Fuzzer框架的体系结构可以简化如下:

peach fuzz测试,单元测试

数据模型:表示输入和输出所需要的数据结构。

变异器:使用不同的变异策略,对数据执行变异。

生成器:生成字符串数据、整型数值等简单类型的数据,还可以生成复杂的分层的二进制数据,甚至是将简单的数据使用生成器拼接起来生成更复杂的数据类型的数据。

状态模型:在每个测试用例中,用户根据状态模型配置初始有限状态机,并进行维护。

代理:与测试引擎进行通信,对被测目标进行状态监视并对其进行执行控制。

测试引擎:使用解析器对pit配置文件进行解析,根据配置文件创建相应的组件并初始化,然后进入执行测试用例的主循环。

Peach Fuzzer使用方法

使用Peach Fuzzer进行模糊测试,最关键的是编写Pit配置文件。Pit文件是Peach Fuzzer测试用例生成器的核心配置文件,它是一种XML文件,包含多个元素,这些元素描述了测试用例生成器的数据模型、数据类型、范围、约束和默认值等信息。

Peach Pit文件通常包含以下几个部分:

Peach元素:定义Peach Pit文件的根元素。

DataModel元素:定义测试用例生成器的数据模型。数据模型由多个数据元素组成,每个数据元素表示一个测试用例的输入参数。

数据元素:定义测试用例输入参数的数据类型、范围、约束和默认值。数据元素可以是基本类型,例如整数、字符串和布尔值,也可以是复杂类型,例如结构体、数组和枚举类型。

StateModel元素:定义测试用例生成器的状态机模型。状态机模型描述了测试用例生成器的行为,例如测试用例的生成顺序、条件和转换等。

Action元素:定义测试用例生成器的动作。动作可以是发送网络数据包、写入文件、运行外部程序等。

Agent元素:定义测试用例生成器的代理。代理可以是客户端或服务器端,用于模拟测试用例的执行环境。

一个简单的Pit配置文件如下图所示:

peach fuzz测试,单元测试

Peach Fuzzer实战

Pit文件的编写至关重要,更多使用方法可以参考官方文档。现在,从编写简单Pit文件开始,以实际应用程序作为测试目标,熟悉和理解Pit文件的基本结构和参数配置,最后挖掘到0DAY漏洞。

首先,准备如下程序:

Peach Fuzzer程序:可从公开的源代码编译Peach Fuzzer,为简单起见,这里直接使用其他人编译后的Windows系统可执行程序Peach-3.1.124-win-x86-release。

目标程序:ModbusSlaveSetup32Bit.exe,Windows系统modbus工控协议从站模拟程序,曾被发现过漏洞。

调试器:使用Windows系统的Windbg调试程序,用于捕获模糊测试过程中的异常。

接下来安装并运行目标程序,Modbus Slave版本为7.5.1,如下图所示:

peach fuzz测试,单元测试

简单使用Modbus Slave程序,寻找可以模糊测试的功能点。在“File”菜单下的“Open”功能可以打开mbs后缀的文件。所以此次以mbs文件作为模糊测试的输入,编写Pit文件进行漏洞挖掘。

由于目前还不知道mbs文件的文件格式,所以在编写Pit文件定义数据模型时(DataModel)时,将其整个文件的内容作为模糊测时的变异数据。

定义数据模型的代码如下图所示:

peach fuzz测试,单元测试

其中Blob 元素常常用于代表缺少类型定义或格式的数据,hex表示内容为十六进制,value为空。

接下来定义状态模型,如下图所示:

peach fuzz测试,单元测试

其中Action元素中的filename的值是测试用例文件sample.mbs,这是一个空文件,需要在Peach.exe同目录下建立,StartModbusSlave是定义的调用方法。

然后再定义代理,如下图所示:

peach fuzz测试,单元测试

其中Monitor元素的class类型为WindowsDebugger,紧接着在参数WinDbgPath的Value中指定Windbg的目录(注意是文件夹),然后在CommandLine参数中指定运行目标程序打开变异后的测试用例的方法,最后在StartOnCall参数中指定调用StartModbusSlave方法。

最后定义Test元素,启动模糊测试,如下图所示:

peach fuzz测试,单元测试

其中状态模型(StateModel)元素的ref内容是之前定义的状态模型名称,Publisher元素的FileName内容是每次数据变异后保存的文件名,Logger元素的Path参数是配置的日志文件保存目录。

到此,一个针对mbs文件的模糊测试pit文件就完成了。最后执行命令Peach.exe C:\fuzz\mbslave_mbs_pit.xml,启动模糊测试,如下图所示:

peach fuzz测试,单元测试

从模糊测试启动成功后,偶尔显示“File version error. Please upgrade to a newer version of Modbus Slave”对话框,如下图所示:

peach fuzz测试,单元测试

说明Modbus Slave软件在打开mbs后缀的文件时会检测文件版本,也就是说变异后的mbs文件版本不符合标准的mbs文件格式,导致模糊测试过程提前结束。

那么需要找到正确的文件版本,再调整数据模型(DataModel)的定义。使用反编译工具IDA打开mbslave.exe,根据字符串“File version error. Please upgrade to a newer version of Modbus Slave”找到对应的检查代码,如下图所示:

peach fuzz测试,单元测试

可以看到,确实检查了文件版本。经逆向分析,版本数据在mbs文件的前4个字节。此处选用最小的版本0xFA0进行测试,修改数据模型(DataModel)的配置,让其前4个字节固定为“A0 0F 00 00”,不参与数据变异,这样就可以通过版本检查代码。修改后的数据模型配置,如下图所示:

peach fuzz测试,单元测试

然后将sample.mbs的前4个字节也修改为“A0 0F 00 00”,如下图所示:

最后执行命令Peach.exe C:\fuzz\mbslave_mbs_pit.xml,启动模糊测试,很快就捕获到了多个异常,如下图所示:

进入logs目录,找到EXPLOITABLE相关的文件夹,其下存放的1.Initial.Action.bin的文件就是漏洞触发的mbs文件,如下图所示:

peach fuzz测试,单元测试
peach fuzz测试,单元测试

根据调试器的日志文件,可以看到EIP寄存器已被定义为0x994a4f1d,这是一个不存在的地址,导致了异常,如下图所示:

peach fuzz测试,单元测试

至此,成功挖掘到一个0day漏洞。后经逆向分析,这是一个缓冲区溢出漏洞,感兴趣的读者可以自行调试。

项目地址

https://github.com/webraybtl/PeachFuzzer

概述

https://bbs.kanxue.com/thread-270106-1.htm

https://github.com/TideSec/Peach_Fuzzing

https://www.freebuf.com/articles/ic文章来源地址https://www.toymoban.com/news/detail-770826.html

到了这里,关于Peach Fuzzer漏洞挖掘实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实战SRC漏洞挖掘全过程,流程详细【网络安全】

    记录一次完整的某SRC漏洞挖掘实战,为期一个多星期。文章有点长,请耐心看完,记录了完整的SRC漏洞挖掘实战 因为选择的幸运儿没有对测试范围进行规划,所以此次范围就是没有范围。 先上主域名看一眼,看看能收集到什么有效信息: 发现存在搜索框: 测试点+1 对页面

    2024年02月10日
    浏览(75)
  • 实战红队挖掘漏洞---用友时空KSOA v9.0版本ImageUpload任意文件上传漏洞+getshell

    前言,本次笔记是记录在工作中的打红队时挖到的用友时空KSOA任意文件上传漏洞。 emmm,怎么说呢,就是又在一次加班码到晚上十点的时候,挖掘到了一个用友时空ksoa v9.0文件上传漏洞。 大家先看看长什么样吧,大概就这样!版本这么明目张胆的就展现在我面前,不找一下这

    2024年02月08日
    浏览(47)
  • Go Fuzzing:发现你未曾发现的漏洞

    go fuzz文档 对于软件开发者而言,一项重要的任务就是确保程序的安全性。而其中一种风险就是软件中可能存在的漏洞。传统的测试方法往往需要耗费大量的时间和人力,而使用Fuzzing技术则可在短时间内大规模发现潜在的漏洞。 那什么是Fuzzing技术呢?简单说,它就是让程序

    2024年02月01日
    浏览(26)
  • 使用Burp Suite和Python进行自动化漏洞挖掘—SQL测试注入插件

    每次测注入都是用burp的Intruder模块,很不方便就是批量跑批量测哪些没有过滤 懒人鹅上线,准备搞一个sql测试的插件 本篇文章代码量大,基础可以去看上一篇 测试sql基本注入的载荷,在可能有sql注入的地方发送测试包,目前只测试url中的,并可以根据错误回显判断出数据库

    2024年02月09日
    浏览(42)
  • 单元测试实战(一)Controller 的测试

    为鼓励单元测试,特分门别类示例各种组件的测试代码并进行解说,供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战(一)Controller 的测试 单元测试实战(二)Service 的测试    单元测试实战(三)JPA 的测试     单元测试实战(四)MyBatis-Plus 的测试 单元测试实

    2024年02月04日
    浏览(72)
  • 单元测试实战(二)Service 的测试

    为鼓励单元测试,特分门别类示例各种组件的测试代码并进行解说,供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战(一)Controller 的测试 单元测试实战(二)Service 的测试 单元测试实战(三)JPA 的测试     单元测试实战(四)MyBatis-Plus 的测试 单元测试实战(

    2024年02月04日
    浏览(33)
  • pytest单元测试实战

    1、pytest 简介 pytest 是 python 的一种单元测试框架,与 python 自带的 unittest 测试框架类似,但是比 unittest 框架使用起来更简洁,效率更高。 根据 pytest 的官方网站介绍,它具有如下特点: 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考。 能够支持简单的单元

    2024年01月16日
    浏览(54)
  • 单元测试实战

    测试代码 :通过编写和运行单元测试,开发者能够快速验证代码的各个部分是否按照预期工作,有利于保证系统功能的正确可用,这是单元测试的核心作用。 改进代码 :编写单元测试的过程中,开发者能够再次审视业务流程和功能的实现,更容易发现一些代码上的问题。比

    2024年02月03日
    浏览(36)
  • Netty实战(九)单元测试

    单元测试的基本思想是:以尽可能小的区块测试代码,并且尽可能地和其他的代码模块以及运行时的依赖(如数据库和网络)相隔离。如果应用程序能通过测试验证每个单元本身都能够正常地工作,那么在出了问题时将可以更加容易地找出根本原因。 ChannelHandler 是 Netty 应用

    2024年02月11日
    浏览(33)
  • 现代C++编程实战25-两个单元测试库:C++里如何进行单元测试

    你好,我是吴咏炜。 单元测试已经越来越成为程序员工作密不可分的一部分了。在 C++ 里,我们当然也是可以很方便地进行单元测试的。今天,我就来介绍两个单元测试库:一个是 Boost.Test [1],一个是 Catch2 [2]。 单元测试库有很多,我选择 Boost 的原因我在上一讲已经说过:“

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包