赞
踩
今天上午首先看了一下AFL的说明并将其下载到了本地。通过百度了解到AFL只针对linux的环境,而如果需要在windows下使用则需要下载winAFL。
因此本文的AFL必须在linux环境下进行环境配置,在下载AFL时我是直接在github下载的AFL到win10主机结果发现win10不能使用因此直接将压缩包复制到ubuntu虚拟机中的。
AFL下载链接
如果这个链接不能下载可以直接百度进行github主页面然后直接搜索AFL也能找到该文件并进行下载。
接下来开始进行环境的部署,参考此链接进行安装,这个链接中给了一个不同的下载地址也可以尝试一下
AFL环境配置
上面这个地址无效了,又需要安装一次AFL,因此将使用过的指令再记录一遍:
git clone https://github.com/google/AFL
//先安装gcc
sudo apt-get install gcc
//查看gcc版本看是否安装成功
gcc -v
cd /AFL
make
//如果显示make command not found 运行下面两条命令
apt install make
apt upgrade
//如果上面make没有执行成功再执行一遍make指令
sudo make install
//afl安装完成
由于linux虚拟机没有经常使用导致很多包都没有进行安装,因此在安装过程中难免遇见缺少包的情况,而在安装包的过程中也遇见了一些问题并进行记录
*] Checking for the ability to compile x86 code… /bin/sh: 1: cc: not found
Oops, looks like your compiler can’t generate x86 code.
Don’t panic! You can use the LLVM or QEMU mode, but see docs/INSTALL
first. (To ignore this error, set AFL_NO_X86=1 and try again.)make: *** [Makefile:53: test_x86] Error 1
该问题出现的原因是没有安装gcc进行AFL的编译,因此接下来根据上面的教程需要使用以下命令安装gcc
yum -y install gcc gcc-c++ libstdc++-devel
然而 实际上由于我们使用的系统是ubuntu,根本没有必要非得用yum呀,于是咋们换一个方法直接使用apt-get命令就可以了。
sudo apt-get install gcc
如果找不到gcc的话先执行一下这条语句再执行上一条语句
sudo apt-get update
接下来gcc -v就可以看到gcc的版本了
接下来再执行以下命令就可以安装afl了
make
sudo make install
接下来使用上面教程提到的方法输入afl -fuzz显示命令找不到,但是我们直接输入一个测试程序发现是可以运行的
所以先不管它说的afl找不到,先来测试一下afl是否能正常运行
创建测试用例可以参考这个链接
点击
首先返回上一级目录,创建一个test测试文件夹,并创建一个test.c文件
测试用例(复制的上面链接给出的):
#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; }
执行以下语句进行编译:
afl-gcc -g -o afl_test test.c
//默认编译生成的可执行文件是无法使用 gdb 来跟踪或调试,而添加了g以后生成的可执行文件是可以使用-g来进行调试的 -i指定输入文件的地址,-o指定输出文件所在的地址
//接着建立fuzz_in文件夹,创建输入文件testcase,输入文件中写几个简单单词,fuzzing时会产生变异。
mkdir fuzz_in
echo "hello" > fuzz_in/testcase
//进行fuzz
afl-fuzz -i fuzz_in -o output ./afl_test
结果执行的时候报这个问题:
Your terminal is too small to display the UI. Please resize terminal
window to at least 80x25.
也就是显示的终端界面太小了,直接放大就可以看到了,执行结果如下:
使用ctrl+C可以退出AFL的运行。
好了,以上就是配置AFL的整个过程,只能说如果一条路走不通的话不如试试换个方式吧,下面的问题主要是因为按照yum导致的
由于系统中并没有安装yum的库,因此在执行上一条语句的时候会出现如下的错误。
$ yum -y install gcc gcc-c++ libstdc++-devel
//报如下错误
Command ‘yum’ not found, did you mean:command ‘num’ from deb quickcal (2.4-1) command ‘sum’ from deb
coreutils (8.30-3ubuntu2) command ‘uum’ from deb freewnn-jserver
(1.1.1~a021+cvs20130302-7build1) command ‘zum’ from deb perforate
(1.2-5.1)Try: sudo apt install <deb name >
因此首先要对该库进行安装,参考以下链接
安装yum库
在命令的执行过程中执行到如下语句时又出现新的错误:
$
./yummain.py install yum
bash: ./yummain.py: /usr/bin/python: bad interpreter: No such file or directory
百度说可能是因为python的版本存在不兼容性的问题,接下来参考问题三
在解决了python版本的兼容性问题后又出现了一个新的问题,
$ ./yummain.py install yum
File “./yummain.py”, line 74
except Errors.LockError, e:
^ SyntaxError: invalid syntax
出现上面这个问题的原因还是因为python,对于ubuntu20的版本来说,python2已经从其中一处了,因此计算机中安装的是python3的版本,而yum程序的解析则是使用 的python2的版本
直接使用以下语句安装python2
sudo apt install python2
可以参考下面这个连接进行python2的安装和配置
ubuntu安装python2
然后终于配置好了python,接下来又开始报这个错
原因应该是没有rpm的库,在网上找了很多办法,都没解决,算了,虽然我系统上缺少很多库,但我不能缺心眼嘛,咋们还是换一个方法安装gcc就是了,干嘛非要yum呢,所以我有回到问题一重新使用apt-get安装gcc并成功啦,幸福来的如此之快,那就放弃整个问题啦
在查看python的版本时使用以下命令却无法查看到python的正常版本。
$ python -v
Command ‘python’ not found, did you mean:
command ‘python3’ from deb python3 command ‘python’ from deb
python-is-python3
执行下列语句将Python3二进制文件’/usr/bin/python3’链接到’/usr/bin/python’作为默认python命令
update-alternatives --install /usr/bin/python python /usr/bin/python3 1
参考链接
直接执行完上一条语句就能直接查看python对应的版本号了。
通过在对AFL的环境配置中,由于gcc未安装而导致的报错,从而去了解了如何安装yum(没有成功),了解了yum是依赖于python2,因此在系统中进行了python2的安装和配置
查看python列表
sudo update-alternatives --list python
设置默认版本
sudo update-alternatives --config python
输入对应的数字选择设置哪个版本为默认版本(注意数字是前面的selection对应的列)
接下来就是gcc的安装和AFL的测试过程啦!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。