使用American Fuzzy Lop分析C/C++程序
环境
centos 7.4
安装
- 安装LLVM 和 CLANG
yum install clang
yum install llvm
- 下载压缩包,解压缩
wget http://lcamtuf.coredump.cx/afl/releases/afl-2.52b.tgz
tar -zxvf afl-2.52b.tgz
cd afl-2.52b
make
sudo make install
touch q14.c
- 编辑文件q14.c
#include <stdio.h>
int main() {
char buf[100] = {0};
gets(buf);
if (buf[0] == 'A')
printf("hello\n");
else
printf("NO A\n");
return 0;
}
- 编译
afl-gcc q14.c -o q14
- 创建输入文件testcase,输入文件中写几个简单但单词就可以,Fuzz过程中会产生变异
mkdir fuzz_in
echo "hello" > fuzz_in/testcase
- 执行下列语句开始fuzz
afl-fuzz -i fuzz_in -o fuzz_out ./q14
- 如果遇到以下问题
Hmm, your system is configured to send core dump notifications to an
external utility. This will cause issues: there will be an extended delay
between stumbling upon a crash and having this information relayed to the
fuzzer via the standard waitpid() API.
To avoid having crashes misinterpreted as timeouts, please log in as root
and temporarily modify /proc/sys/kernel/core_pattern, like so:
echo core >/proc/sys/kernel/core_pattern
- 在管理员模式中输入
echo core >/proc/sys/kernel/core_pattern
- 运行界面
- Ctrl+c 手动终止fuzz,可以看到fuzz_out下生成了几个文件
- queue – 存放fuzzer生成的所有不同执行路径的测试用例+我们自己一开始构造的测试用例
- crashes – 存放造成程序崩溃的测试用例,根据产生的信号不同进行分类
- hangs – 存放造成程序超时的测试用例