记一下搞这个squirrel的过程,用的是docker的方法
Ubunut版本20.04,设定mysql作为被测试对象
1 首先git clone仓库
git clone https://github.com/OMH4ck/Squirrel.git
2 下载docker
sudo apt install curl
没有curl就装一个
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
先用curl获取脚本,连不上就想办法整个代理
运行脚本时如果出现连不上download.docker.com的情况,就去脚本文件里面把DEFAULT_DOWNLOAD_URL
一项改成https://mirrors.aliyun.com/docker-ce
3 调整配置文件
在/etc/docker路径下创建daemon.json文件,内容如下:
{
"registry-mirrors": [
"https://yourownid.mirror.aliyuncs.com",
"https://ccr.ccs.tencentyun.com",
"http://docker.m.daocloud.io",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn/"
],
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": false
},
"mtu": 1450,
"dns": ["114.114.114.114"]
}
镜像那里第一个是可以找阿里云申请的个人镜像,打开阿里云搜索容器镜像服务/镜像加速器,经过测试比下面几个公共的都好用。
修改完后记得
sudo systemctl daemon-reload
sudo systemctl restart docker
4 调整Dockerfile
在Squirrel/scripts/dockers/mysql目录下的Dockerfile文件中,在apt update之前一行加入这句:
RUN sed -i s:/archive.ubuntu.com:/mirrors.tuna.tsinghua.edu.cn/ubuntu:g /etc/apt/sources.list
#RUN sed -i s:/archive.ubuntu.com:/mirrors.aliyun.com:g /etc/apt/sources.list
这是在给docker里面的ubuntu换源,不然里面的apt下不动
中间有一行:
#RUN cd bld/ && make -j&& sudo cmake --install . --prefix /usr/local/mysql/
RUN cd bld/ && make -j 4 && sudo cmake --install . --prefix /usr/local/mysql/
把make -j改为make -j 4,不然容易爆内存,也不知道原作者写这句的时候用的内存有多大,反正我给虚拟机分配了48G内存,make到67%左右的时候依然会爆内存
5 尝试build
Squirrel/scripts/dockers/mysql目录下输入命令:
sudo docker build --build-arg "HTTP_PROXY=http://192.168.66.1:1080" --build-arg "HTTPS_PROXY=http://192.168.66.1:1080" -t mysql .
该句就是在squirrel的readme教的语句中加了一下代理的地址,如果不添加代理,可能会出现git clone失败的情况
6 Run
sudo docker run -it mysql
第一次可能会提示一个什么echo core > 什么路径
,切换到root用户照做就行
7 查看结果
运行一段时间后ctrl+c停止,然后使用命令查看状态
sudo docker container list -a
#sudo docker ps -a
如果处于Up状态,记下容器ID,一般只需要记前四个字母,然后尝试使用命令连接至容器
sudo docker exec -it <容器ID> /bin/bash
如果处于Exited状态,则需要启动一下再进行连接
sudo docker start <容器ID>
连上后,首先需要知道输出结果保存在哪,如果前面dockerfile未进行过多改动,是直接复制的原版仓库的话,根据Squirrel/scripts/utils/run.py,输出应该是在/tmp/fuzz中
此时查看该目录可以看到两个编号,其中一个是正在运行的输出,可以通过多次查看文件大小来判断哪一个是正在跑的
确定好编号后,在容器外使用命令:
sudo docker cp <容器ID>:/tmp/fuzz <本地路径>
拷贝内容到本地
8 可视化
可使用afl++中自带的一个可视化工具afl-plot进行查看
afl-plot <待分析目录> <输出目录>