目录
方案一:AFL++ 原生 Socket Mode(HTTP 通用,无需额外工具)
1. 安装全量依赖(含 LLVM、QEMU、Socket 模式所需组件)
2. 拉取 AFL++ 源码并全量编译(distrib 编译包含所有扩展模式)
3. 编译 QEMU 支持(无源码 Web/HTTP 二进制必装)
4. Socket Mode HTTP 使用原理
方案二:AFLNet(专用 HTTP/Web Fuzzer,基于 AFL++)
1. 安装基础依赖(同方案一,先执行依赖安装命令)
2. 拉取 AFLNet 源码(内置修改版 AFL++)
3. 编译 QEMU(二进制无源码 HTTP 服务)
4. AFLNet HTTP 使用示例
快速验证安装成功
常见报错解决
AFL++ 原生没有独立命名为 http_mode的模块,HTTP/Web 服务 Fuzz 有两种主流实现方案:
- AFL++ Socket Mode(官方内置,推荐):TCP 套接字转发,适配 HTTP、TCP 服务
- AFLNet(专用 HTTP/Web 服务器 Fuzzer,基于 AFL++ 改造)
下文分两套方案完整安装,环境:Ubuntu 20.04/22.04
方案一:AFL++ 原生 Socket Mode(HTTP 通用,无需额外工具)
1. 安装全量依赖(含 LLVM、QEMU、Socket 模式所需组件)
sudo apt update # 基础编译、LLVM工具链 sudo apt install -y build-essential python3-dev automake cmake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools ninja-build pkg-config libtool libtool-bin wget curl # LLVM14(推荐稳定版) sudo apt install -y lld-14 llvm-14 llvm-14-dev clang-14 || sudo apt install -y lld llvm llvm-dev clang # QEMU模式依赖(无源码二进制Web服务必备) sudo apt install -y libcapstone-dev cpio # Python依赖(socket桥接脚本) sudo apt install python3-pip pip3 install psutil2. 拉取 AFL++ 源码并全量编译(distrib 编译包含所有扩展模式)
git clone https://github.com/AFLplusplus/AFLplusplus.git cd AFLplusplus # 指定llvm14编译 export LLVM_CONFIG="llvm-config-14" # distrib:编译llvm_mode/qemu_mode/frida_mode/socket桥接全部组件 make distrib # 系统全局安装命令 sudo make install3. 编译 QEMU 支持(无源码 Web/HTTP 二进制必装)
cd qemu_mode # 自动下载补丁版qemu并编译 ./build_qemu_support.sh4. Socket Mode HTTP 使用原理
使用官方桥接脚本utils/afl_bridge_external.py:
- 脚本监听端口(如 8080)接收 AFL 变异数据包
- 转发数据包到本地 HTTP 服务(127.0.0.1:80)
- 捕获程序崩溃信号回传给 afl-fuzz
# 启动桥接(目标HTTP服务127.0.0.1:80,桥接监听22222) python3 utils/afl_bridge_external.py --target-host 127.0.0.1 --target-port 80 --bridge-port 22222 # 新开终端启动afl-fuzz afl-fuzz -i http_seeds -o http_out -- python3 utils/afl_bridge_external.py --bridge-only 22222方案二:AFLNet(专用 HTTP/Web Fuzzer,基于 AFL++)
AFLNet 专门针对 HTTP 服务器、TCP 网络协议优化,是 HTTP 场景专用工具链
1. 安装基础依赖(同方案一,先执行依赖安装命令)
2. 拉取 AFLNet 源码(内置修改版 AFL++)
git clone https://github.com/aflnet/aflnet.git cd aflnet # 编译全量组件 make # 安装系统工具 sudo make install3. 编译 QEMU(二进制无源码 HTTP 服务)
cd qemu_mode ./build_qemu_support.sh4. AFLNet HTTP 使用示例
准备 HTTP 请求种子文件放入in/目录,启动 Web 服务后执行:
afl-fuzz -i in -o out -N tcp://127.0.0.1/80 -P HTTP -- ./httpd-N:指定 TCP 目标地址端口-P HTTP:启用 HTTP 协议解析、请求结构化变异
快速验证安装成功
# 验证AFL++主程序 afl-fuzz -h # 验证QEMU模式(二进制Fuzz) afl-fuzz -Q -h # 验证AFLNet(安装后) afl-fuzz -h | grep AFLNet常见报错解决
- llvm-config not found
export LLVM_CONFIG=llvm-config-14 make clean && make distrib- build_qemu_support.sh 编译失败
sudo apt install libglib2.0-dev libpixman-1-dev libtool- 桥接脚本端口占用修改
--bridge-port更换空闲端口,或关闭占用进程:sudo lsof -i:端口