AFL实践记录
虚拟机:Ubuntu 18.04
参考https://xz.aliyun.com/t/4314
afl使用了qemu模式进行测试,只要在之前的命令的基础上加上-Q的参数即可
先进行安装,在afl的根目录打开终端执行以下命令
sudo su
提升权限之后
cd qemu_mode
./build_qemu_support.sh
cd ..
make install
报错
Error: ‘libtool’ not found, please install first.
解决
apt-get install libtool-bin
继续安装缺少的软件
问题
ERROR: glib-2.22 gthread-2.0 is required to compile QEMU
解决
sudo apt-get install libgtk2.0-dev
问题
util/memfd.c:40:12: error: static declaration of ‘memfd_create’ follows non-static declaration
解决
参考https://blog.csdn.net/liyihao17/article/details/109981662
在patches/目录下创建一个名为“memfd_create.diff”的文件,然后将下列代码粘贴进去
diff -ru qemu-2.10.0-clean/util/memfd.c qemu-2.10.0/util/memfd.c
--- qemu-2.10.0-clean/util/memfd.c 2018-11-20 18:11:00.170271506 +0100
+++ qemu-2.10.0/util/memfd.c 2018-11-20 18:11:13.398423613 +0100
@@ -37,7 +37,7 @@
#include <sys/syscall.h>
#include <asm/unistd.h>
-static int memfd_create(const char *name, unsigned int flags)
+int memfd_create(const char *name, unsigned int flags)
{
#ifdef __NR_memfd_create
return syscall(__NR_memfd_create, name, flags);
然后修改build_qemu_support.sh,添加一行
patch -p1 <../patches/memfd_create.diff || exit 1
终于装好了
简单无源码fuzz
这里我新建了test2的文件夹,跟之前一样创建fuzz_in和fuzz_out的文件夹,在fuzz_in中还需要创建一个testcase文件,写aaa就可以了
gcc -g -o afl_test2 test.c
afl-fuzz -i fuzz_in -o fuzz_out -Q ./afl_test2
fuzz readelf
这里再用一个例子来fuzz一下,测试readelf
由于readelf的输入其实就elf文件,因此需要在in目录中放一个输入elf
按照流程创建文件夹和测试用的elf
mkdir in out
cd in
cp afl-2.52b/testcases/others/elf/small_exec.elf .
#afl目录中自带一些常用文件的testcase
cd ..
sudo cp /usr/bin/readelf .
#把readelf复制到当前目录中来
afl-fuzz -i in -o out -Q ./readelf -a @@
#开始fuzz,@@表示从in文件夹中找elf作为输入,实际上就是在执行:readelf -a 文件名