一、Fuzzing速成之AFL实战


一、Fuzzing基本知识

1、什么是Fuzzing?

  维基百科将模糊测试定义为:
    模糊测试 (fuzz testing, fuzzing)是一种软件测试技术。其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。

也就是说,Fuzzing是用随机数据来测试程序。

2、Fuzzing运行流程

下面主要从AFL的运行流程来更好理解Fuzzing的执行流程:
  1).对源代码进行编译,并进行插桩,以记录代码覆盖率;
  2).选择一些输入文件,作为初始输入,也就是初始种子;
  3).一般是以队列方式,选择种子池中的种子;
  4).按照一定的变异策略,对选中的种子进行变异,生成多个新的种子;
  5).用变异生成的种子对编译好的程序进行测试;
    - 如果该种子能够增加代码覆盖率,则保存到种子池中,进行下一次变异;
    - 如果该种子导致程序崩溃,则保存起来,方便之后查看为什么导致程序崩溃。
  6).在测试若干轮之后,可能会保存有造成程序崩溃的种子,现在就是去分析它为什么导致崩溃的时候了!

下图是AFL的流程图:
Fuzzing流程图

二、Fuzzing实战

  该部分主要使用AFL进行Fuzzing练习😍😍😍

1、下载AFL压缩包

  AFL官方网址AFL
在这里插入图片描述

2、安装AFL

  解压压缩包后,进入到AFL的解压目录

  • make
  • sudo make install

  注意解压命令:
  tar -zxvf afl-2.52b.tgz


make后的终端显示:

在这里插入图片描述


make install 后的终端显示:

在这里插入图片描述


在终端输入afl-fuzz,能出现如下图所示界面,说明安装成功。

在这里插入图片描述


3、Fuzzing

(1)测试代码

 #include <stdio.h> 
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h> 
 #include <signal.h> ​
 int vuln(char *str)
 {
	int len = strlen(str);
    if(str[0] == 'A' && len == 66)
    {
        raise(SIGSEGV);
        //如果输入的字符串的首字符为A并且长度为66,则异常退出
    }
    else if(str[0] == 'F' && len == 6)
    {
        raise(SIGSEGV);
        //如果输入的字符串的首字符为F并且长度为6,则异常退出
    }
    else
    {
        printf("it is good!\n");
    }
    return 0;
}

int main(int argc, char *argv[])
{
    char buf[100]={0};
    gets(buf);//存在栈溢出漏洞
    printf(buf);//存在格式化字符串漏洞
    vuln(buf);​
    return 0;
}

(2)准备初始种子

  • afl_test:保存初始种子,一个文件,里面随便写点内容,如‘aaaa’;
  • fuzz_in:种子池,变异后有用的种子会保存到该目录下;
  • fuzz_out:记录引发崩溃的种子样本,以及其他样本。
    在这里插入图片描述

(3)编译上述源代码
  输入命令afl-gcc -g -o ./afl-test/afl-test ./afl-test/testcase.c

注:testcase.c就是刚刚用于测试的源代码,./afl-test/afl-test用于保存编译后得到的文件

在这里插入图片描述

编译后,文件目录情况:

在这里插入图片描述
(4)准备Fuzzing

  使用命令afl-fuzz -i fuzz_in -o fuzz_out ./afl-test/afl-test

在这里插入图片描述

按照提示,在命令行输入echo core >/proc/sys/kernel/core_pattern
然后重新输入afl-fuzz -i fuzz_in -o fuzz_out ./afl-test/afl-test


下面是执行结果:
在这里插入图片描述

have a nice day ! 😃😃😃

(4)查看崩溃种子
下面是fuzz_out目录下保存的结果,崩溃种子保存在crash目录下。

在这里插入图片描述

使用xxd id:000001,sig:11,src:000002,op:havoc,rep:128命令可以查看种子。

在这里插入图片描述

后续工作就是分析种子了,会用到汇编知识,速成篇只能学到这儿了😭😭😭

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值