用户
搜索

该用户从未签到

i春秋-呆萌菜鸟

Rank: 1

1

主题

2

帖子

30

魔法币
收听
0
粉丝
0
注册时间
2017-11-30
发表于 2019-10-30 19:44:51 0336
桃子简介
桃子是一款用于模糊二进制协议的软件,原先的版本是使用 Python 脚本语言编写,之后的 Peach3 则是用 C# 进行了重写,可能是嫌速度不够快吧。桃子模糊器的测试流程与一般的模糊测试工具是差不多,都是通过变异软件的输入来寻找 Bug,与最新的模糊测试工具原理不同的是,它是基于文件格式产生的变异数据,而非代码覆盖率指导。至于功能方面,桃子模糊器不仅能对文件协议进行模糊测试,还能对网络协议进行模糊测试,模糊测试过程中产生的 Crash 信息,桃子也可以做到详细的分类,这是我比较喜欢的。

下载.jpg

- 官网:https://www.peach.tech/
- 文档:http://community.peachfuzzer.com/v3/String.html
- 桃坑:https://www.peach.tech/products/peach-fuzzer/peach-pits/

以 BMP 文件格式为例
BMP 文件格式比较简单,而且能被绝大部分图片查看软件所识别,以它为例子再好不过了。查阅相关资料后发现一个完整的 BMP 文件包括位图文件头、位图信息头、调色板和图像数据。
Image 1.png

下面针对位图文件头和位图信息头来编写 Pit 文件吧。这里用到了模板中现成的 Pit 文件,一个是 samples\HelloWorld.xml,另一个是 samples\FileFuzzer.xml。其实可以编写完整的 Pit 文件的,我比较懒,所以修改自带的。首先配置 HelloWorld.xml 文件,修改其发布者,使其以 16 进制的形式输出到命令行中,目的是调试编写的 Pit 文件。
Image 2.png

然后对 FileFuzzer.xml 文件进行修改,修改其监控器和发布者。
Image 3.png

Image 4.png

修改完之后就可以在 HelloWorld.xml 中编写数据模型了,首先是位图文件头 BITMAPFILEHEADER bmfh。
Image 5.png

[XML] 纯文本查看 复制代码
<DataModel name="bmfh">

	<String name="bfType" value="BM" token="true" />

	<Number name="bfSize" value="181530" size="32" />

	<Number name="bfReserved1" value="0" size="16" />

	<Number name="bfReserved2" value="0" size="16" />

	<Number name="bfOffBits" value="54" size="32" />

</DataModel>


- 其次是位图信息头 BITMAPFILEHEADER bmih。
Image 6.png

[XML] 纯文本查看 复制代码
<DataModel name="bmih" >

	<Number name="biSize" value="40" size="32" />

	<Number name="biWidth" value="213" size="32" />

	<Number name="biHeight" value="213" size="32" />

	<Number name="biPlanes" value="1" size="16" />

	<Number name="biBitCount" value="32" size="16" />

	<Number name="biCompression" value="0" size="32" />

	<Number name="biSizeTmage" value="0" size="32" />

	<Number name="biXPelsPerMeter" value="5906" size="32" />

	<Number name="biYPelsPerMeter" value="5906" size="32" />

	<Number name="biClrUsed" value="0" size="32" />

	<Number name="biClrImportant" value="0" size="32" />

</DataModel>


将两个数据模型结合起来。

[XML] 纯文本查看 复制代码
<DataModel name="bmfh">

	<String name="bfType" value="BM" token="true" />

	<Number name="bfSize" value="181530" size="32" />

	<Number name="bfReserved1" value="0" size="16" />

	<Number name="bfReserved2" value="0" size="16" />

	<Number name="bfOffBits" value="54" size="32" />

</DataModel>



<DataModel name="bmih" >

	<Number name="biSize" value="40" size="32" />

	<Number name="biWidth" value="213" size="32" />

	<Number name="biHeight" value="213" size="32" />

	<Number name="biPlanes" value="1" size="16" />

	<Number name="biBitCount" value="32" size="16" />

	<Number name="biCompression" value="0" size="32" />

	<Number name="biSizeTmage" value="0" size="32" />

	<Number name="biXPelsPerMeter" value="5906" size="32" />

	<Number name="biYPelsPerMeter" value="5906" size="32" />

	<Number name="biClrUsed" value="0" size="32" />

	<Number name="biClrImportant" value="0" size="32" />

</DataModel>



<!-- Create a simple data template containing a single string -->

<DataModel name="TheDataModel">

	<!--<String value="Hello World!" />-->

	<Block ref="bmfh" />

	<Block ref="bmih" />

</DataModel>


使用命令行输出调试一下,对比后发现并没有什么问题。
[C++] 纯文本查看 复制代码
E:\peach3_x64> Peach.exe samples\HelloWorld.xml -1 // -1 表示迭代一次

Image 9.png

最后将数据模型拷贝到 FileFuzzer.xml 中,用来替代之前的数据模型。最后就可以开始模糊了。
Image 10.png

Image 11.png

如下图所示可以看出桃子模糊器正在对每一个数据模型中的数据结构进行变异。
Image 12.png

当发现了第一个 Bug 时停止测试,详细信息记录在日志文件夹中。
Image 14.png

Image 15.png

在日志文件中可以看出分类后的崩溃信息,.bin 文件表示崩溃时的样本。
Image 16.png

修改为 .bmp 文件并拖入看图软件,如图所示发生了 Crash,几秒之后被系统捕捉到。
Image 17.png

样本信息如下图所示。
Image 18.png

使用 Peach 进行模糊测试的好处就是不需要对软件进行太多的逆向工程操作,只需要了解其部分的格式信息即可,如果有未知的格式还可以用 <Blob> 代替,真是太方便了。

小白文章,大佬勿喷












Image 8.png
Image 7.png
发新帖
您需要登录后才可以回帖 登录 | 立即注册