FUZZ入门1
时间:2022-11-30 09:00:00
AFL-Fuzz介绍
Fuzzing它是一种模糊的测试方法,通过结构测试输入大量测试软件来发现软件中的漏洞。CTF中,fuzzing可能不常用,但在实际的漏洞挖掘中,fuzzing由于其简单高效的优点,成为主流的漏洞挖掘方法。
AFL则是fuzzing一个好用的工具,全称是American Fuzzy Lop,由Google安全工程师Micha? Zalewski开发开源fuzzing测试工具可以有效地执行二进制程序fuzzing,挖掘可能存在的内存安全漏洞,如栈溢出、堆溢出、UAF、double free等。因为需要在相关代码处插桩,AFL主要用于测试开源软件。当然配合QEMU闭源二进制代码也可用于其他工具fuzzing,但执行效率会受到影响
工作原理:
自动生成测试用例,探索二进制程序例,探索二进制程序中的新执行路径。AFL也支持直接对没有源码的二进制程序进行测试,但需要QEMU的支持。
AFl下载
american fuzzy lop进入官网后,下载压缩包,然后在虚拟机中解压。(实验环境ubantu 18.打开文件并输入以下代码
make sudo make install
之后输入afl-之后tab如果出现补充指令,安装将成功。
实验
这里有一个在线例子初探AFL-Fuzz - 先知社区
可以看出,至少有6个漏洞可以使程序异常,前四个是输入字符特征和长度异常会使程序异常,后两个漏洞是由于get和printf特别是函数不限制输入范围,get可以覆盖的bp和return addr导致栈溢出,而get printf可组合泄漏get输入字符串偏移触发格式化字符串漏洞。
我们先用gcc编译源文件无任何保护,然后使用ida打开文件发现很正常
符合源文件的逻辑,然后再使用afl进行编译
afl-gcc -g -o afl_test afl_test.c
我们在用ida打开编译文件后,发现比源文件多了一些afl文件可以tab跟进,这就是fuzz打桩试验。
然后建立两个文件夹:fuzz_in和fuzz_out,用于存储程序的输入和fuzz的输出结果
在fuzz_in还需要创建一个testcase文件,在这个程序的例子里,随便输入一些字符。
afl-fuzz -i testcase -o output ./afl_tes
可以开始fuzz程序。第一次操作可能会遇到提示输入echo core >/proc/sys/kernel/core_pattern
根据提示,由于未知原因,此时需要更改权限输入
sudo bash -c 'echo /home/zsj/Desktop/core-%e-%p-%t > /proc/sys/kernel/core_pattern'
然后进入界面,解释具体的界面参数。
carshes文件夹可以看到疑似漏洞
可以看出,第一个文件标记为栈溢出漏洞,第四个文件标记为格式化字符串漏洞。说实话,其他人都不熟悉。
参考资料
初探AFL-Fuzz - 先知社区
【AFL学习笔记(一)C程序有源码fuzz - 百度文库