Loading . . .

使用AFL分析C语言程序


使用American Fuzzy Lop分析C/C++程序

环境

centos 7.4

安装

  1. 安装LLVM 和 CLANG
yum install clang
yum install llvm
  1. 下载压缩包,解压缩
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
  1. 编辑文件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;
}
  1. 编译
afl-gcc q14.c -o q14

  1. 创建输入文件testcase,输入文件中写几个简单但单词就可以,Fuzz过程中会产生变异
mkdir fuzz_in
echo "hello" > fuzz_in/testcase

  1. 执行下列语句开始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
  1. 运行界面

  1. Ctrl+c 手动终止fuzz,可以看到fuzz_out下生成了几个文件
    • queue – 存放fuzzer生成的所有不同执行路径的测试用例+我们自己一开始构造的测试用例
    • crashes – 存放造成程序崩溃的测试用例,根据产生的信号不同进行分类
    • hangs – 存放造成程序超时的测试用例


文章作者: Lhtian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lhtian !
  目录