您现在的位置是:首页 > 编程 > 

AFL fuzz工具初探

2025-07-28 05:55:34
AFL fuzz工具初探 下载 && 安装代码语言:javascript代码运行次数:0运行复制wget .tgz tar -xvf ./afl-latest.tgz cd afl-2.52b/ sudo make && sudo make install安装成功代码语言:javascript代码运行次数:0运行复制root@giant:~# afl-fuzz a

AFL fuzz工具初探

下载 && 安装

代码语言:javascript代码运行次数:0运行复制
wget .tgz
tar -xvf ./
cd afl-2.52b/
sudo make && sudo make install

安装成功

代码语言:javascript代码运行次数:0运行复制
root@giant:~# afl-fuzz 
afl-fuzz 2.52b by <lcamtuf@google>

afl-fuzz [ opti ] -- /path/to/fuzzed_app [ ... ]

Required parameters:

  -i dir        - input directory with test cases
  -o dir        - output directory for fuzzer findings

Execution control settings:

  -f file       - location read by the fuzzed program (stdin)
  -t msec       - timeout for each run (auto-scaled, 50-1000 ms)
  -m megs       - memory limit for child process (50 MB)
  -Q            - use binary-only instrumentation (QEMU mode)

Fuzzing behavior settings:

  -d            - quick & dirty mode (skips deterministic steps)
  -n            - fuzz without instrumentation (dumb mode)
  -x dir        - optional fuzzer dictionary (see README)

Other stuff:

  -T text       - text banner to show on the screen
  -M / -S id    - distributed mode (see parallel_)
  -C            - crash exploration mode (the peruvian rabbit thing)

For additional tips, please cult /usr/local/share/doc/afl/README.

有源码fuzz——upx

由于我们用afl来fuzz,这个有源码的要用afl-gcc来编译,所以编辑Makefile文件

代码语言:javascript代码运行次数:0运行复制
git clone .git
cd upx/
vim Makefile

添加:CC = /usr/local/bin/afl-gcc (我直接在第一行加)

代码语言:javascript代码运行次数:0运行复制
cd ./src
vim Makefile

修改: CXX ?= /usr/local/bin/afl-g++ (应该在1行)

此外,我们还需要安装编译依赖的东西,github文档有说:.SRC

那个zlib一般都会有的,很多linux其实默认自带upx了

如果没有的话,ubuntu是这个

代码语言:javascript代码运行次数:0运行复制
apt install zlib1g zlib1g-dev

安装lzma-sdk

代码语言:javascript代码运行次数:0运行复制
root@giant:~/aflfuzz/fuzztarget/upx# git submodule update --init --recursive
Submodule 'src/lzma-sdk' (.git) registered for path 'src/lzma-sdk'
Cloning into 'src/lzma-sdk'...
remote: Counting objects: 49, done.
remote: Total 49 (delta 0), reused 0 (delta 0), pack-reused 49
Receiving objects: 100% (49/49), 4.46 KiB | 0 bytes/s, done.
Resolving deltas: 100% (151/151), done.
Checking connectivity... done.
Submodule path 'src/lzma-sdk': checked out '426fe82d122e2cf140a86751055ee5278fe2ef'

安装ucl

代码语言:javascript代码运行次数:0运行复制
wget .gz
tar -xvf ./ucl-1.gz
cd ucl-1.0/
./configure && sudo make && sudo make install
export UPX_UCLDIR=/path/to/ucl-1.0    # !!!!!你自己的路径啊

最后到我们编译upx了

代码语言:javascript代码运行次数:0运行复制
root@giant:~/aflfuzz/fuzztarget/upx# make all

最后编译生成的文件在src目录下的

我们用ida打开就可以看到不同了

开始fuzz(下面用file文件作为样本)

代码语言:javascript代码运行次数:0运行复制
root@giant:~/aflfuzz/fuzztarget/upx# mkdir afl_in afl_out
root@giant:~/aflfuzz/fuzztarget/upx# cp /usr/bin/file afl_in
root@giant:~/aflfuzz/fuzztarget/upx# afl-fuzz -i afl_in -o afl_out ./src/ @@

对了,还需要开启core dump

代码语言:javascript代码运行次数:0运行复制
echo core >/proc/sys/kernel/core_pattern

刚开跑就15个崩溃了

无源码fuzz

对无源码的程序进行fuzz一般有两种方法:

  1. 对二进制文件进行插桩
  2. 使用-n选项进行传统的fuzz测试

第一种由afl-qemu实现,如果使用第二种方法,把-Q改成-n就行

编译一个AFL版的qemu

代码语言:javascript代码运行次数:0运行复制
root@giant:~/aflfuzz/afl-2.52b# cd qemu_mode/
root@giant:~/aflfuzz/afl-2.52b/qemu_mode# ls
build_qemu_support.sh  patches  README.qemu
root@giant:~/aflfuzz/afl-2.52b/qemu_mode# ./build_qemu_support.sh 
root@giant:~/aflfuzz/afl-2.52b/qemu_mode#cp ../afl-qemu-trace /usr/local/bin/

如果缺少libtool

代码语言:javascript代码运行次数:0运行复制
apt install libtool-bin

无源码fuzz —— readelf

同样也是创建文件夹,放入原始样本(test你自己准备吧)

代码语言:javascript代码运行次数:0运行复制
mkdir afl_in afl_out
mv test ./afl_in/
cp /usr/bin/readelf .
afl-fuzz -i afl_in -o afl_out -Q ./readelf -a @@

reference

/2017/09/21/AFL%E6%8A%80%E6%9C%AF%E4%BB%8B%E7%BB%8D/ .html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2018-05-06,如有侵权请联系 cloudcommunity@tencent 删除root编译工具源码qemu

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1207590.html

相关标签:无
上传时间: 2025-07-24 14:19:22
留言与评论(共有 11 条评论)
本站网友 长沙万国城moma
24分钟前 发表
100% (151/151)
本站网友 紧身裤显凹凸
4分钟前 发表
100% (49/49)
本站网友 忘了你存在
30分钟前 发表
-T text - text banner to show on the screen -M / -S id - distributed mode (see parallel_) -C - crash exploration mode (the peruvian rabbit thing) For additional tips
本站网友 石狮市财政局
3分钟前 发表
100% (49/49)
本站网友 华润置地沈阳
0秒前 发表
pack-reused 49 Receiving objects
本站网友 垃圾处理厂
10分钟前 发表
~/aflfuzz/fuzztarget/upx# afl-fuzz -i afl_in -o afl_out ./src/ @@对了
本站网友 财经搜索
12分钟前 发表
100% (49/49)
本站网友 重庆邮电大学bbs
0秒前 发表
-T text - text banner to show on the screen -M / -S id - distributed mode (see parallel_) -C - crash exploration mode (the peruvian rabbit thing) For additional tips
本站网友 宁波吧
19分钟前 发表
done. Checking connectivity... done. Submodule path 'src/lzma-sdk'
本站网友 脉康合剂
13分钟前 发表
~/aflfuzz/afl-2.52b/qemu_mode# ls build_qemu_support.sh patches README.qemu root@giant