最近学习afl_fuzz的内容,对所使用的指令进行一点点总结,供各位参考。
编译指令
1、存在makefile
修改makefile环境变量CC CXX(修改对应afl安装路径即可)
export CC=/home/kali/AFL/afl-clang-fast
export CXX=/home/kali/AFL/afl-clang-fast++
可以通过修改configure文件指定目标目录
./configure --prefix="$HOME/example/install/"
修改完成直接
make
make install
如果改回gcc编译,使用如下指令清理afl编译文件,并修改makefile
make clean
rm -r $HOME/example/install/
FLAGS="-g -O0" CXXFLAGS="-g -O0"
2、只有c文件
编译时将gcc改为afl-gcc即可,其余指令与gcc同
afl-gcc -g -o 123 ./123.c
也可以在前面启用选项AFL_USE_ASAN=1启用 ASAN
AFL_USE_ASAN=1 afl-gcc -g -o 123 ./123.c
3、运行afl-fuzz
指定崩溃管理
sudo su
echo core >/proc/sys/kernel/core_pattern
exit
基本语法
afl-fuzz -i ./fuzzin -o ./fuzzout ./123
调用afl-fuzz程序
-i 选项给定输入文件的目录,作为种子使用
-o 选项指定输出crash目录
最后的参数制定fuzz目标,其后可以跟上该程序(123)的参数
其他常用选项
-m 选项指定内存限制,由于ASAN的使用可能导致内存消耗过大,一般用作解除限制
afl-fuzz -m none -i ./fuzzin -o ./fuzzout ./123
-s 选项指定变异种子,可自定义
afl-fuzz -i ./fuzzin -o ./fuzzout -s 456 ./123
@@ 代指程序的输入文件目录。下面实例假设123程序有文件位置作为参数输入,afl-fuzz会自动填充
afl-fuzz -i ./fuzzin -o ./fuzzout ./123 @@
-M -S 选项指定 主fuzzer 和 从fuzzer ,用于多线程的fuzz
主fuzzer只能使用一个
afl-fuzz -M father_fuzzer -i ./fuzzin -o ./fuzzout ./123
从fuzzer可以指定有限多个
afl-fuzz -S fuzzer1 -i ./fuzzin -o ./fuzzout ./123
afl-fuzz -S fuzzer2 -i ./fuzzin -o ./fuzzout ./123
-x 选项指定字典路径,用于某些特定格式文件的fuzz,让变异结果更加的“合理”
afl-fuzz -x ./sample.dict -i ./fuzzin -o ./fuzzout ./123
-D 选项启用确定性突变(仅主fuzzer有效)
afl-fuzz -D -i ./fuzzin -o ./fuzzout ./123
-t 选项指定时间,可以一定程度上加快速度
afl-fuzz -t 100 -i ./fuzzin -o ./fuzzout ./123
4、其他常见问题
./fuzzout 目录没访问权限?
给它!这可能kali是权限管理的锅
sudo chmod -R 777 ./fuzzout
报错如下?
直接进入root修改
sudo su
cd /sys/devices/system/cpu
echo performance | tee cpu*/cpufreq/scaling_governor
exit