预备知识
关于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”则会终止,如果传入其他字符会原样输出: