AFL从入门到放弃

AFL-Fuzz 模糊测试工具学习

AFL初探

afl-fuzz全称American Fuzzy Loop,是一款特别强大的Fuzzing工具。Fuzzing是指模糊测试,Fuzzing起源很早,其思想是通过自动化产生大量的无目的输入来对目标系统进行测试。afl也是根据这一基本原理,再结合几位大佬的巧妙的构思而产生。其具体的原理、fork策略、变异策略有空的时候更新

安装AFL以及相关工具

AFL安装

可以git下载,也可以官网下载,这里选择Linux下,git安装

$ git clone https://github.com/mirrorer/afl

之后在afl文件夹中执行

$ make
$ make install //如果安装报权限的错,那么就 $ sudo make install

可以输入afl-fuzz -h查看是否安装成功,安装成功则会出现afl-fuzz的–help界面。

llvm+clang安装

afl-fuzz需要在编译时进行插桩,然后再进行下一步的Fuzzing。afl-fuzz的编译器有afl-gcc、afl-g++、afl-clang、afl-clang++,其实质就是gcc、g++、clang以及clang++的wrapper,实质调用的依旧是gcc和clang,一般来说gcc在大部分Linux系统都有安装,高版本的ubuntu和centOS好像也编译好了llvm和clang,可以按照下面分别验证系统是否安装gcc和llvm+clang(llvm和clang是一套的)。

$ gcc --version
$ clang --version

下面针对电脑未安装llvm+clang。对于简单的学习afl和fuzzing,并不需要自己编译llvm,在llvm的官网下载需要版本的pre-built版,然后进行环境配置就够了。但如果是对一些论文的工具,特别是魔改过afl-clang的工具、源码,最好是下载源码中所用版本的llvm源码,然后本地进行编译。
下载到本地之后进行环境配置,在打开的文件最后加上环境变量,最后使环境变量生效。

$ gedit ~/.bashrc 
export LLVM_HOME=/你的下载的llvm路径/bin
export PATH=$LLVM_HOME:$PATH
source ~/.bashrc

再进入afl的文件夹,找到llvm_mode文件夹进入,运行make。afl-clang就可以运行了。

开始第一次AFL-Fuzz

就和学一门语言都要先输入"Hello World"一样,我们也用一个简单的例子开始Fuzzing。
新建一个文件夹,目录下建立test.c文件,并在该文件夹下新建两个文件夹分别为in 和out 。在in文件夹中建立testcase文本文件,随意输入一点文本,作为起始种子。

echo "asdsas" >> testcase

test.c文件内容如下。

#include<stdio.h>
#include<signal.h>
#include<stdlib.h>
#include<string.h>
int main(int argv,char *argv[]){
	char c[100] = {0};
	gets(c);					//gets函数存在栈溢出漏洞
	int l = strlen(c);
	if(c[0] == 'a'&&l == 20){	//首字母为a,长度为20的输入会导致异常退出
		raise(SIGSEGV);
	}else if(c[0] == 'A'&&c[1] == 'B'&&l == 12){	
		//前两个字母为AB,长度为12的输入会导致异常退出
		raise(SIGSEGV);
	}
	else return 0}

将上面的代码使用afl插桩

$ afl-gcc -g test.c -o test

test文件就是插桩好的测试文件。下面使用afl-fuzz工具,运行界面最好全屏显示。

$ afl-fuzz -i in -o out ./test 

······先写这么多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值