模糊测试入门案例,利用AFL和Honggfuzz模糊测试Tiff

1.AFL模糊测试tiff

AFL的安装已经在前文记录过American Fuzzy Lop(AFL)的安装与简单使用,不再赘述。这里主要记录一下在使用AFL时的可以注意的点。

  • 最好选择由C或者C++编写的软件或是项目
  • 有可用的示例代码
  • 最好能自己编译插桩,Qemu模式比较慢
  • 最好有测试用例(语料库)

下面主要记录一下利用 AFL 模糊测试 tiff (一个图像处理软件) 的过程,有源码fuzz。

1.下载解压压缩包

$ wget https://download.osgeo.org/libtiff/tiff-4.3.0.tar.gz	# 下载压缩包
$ tar -zxvf tiff-4.3.0.tar.gz
$ cd tiff-4.3.0	

2.编译插桩

将编译器指定为 afl-gcc,(c++程序需要将编译器指定为afl-g++) --disable-shared 指明构建静态库,查资料显示不加这个参数构建的好像是共享库,fuzz共享库可能需要编写一个简单的demo,所以简单起见,构建静态库。

$ ./configure CC="afl-gcc" CXX="afl-g++" --disable-shared # 
$ make 	# 然后再进行编译
$ make install

3.构建语料库,即准备测试用例作为种子文件

从网上找一些图片,AFL官方也给出了测试用例,我并没有采用官方的测试用例,因为后续还试用了一下AFL对测试用例的修剪功能,但官方的测试用例只有一个图片。

$ mkdir in	# 该文件夹下存放种子用例
$ cd in
$ wget https://dev-www.libreoffice.org/corpus/tiffuzzer_seed_corpus.zip
$ unzip tiffuzzer_seed_corpus.zip

4.开始fuzz

-i 指定输入用例目录, -o 指定结果输出的目录(会自动创建)。上一步解压出来的测试用例其实是放在 ./in/minimum-set-tif 文件夹下的,但是这里命令语句里写成 ./in 它也能读到测试用例。

$ cd ..
$ afl-fuzz -i ./in -o ./out ./tools/tiff2rgba @@	# ./tools 目录下的绿色文件都可以测试

这样直接fuzz能跑起来,但是会警告有些测试用例是没用的,建议修剪。警告如下图,所以接下来修剪一下测试用例
模糊测试入门案例,利用AFL和Honggfuzz模糊测试Tiff_第1张图片

5.修剪测试用例

afl-cmin:移除执行路径相同的输入文件。 -i 输入, -o 修剪后的结果保存目录(会自动创建),修剪后input里只剩下一个文件了。

$ afl-cmin -i ./in/minimum-set-tif/ -o input -- ./tools/tiff2rgba @@	

模糊测试入门案例,利用AFL和Honggfuzz模糊测试Tiff_第2张图片
将 ./in 替换成 ./input 再跑一次就不报警告了

$ afl-fuzz -i ./input -o ./out ./tools/tiff2rgba @@	

模糊测试入门案例,利用AFL和Honggfuzz模糊测试Tiff_第3张图片

除了可以对多个文件整体进行修剪外,AFL还提供了对单个文件进行瘦身的功能,我们利用上一步精简后 input 目录下的一个文件来瘦身。
afl-tmin:减小单个输入文件的大小。需要注意的是 -i 后面跟的不能是目录,必须是文件,相应地,-o 输出出来的也是一个文件。

$ afl-tmin -i ./input/rhbz135888-1.tiff -o input_testcase -- ./tools/tiff2rgba @@	

可以看到,直接瘦身到了 0 byte
模糊测试入门案例,利用AFL和Honggfuzz模糊测试Tiff_第4张图片

2.Honggfuzz模糊测试tiff

Honggfuzz 的原理和使用整体上跟AFL很像,就不细说了。

$ wget https://download.osgeo.org/libtiff/tiff-4.3.0.tar.gz	# 下载压缩包
$ tar -zxvf tiff-4.3.0.tar.gz	# 解压
$ cd tiff-4.3.0	
$ ./configure CC="hfuzz-gcc" CXX="hfuzz-g++" # 将编译器指定为 hfuzz-gcc,(c++程序需要将编译器指定为hfuzz-g++)
$ make 	# 然后再进行编译
$ make install
$ mkdir in	# 该文件夹下存放种子用例
$ cd in
$ wget ......	# 从网上获取一些用例
$ cd ..
$ honggfuzz -s -f in -W out --./tools/tiff2rgba	# -f 指定输入用例, -W 制定结果输出的文件(会自动创建)。

如下图,开跑
模糊测试入门案例,利用AFL和Honggfuzz模糊测试Tiff_第5张图片

由于我只是想试用一下这两个模糊测试工具,并不是冲着发现漏洞去的,所以跑一会儿就手动(Ctrl+c)停止了。这两款工具好像并不会自动停止fuzz,所以何时手动终止测试也是一门学问,有时间再记录。
Fuzz其中有很多原理和机制也还没弄明白,欢迎指正和讨论。

参考文章,感谢大佬们:
https://foxglovesecurity.com/2016/03/15/fuzzing-workflows-a-fuzz-job-from-start-to-finish/
https://www.freebuf.com/articles/system/191543.html

你可能感兴趣的:(模糊测试,测试用例,网络安全,安全漏洞,bash)