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_in与binutils_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版权协议,转载请附上原文出处链接和本声明。