Fuzz之AFL

本文介绍了AFL(American fuzzy lop)模糊测试工具的使用,包括其工作原理、安装、实验目的及步骤。通过实验,读者将理解如何使用AFL对简单程序进行模糊测试,识别其潜在问题。实验涉及创建测试用例、使用afl-showmap等工具,并提示了优化fuzzing效率的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预备知识

关于AFL

American fuzzy lop号称是当前最高级的Fuzzing测试工具之一,由谷歌的Michal Zalewski所开发。通过对源码进行重新编译时进行插桩(简称编译时插桩)的方式自动产生测试用例来探索二进制程序内部新的执行路径。与其他基于插桩技术的fuzzers相比,afl-fuzz具有较低的性能消耗,有各种高效的fuzzing策略和tricks最小化技巧,不需要先行复杂的配置,能无缝处理复杂的现实中的程序。

实验目的

通过该实验了解AFL的使用方法,能够通过AFL模糊测试一些简单的软件,明白fuzz的基本方法和思想。

实验环境

在这里插入图片描述
服务器:kali,IP地址:随机分配
辅助工具:安装afl
测试脚本请在实验机内下载使用:http://tools.hetianlab.com/tools/T037.zip

实验步骤一

安装AFL(已装)
在这里插入图片描述
查看路径可以看到afl安装的文件:

ls -l /usr/bin/afl*

在这里插入图片描述
作用分别为:
●afl-gcc和afl-g++分别对应的是gcc和g++的封装。
●afl-clang和afl-clang++分别对应clang的c和c++编译器封装À。
●afl-fuzz是AFL的主体,用于对目标程序进行fuzz。
●afl-analyze可以对用例进行分析,通过分析给定的用例,看能否发现用例中有意义的字段。
●afl-qemu-trace用于qemu-mode,默认不安装,需要手工执行qemu-mode的编译脚本进行编译,后面会介绍。
●afl-plot生成测试任务的状态图。
●afl-tmin和afl-cmin对用例进行简化。
●afl-whatsup用于查看fuzz任务的状态。
●afl-gotcpu用于查看当前CPU状态。
●afl-showmap用于对单个用例进行执行路径跟踪。
创建本次实验的目录:
在这里插入图片描述
已经给出源代码test.c,该代码编译后得到的程序如果被传入“deadbeef”则会终止,如果传入其他字符会原样输出:

### 使用AFL进行Fuzz测试的案例与示例 American Fuzzy Lop (AFL) 是一种基于遗传算法和轻量级代码覆盖率反馈的技术来执行模糊测试工具[^1]。通过利用这些特性,AFL能够高效地发现程序中的潜在漏洞。 #### 实际应用案例 在实际操作中,Google曾使用AFL成功发现了多个开源项目中存在的安全缺陷。例如,在处理JPEG图像文件时,libjpeg-turbo库存在缓冲区溢出错误,这一问题被AFL检测出来并得到修复。 另一个值得注意的例子是OpenSSL。作为互联网上广泛使用的加密协议实现之一,OpenSSL也经历了由AFL驱动的安全审查过程。在此期间,研究人员不仅提高了现有功能模块的安全性,还优化了部分性能瓶颈。 #### 示例代码展示 下面是一个简单的Python脚本用于启动针对特定二进制文件的目标向导式fuzzer: ```python import os import subprocess def run_afl(binary_path, input_dir, output_dir): command = ["afl-fuzz", "-i", input_dir, "-o", output_dir, binary_path] try: process = subprocess.Popen(command) process.wait() except Exception as e: print(f"Error running AFL: {e}") if __name__ == "__main__": BINARY_PATH = "./target_binary" INPUT_DIR = "/path/to/input_samples/" OUTPUT_DIR = "/path/to/output_results/" if not os.path.exists(OUTPUT_DIR): os.makedirs(OUTPUT_DIR) run_afl(BINARY_PATH, INPUT_DIR, OUTPUT_DIR) ``` 此脚本展示了如何调用`afl-fuzz`命令行工具来进行基本配置下的模糊测试工作流设置。需要注意的是,在真实环境中应当更加细致地调整参数选项以及输入样本集的选择以获得最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值