从零开始的AFLGO搭建测试

笔者最近在学习导向型fuzz,这就不得不提到AFLGO了。由于之前改代码弄环境把虚拟机搞得很杂,新开虚拟机进行搭建实验。网上相关教程较少,大部分是关于AFL的,所以写下此篇博客记录从一无所有的虚拟机到搭建完成测试的过程。由于作者本身也是小白,所以写的也很详细,如有已完成或觉得啰嗦的步骤请自行跳过。有不对的地方还请大佬们指正。

一、环境

ubuntu 18.04.5 LTS
内存:8G(建议分配8G以上,不然搭建AFLGO时编译可能会出错)
存储:60G
值得注意的是如果要做对比实验可能需要用ubuntu 16,但是里面许多东西都太老了,不能直接从apt中获取。大部分东西需要下压缩包然后./configure+make+make install,具体可以看里面的README

二、换源

初始安装完系统后apt的东西较为古早,导致如果直接进行aflgo搭建前的llvm安装会提示版本问题,建议换源后再进行。
关于换源的教程比较多了,放一个参考

1.打开sources.list文件
sudo gedit /etc/apt/sources.list

2.用"#"注释掉以前的源(deb开头)

3.增加自己想加的源后保存,以下为阿里源。
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

4.更新
sudo apt-get update
sudo apt-get upgrade

三、AFLGO搭建

AFLGO项目地址

https://github.com/aflgo/aflgo

0.git

(*)未安装则sudo apt-get install git

(-)建议配置git
代理git config --global http.proxy ‘http://192.168.x.x:10809’

(*)git clone https://github.com/aflgo/aflgo

1.修改搭建脚本

AFLGO提供了sh脚本可以自动完成搭建,但是需要进行一些修改。
(*)编辑aflgo/scripts/build/aflgo-build.sh

(*)配置proxy,后续需要用到wget。如果不配置,中间很容易被超时被中断。
加入两行即可
export http_proxy=“http://192.168.x.x:10809”
export https_proxy=“http://192.168.x.x:10809”
配置代理.png
另外由于文件名为aflgo,所以需要将最后的afl改为aflgo。即/afl替换为$HOME/aflgo
文件名修改.png

2.运行脚本

sudo ./build.sh
注意编译时间会比较长,大概需要2-3小时。另外如果内存给的不够的话可能会失败,建议分配8G或以上的内存。
搭建完毕.png
如图即为成功,如果失败了可以看下是哪一步出错了,然后把已经成功的步骤省略,不然重新编译又要耗费很长时间。
成功.png

四、测试

至此AFLGO搭建完成,然而由于AFLGO与AFL不同,需要对程序进行插桩计算距离后才能使用。AFLGO中也提供了许多漏洞自动测试脚本,但是其中有许多坑需要排,有些脚本甚至怀疑写脚本的人自己没跑过(哭)。下面是我的排坑记录,如果不想走坑记得先执行加粗部分。如果还有问题,可以尝试把sh里的命令单步执行一行一行敲,看是哪里出了问题。
AFLGO提供的自动化测试脚本.png

1.cxxfilt-CVE-2016-4487

(*)首先是所有脚本都需要加入的AFLGO路径
加入AFLGO路径.png
(-)请注意这个export是临时的变量,即当你关闭终端时就失效,而用sh脚本跑类似于重开终端,所以即使你在同一终端下,sh脚本配置了变量,终端中仍然不会显示。所以请在sh脚本内配置变量或者代理,而不是在执行sh脚本前的终端前配置。
这里做了个小实验,sh脚本为打印值为"123456"的变量test,直接运行sh能打印出,而在终端中却无法echo,即是上面所说的原因。
变量测试

(*)执行sh脚本(执行前建议先执行下面黑体的内容)
待测试程序大部分是从github上下载,如果速度较慢请考虑配置git代理。
出错
问题挺多,挨着排查
<1>首先是提示echo core > /proc/sys/kernel/core_pattern
直接输入会提示permission denny,输入sudo bash -c 'echo core > /proc/sys/kernel/core_pattern’即可
<2>然后是一堆编译的错误
编译1
‘makeinfo’ is missing on your system然后紧跟了几个error。这个是因为没有安装texinfo导致的
sudo apt install texinfo即可
(因为只是warning所以一开始没太在意,结果还真是这个的原因orz)。在obj-aflgo下重新make clean;make。
<3> ERROR: LeakSanitizer: detected memory leaks
在这里插入图片描述
加入环境变量
export ASAN_OPTIONS="detect_leaks=0"

再跑后面的步骤,重新计算距离等。
成功
到这儿就成功了,可以看到cpu百分比过高,这个是虚拟机设置的问题。关闭虚拟机后设置里多给点内核即可
虚拟机设置

2.giflib-bugs-74

(*)加入AFLGO路径 export AFLGO=$HOME/aflgo
(*)运行脚本
aclocal: warning: couldn’t open directory ‘m4’: No such file or directory
m4
查了下是让安装automake,但是apt install时提示已安装,并且有1 not upgrade,故执行sudo apt dist-upgrade。再跑就没问题了。
成功

3.jasper-CVE-2015-5221

这个改完aflgo路径直接跑就没问题。
jasper

4.KTY_Pretty_Printer(建议单步跑)

(*)改AFLGO路径
(*)运行脚本

<1>提示安装xlsxwriter pycrypto
安装提示
这里需要注意环境里既有python2也有python3。
python共存
默认的python是指python2,而只有一个pip
pip2缺失
所以先apt install python-pip,再pip2 install xlsxwriter pycrypto即可
<2>cmake出错
image.png
查了下是需要升级cmake到3.14,我的cmake版本是3.10.2。网上有许多教程,这里用的是这篇,感觉相对简单一点。

#https://blog.csdn.net/qq_26018075/article/details/104114107
#添加签名密钥
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add -
#添加储存库
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main'
#更新(不用像原文一样卸载再安装,直接upgrade就行)
sudo apt update
sudo apt upgrade

升级成功.png
然后再跑报新的错了,整了半天没解决,准备放着不管,但是后面跑Palindrome的时候又出现了一样的情况。最后询问师兄之后才解决。
报错
可以看到这里用的是系统下自带的clang-11,而我们这里是想用aflgo提供的afl-clang-fast,所以会提示未知参数。进入KTY-Pretty-Printer的cmake文件夹下,改动64.cmake(32位系统就改32.cmake),然后改build.sh。后面如果是64位记得把sh里的build改成build64
因为先解决的是Palindrome,步骤相似,具体往后翻看第10部分就行。
后面就是流畅跑完了。

运行起来说提供的初始用例不行,具体需要什么格式的输入没去研究,但是搭建是成功了的。

5.libming-CVE-2018-8807与CVE-2018-8962

(*)改aflgo路径
(*)运行脚本
安装提示
提示安装bison,sudo apt install bison flex libfreetype6 libfreetype6-dev即可。后续也有一些安装需要,这里一起安装了
然后报了新的错,重定义问题。
image.png
折腾了许久,查libming的issue发现0.4.7和0.4.8都会出现这个问题,而测试的版本是0.4.8。折腾了许久发现并不影响最后执行。
所以建议是:改完AFLGO路径直接运行sh脚本就好
在这里插入图片描述

6.libxml2-ef709ce2

(*)改aflgo路径
(*)运行脚本
sudo apt install gawk
直接运行即可
提示
提示第一个testcase过慢,解决方法两个,一个是加上-t 1000+参数再运行,一个是在in文件夹下删除这个测试用例。

7.lrzip-CVE-2017-8846与lrzip-CVE-2018-11496

(*)改aflgo路径
(*)运行脚本
跑到autogen.sh那段的时候会报错
提示未安装
apt install libbz2-dev即可,同样的,还需要安装liblzo2-dev
接下来就可以一次性跑通了
image.png

8.mjs-issues-57与mjs-issues-78

改完aflgo路径即可直接跑
msj

9.objdump- CVE-2017-8392

最开始运行sh脚本提示不可运行,不知道是不是自己的原因。如果出现同样的情况
chmod +x ./objdump-CVE-2017-8392.sh 即可
改完aflgo路径即可直接跑
objdump

10.Palindrome(建议单步跑)

跑到./build.sh的时候
image.png
也是跟前面一样提示参数未识别
未知参数
因为这里用的是系统的clang,而非aflgo提供的clang。仅通过脚本的export CFLAG和CXXFLAG是不行的。
进入aflgo/scripts/fuzz/cb-multios/cmake下,编辑64.cmake(如果是32位系统就编辑32.cmake),把里面的clang改为aflgo的afl-clang-fast的绝对路径。
64.cmake
如果是64位系统直接运行会提示-m32不支持
报错提示
这里奇怪的是为什么64位系统,却使用了32位的cmake配置文件。查看cb-multios文件夹下的build.sh找到原因
build.sh
如果定义了BUILD64这个变量,他才会跑64.cmake,不然就跑32.cmake。所以我们需要加入一行export BUILD64=XX,如上面框出来的部分。
这个时候再往后跑就没问题了(这儿折腾了好久,感谢实验室师兄的帮忙)
cmake通过
再到后面cd build/challenges/Palindrome会提示没有该文件夹,因为之前编译64位生成的是build64,改成build64即可
改为64
然后终于成了
Palindrome

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值