AFL安装使用教程

安装

AFL简介:一个面向安全的模糊程序,采用新型的编译时工具和遗传算法来自动发现干净、有趣的测试用例,从而触发目标二进制文件中的新内部状态。

准备

Ubuntu 20.04
Target Platform:x86_64 and arm64
必备软件包:
make/build-essential

sudo apt-get install build-essential make

下载AFL包

https://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz

AFL快速安装

  1. 编译AFL使用 make
  2. 找到或编写一个相当快的、简单的程序,从文件或stdin中获取数据,以适合测试的方式进行处理,然后退出
  3. 编译程序 /library去进行模糊测试 使用afl-gcc
CC=/path/to/afl-gcc CXX=/path/to/afl-g++ ./configure --disable-shared
   make clean all

4.获取一个小的但是有效的输入文件,对程序有意义
5.如果这个程序从标准输入流进行读取,运行afl-fuzz就像

   ./afl-fuzz -i testcase_dir -o findings_dir -- \
     /path/to/tested/program [...program's cmdline...]

如果这个项目从一个文件里获取输入,你能用@@在这个命令行中

6.通过及时查阅文档来调查模糊器界面用户中显示为红色的任何东西

注意:如果出现了以下情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B5ablS6H-1648625174936)(https://note.youdao.com/yws/res/33313/WEBRESOURCE82c44f88556a2a873616345d20063b06)]
需要对操作系统核心转储进关闭

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

使用

创建一个测试案例文件 afl_test.c

#include <stdlib.h>
#include <signal.h>

void test (char *buf) {
    int n = 0;
    if(buf[0] == 'a') n++;
    if(buf[1] == 'f') n++;
    if(buf[2] == 'l') n++;
    if(buf[3] == '!') n++;  
    printf("%d\n",n);    
    if(n == 4) {
    printf("awesome!\n");
        raise(SIGSEGV);
    }else{
        printf("wrong!\n");
    }
}

int main(int argc, char *argv[]) {
    char buf[100];
    test(argv[1]);
    return 0;
}

使用 afl-gcc进行编译

afl-gcc -g -o test test_afl.c

使用afl-fuzz进 fuzzing测试

afl-fuzz -i fuzz_in -o fuzz_out ./afl_test @@

其中两个@@表示占位符 (因为源程序中需要在运行中有相应的字符串输入),以及需要创建fuzz_in,用来存放初始的种子和 fuzz_out最终得到的crash

最终得到如图所示的AFL运行结果:
(https://note.youdao.com/yws/res/33321/WEBRESOURCE9c334341f7a79679061c90b6d3c3a61b)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值