文章目录
一、squirrel的介绍
用虚拟机完成数据库的模糊测试,但是不够完善
squirrel链接
链接:link
建议下载Ubuntu 18.04
到官网下载
编译安装clang/llvm(建议9.0以上)
教程网站:link
该网站clang版本为6.0
将squirrel的文件下载到Ubuntu上
wget https://github.com/s3team/Squirrel.git
squirrel编译前的准备:在Ubuntu命令行运行命令
sudo apt-get -y update && apt-get -y upgrade
sudo apt-get -y install gdb bison flex git make cmake build-essential gcc-multilib g++-multilib xinetd libreadline-dev zlib1g-dev
sudo apt-get -y install clang libssl-dev libncurses5-dev
cd ~
git clone https://github.com/google/AFL.git
cd AFL
sed -i 's/#define MAP_SIZE_POW2 16/#define MAP_SIZE_POW2 18/' config.h
make
cd llvm_mode/
make
下载docker(建议按照dockerfile步骤直接在外部搭建环境)
链接: link.
Dockerfile创建镜像
下载完成后在:~/Squirrel-master/DNAME/docker页面下打开命令行
:
过Docker命令就可以完成构建。
docker image build -t <Name:tag> <file path>
例如现在要通过已经写好的Dockerfile,构建一个jspang的镜像,就可以使用下面的命令构建。
docker image build -t jspang .
按照dockfile搭建时时有可能出现以下报错
1、不能打开网站
解决办法
:打开dockerfile文件将网址中http改成git即可。
2、要根据报错安装相应缺少的包
dockerfile中命令解析成命令行
1、WORKDIR
相当于命令行中cd
命令
WORKDIR /home/mysql ##相当于cd /home/mysql
2、USER root
就是管理员模式 相当于 sudo su
3、COPY
作用:复制内容到镜像
格式: COPY <src> <dest>
详解:复制本地主机的 <src>下内容到镜像中的 <dest>,目标路径不存在时,会自动创建。
<src>:可以是 Dockerfile 所在目录的一个相对路径(文件或目录)
<dest>:可以是镜像内绝对路径,或者相对于工作目录(WORKDIR)的相对路径
相当于命令行中将文件和文件夹复制的操作
4、ENV(配置环境变量)
ENV CC=/home/mysql/AFL/afl-clang-fast
在命令行上相当于:
export CC=/home/mysql/AFL/afl-clang-fast
运行AFL测试MySQL
记得在afl_fuzz.c 上修改路径
修改完make一下
打开squirrel里MySQL中docker里的run.py(实际上就是脚本)
打开命令行
第一步:cd /usr/local/mysql/ 用root权限
第二步:/usr/local/mysql/bin/mysqld --user=root --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --log-error=fuckerr.err --pid-file=fuckpid.pid &
第三步:/usr/local/mysql/bin/mysql -u root 如果不存在test1,则创建数据库;如果不存在,创建数据库
这样就进入了MySQL数据库 写exit退出数据库
第四步: kill -9 `pidof mysqld`
第五步:cd /home/cailianjiangnan/Squirrel-master/MySQL/AFL
第六步:export LD_LIBRARY_PATH=/home/mysql/mysql-server/bld_orignal/lib
第七步:./afl-fuzz -i /home/cailianjiangnan/Squirrel-master/MySQL/docker/input -o fuzz_output aaa
此时会出现SHM_ENV_VAR: xx
新建个命令行:cd /usr/local/mysql#
输入命令:export __AFL_SHM_ID=xx
再令建一个命令行:cd /home/cailianjiangnan/Squirrel-master/MySQL/AFL
/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --log-error=fuckerr.err --pid-file=fuckpid.pid --max_execution_time=1000 --user=root
然后到第七步的命令行中随便输一个字母按回车即可出现fuzz界面