AFL的安装与使用


链接: link.
链接: link.
以上链接为AFL的安装部分,下面我们开始简单的使用AFL.

AFL的简单测试

在前面我们根据以上的博客完成了AFL的配置与安装,接下来我们开始进行简单的使用.首先编辑一个简单的测试程序.

#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;
}

下面我们进行如下图所示的配置:
请添加图片描述
配置步骤如下:

  • 在测试程序的同一目录下创建fuzz_in和fuzz_out文件夹开始编译插桩指令:
  • afl-gcc -g -o afl_test afl_test.c生成可执行程序afl_test.exe
  • 然后在之前创建的fuzz_in中创建一个测试样本,并在里边插入字符"123" :echo "123" > 1
  • 开始fuzzing!!! afl-fuzz -i fuzz_in -o fuzz_out ./afl_test

运行截图如下:
请添加图片描述
下面来展示如何使用AFL来fuzz binutils

AFL测试readelf

  • 下载好binutils
  • 进入binutils进行解压,设置编译环境afl-gcc并执行configure命令
sudo CC=afl-gcc ./configure
  • 开始执行make命令,这一步从输出的信息中可以看到afl插桩,此时afl-gcc编译并安装binutils完成,此时binutils文件夹下会生成objdump、nm-new(nm)、readelf三个文件夹
    请添加图片描述
  • 创建 binutils_inbinutils_out
    请添加图片描述
    其中 binutils_in为输入文件夹,存放初始文件,binutils_out为输出文件夹,存放fuzz结果,
    binutils_in文件中创建空文本:echo "" > 1
  • 开始fuzzing!!!
sudo afl-fuzz -i  binutils_in -o binutils_out binutils-2.29/binutils/objdump -d @@

@@在实际执行时会替换为替换成测试样本目录下的测试样本。请添加图片描述
请添加图片描述

  • ctrl+c,binutilsw_out文件夹下会有以下文件
    请添加图片描述

版权声明:本文为qq_40552152原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。