实验 3 基于 AFL 的模糊测试
3.1 实验名称
《基于 AFL 的模糊测试》
3.2 实验目
1 、熟悉模糊测试方法
2 、熟悉模糊测试工具 AFL 的使用
3.3 实验步骤及内容
1 、 安装 AFL
![](https://i-blog.csdnimg.cn/blog_migrate/2e356af049540fe9d0c6018ab114981e.png)
2 、 任意选择一个有源代码的样本
这里采用教材上一个包含栈溢出漏洞的样本。
![](https://i-blog.csdnimg.cn/blog_migrate/dc45686a9f7147b22ca30a834e34b7b0.png)
3 、 结合源代码分析用 AFL 进行模糊测试后的结果,将主要步骤和分析结果记录到实验报告中,可截图说明。
首先是用 afl-gcc 编译并插桩。
![](https://i-blog.csdnimg.cn/blog_migrate/cb23af0e5220055a7b6907aa3a8fbd17.png)
接着是用 afl-fuzz 进行模糊测试。
![](https://i-blog.csdnimg.cn/blog_migrate/849b72ed45f9313e6b8c65cc7e0cfa4b.png)
在 cycles done 变成绿色之后可以停止。可以看到检测出了两条路径和一个 crash
![](https://i-blog.csdnimg.cn/blog_migrate/442c5d18b3a13ee2da0080635b2e2776.png)
crashes 存储了导致崩溃或异常的测试用例,queue 存储了不同路径的测试用例,plot_data 是对测试结果的可视化。
![](https://i-blog.csdnimg.cn/blog_migrate/6527add3f7433a7598692731686e1093.png)
进入 crashes 目录,使用xxd 可以看到导致崩溃的测试用例。显然这里是因为数组越界导致的溢出。
3.4 实验关键过程及其分析
在使用 afl 模糊测试时,crashes 目录会记录导致崩溃的输入。如果积累的 crashes 足够多,结果中会包含大多数可能出现的漏洞类型,比如数组溢出、格式化字符串漏洞等。这些结果对分析程序的安全性有很大的参考价值。