Fuzzing101

Fuzzing01 项目地址 :https://github.com/antonio-morales/Fuzzing101

前言

通过该项目学习如何使用 fuzz 以及如何在真实环境中使用 fuzz。

Exercise 2

由于是跟着 sakura 的课进行学习,而视频是从 Exercise 2 开始的,因此先做这个。

这是一个第三方库 libexif 的 fuzz,按照以下的六个步骤来完成 Fuzz:

  • 寻找到一个使用 libexif 库的应用程序。
  • 创建出 exif 样本的种子语料库。
  • 使用 AFL 或者 AFL++ 的编译器对 libexif 进行编译。
  • 使用语料库种子作为输入对使用 exif 库的应用程序进行 Fuzz。
  • 直到产生出一些 crashes。
  • 对 crashes 进行分类,看看其是否能构成漏洞,并构建出相应的 PoC。

在 make afl-clang-fast 的时候,这几行代码需要删去才行。然后再执行make AFL_TRACE_PC=1

image-20230321200219840

接下来就跟着项目一步步开始吧。先拉取 libexif-0.6.14,将其进行构建并安装

image-20230305165949852

然后我们注意到接下来的是执行一个 configure 文件,是一个 sh 文件,注释标明其是用来创建 Makefile 文件的。使用 CC 以及 CXX 来指明编译器路径。

image-20230305170525008

所以我们可以直接指定 CC 以及 CXX 指向的路径是 afl-clang-fast 以及 afl-clang-fast++。

image-20230320213052791

然后再执行 configure 文件,创建出 Makefile 文件,但是其用的编译器已被替换:

image-20230305173301865

检查文件是否已成功被插桩。

image-20230320214212528

因为要 fuzz 的是第三方库,本身是不可执行的文件,存在问题的可能是他的 API 内部实现有漏洞,所以我们需要一个使用了这个第三方库的应用程序来进行 fuzz,因为之前已经把 afl-clang-fast 导入到环境变量里了,所以这边直接进行编译即可插桩。

image-20230320220937736

然后如果是正常进行 fuzz,是需要自己去寻找语料种子的,种子的寻找有以下几种方案:

  • github 上进行寻找或者 google 搜索。
  • 使用其他类似功能的程序的语料
  • 使用生成器生成(感觉可以考虑 chatGPT)
  • 语料蒸馏:使用 AFL 自带的 tmin 和 cmin。

因为是第一次的学习使用,所以直接使用 fuzzing101 提供的种子进行学习。

image-20230320222126851

到这里一切都准备就绪了,可以开始把 AFL 跑起来了

1
2
3
4
5
6
sudo /home/shoucheng/fuzz/AFL/afl-fuzz -i 
HOME/fuzzing_libexif/exif-samples-master/jpg/ -o 


HOME/fuzzing_libexif/out/ -- $HOME/fuzzing_libexif/install/bin/exif @@

-i 是输入文件夹
-o 是输出文件夹
-- 分隔,后面带上需要fuzz的目标程序
@@ 表示是使用文件作为输入

用的是 AFL-fuzz,会限制文件大小不能超过 1MB

image-20230321133430416

先找出大于 1M 的样本

image-20230321133940580

使用命令 find . -size +1M -exec rm {} \; 可以直接删除大于 1M 的样本。

image-20230321164254624

然后就可以跑起来了。

image-20230321164416820

对于上面的参数,需要了解的并不需要太多,如下的即可:

  • run time:fuzzer 运行的总时长、
  • last new path:距离上一次发现新路径的间隔时间。
  • total path:总共发现的新路径数量。
  • map density:覆盖密度,如果达到 百分之六七十的话,会容易产生碰撞。可以考虑重新跑过,或者修改 map_size 的大小。

如果想要多个 fuzzer 一起运行的话,可以增加一个 -M 参数开启主从模式,如下:

1
2
3
sudo /home/shoucheng/fuzz/AFL/afl-fuzz -i 
HOME/fuzzing_libexif/exif-samples-master/jpg/ -o 


HOME/fuzzing_libexif/out/ -M fuzzer1 -- $HOME/fuzzing_libexif/install/bin/exif @@

sudo /home/shoucheng/fuzz/AFL/afl-fuzz -i HOME/fuzzing_libexif/exif-samples-master/jpg/ -o HOME/fuzzing_libexif/out/ -S fuzzer2 -- $HOME/fuzzing_libexif/install/bin/exif @@

image-20230322165422138

查看评论