模糊测试—AFL——实战小记

一 安装环境:

vm虚拟机上使用Ubuntu-22.04系统的镜像。

清华和科大的镜像都可以,下载下来的是ISO的压缩包,不用解压(出来的是一堆文件),在安装新的VM虚拟机时,在镜像源里面直接选择下载下来的压缩包。

二 正式安装

2.1 安装LLVM和CLANG

sudo apt-get install clang
sudo apt-get install llvm

注:clang是llvm的子项目,但是它们的源码是分开的,我们需要将clang放在llvm/tools目录下。 

  • AFL 使用 LLVM/Clang 进行代码插桩:AFL 利用 LLVM/Clang 提供的插桩功能,通过修改编译器生成的可执行文件,实现对代码的覆盖率插桩,从而能够监测程序执行时经过的路径,用于模糊测试的导向。

  • AFL 需要 LLVM/Clang 编译器:AFL 包含了一些工具,如 afl-gcc,它们实际上是 LLVM/Clang 的包装器,用于在编译过程中实现代码插桩等操作。

2.2   下载、解压、编译和安装 AFL工具

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

这里会报两次错:

1.运行后报错,sudo: make: command not found

解决方法:

sudo apt-get update
sudo apt-get install make

2.之后还会报错:make: *** [Makefile:53: test_x86] Error 1

解决方法:

sudo apt-get install gcc

3.再次编译AFL:

sudo make install

三 准备待测程序

3.1 安装vim编辑器

sudo apt-get install vim

3.2 创建并打开一个test.c文件

vim test.c

复制粘贴一下实例代码:

/* 功能:两数加减乘除(一个整数、一个字符、再一个整数),然后根据中间这个字符当作运算符,输出四则运算结果。 */
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    int a, b;
    char op;
    int result;
    if(scanf("%d%c%d", &a, &op, &b)){
        switch (op) {
            case '+':
                result = a + b;
                break;
            case '-':
                result = a - b;
                break;
            case '*':
                result = a * b;
                break;
            case '/':
                result = a / b;
                break;
            default:
                return 1;
        }
    }
    printf("%d\n", result);
    return 0;
}

以":wq"+一个回车键,保存并退出文件,返回我们的初始终端。

3.3 创建一个testfile文件夹,把刚刚创建的test.c文件放进去。(注:这时里面还没有afl_test这个文件)

四 插桩编译

4.1 右键testfile这个文件夹,选择在终端中打开它

4.2 执行下面的命令

4.3 结果 -编译后的文件 afl_test

五 准备种子池

  1. mkdir good_seeds bad_seeds:创建了两个目录,一个是 good_seeds,用于存放良好的种子文件;另一个是 bad_seeds,用于存放不良的种子文件。

  2. echo '1+2' > good_seeds/any_seed:将字符串 1+2 写入到 good_seeds 目录下名为 any_seed 的文件中。这个文件是一个良好的种子文件,用于作为输入进行模糊测试。

  3. echo 'bad seed' > bad_seeds/any_seed:将字符串 bad seed 写入到 bad_seeds 目录下名为 any_seed 的文件中。这个文件是一个不良的种子文件,用于作为输入进行模糊测试,测试程序对不良输入的处理能力。

六 开始种子测试

如果出错了的解决方案:

错误展示1:

解决方案:

$ sudo su
$ echo core >/proc/sys/kernel/core_pattern

 

出现UI界面:

Ctrl+c手动终止fuzz 

错误展示2

size太小了,导致无法显示UI界面

解决方法:

(1)resize命令安装

执行如下命令:

$ sudo apt-get install xterm

(2)resize

$ sudo resize -s 80 25
  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值