AFL++ HTTP Mode(网络 / HTTP 服务模糊测试)完整安装教程

目录

[方案一:AFL++ 原生 Socket Mode(HTTP 通用,无需额外工具)](#方案一:AFL++ 原生 Socket Mode(HTTP 通用,无需额外工具))

[1. 安装全量依赖(含 LLVM、QEMU、Socket 模式所需组件)](#1. 安装全量依赖(含 LLVM、QEMU、Socket 模式所需组件))

[2. 拉取 AFL++ 源码并全量编译(distrib 编译包含所有扩展模式)](#2. 拉取 AFL++ 源码并全量编译(distrib 编译包含所有扩展模式))

[3. 编译 QEMU 支持(无源码 Web/HTTP 二进制必装)](#3. 编译 QEMU 支持(无源码 Web/HTTP 二进制必装))

[4. Socket Mode HTTP 使用原理](#4. Socket Mode HTTP 使用原理)

[方案二:AFLNet(专用 HTTP/Web Fuzzer,基于 AFL++)](#方案二:AFLNet(专用 HTTP/Web Fuzzer,基于 AFL++))

[1. 安装基础依赖(同方案一,先执行依赖安装命令)](#1. 安装基础依赖(同方案一,先执行依赖安装命令))

[2. 拉取 AFLNet 源码(内置修改版 AFL++)](#2. 拉取 AFLNet 源码(内置修改版 AFL++))

[3. 编译 QEMU(二进制无源码 HTTP 服务)](#3. 编译 QEMU(二进制无源码 HTTP 服务))

[4. AFLNet HTTP 使用示例](#4. AFLNet HTTP 使用示例)

快速验证安装成功

常见报错解决


AFL++ 原生没有独立命名为 http_mode 的模块,HTTP/Web 服务 Fuzz 有两种主流实现方案:

  1. AFL++ Socket Mode(官方内置,推荐):TCP 套接字转发,适配 HTTP、TCP 服务
  2. AFLNet(专用 HTTP/Web 服务器 Fuzzer,基于 AFL++ 改造)

下文分两套方案完整安装,环境:Ubuntu 20.04/22.04

方案一:AFL++ 原生 Socket Mode(HTTP 通用,无需额外工具)

1. 安装全量依赖(含 LLVM、QEMU、Socket 模式所需组件)

bash 复制代码
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 psutil

2. 拉取 AFL++ 源码并全量编译(distrib 编译包含所有扩展模式)

bash 复制代码
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 install

3. 编译 QEMU 支持(无源码 Web/HTTP 二进制必装)

bash 复制代码
cd qemu_mode
# 自动下载补丁版qemu并编译
./build_qemu_support.sh

4. Socket Mode HTTP 使用原理

使用官方桥接脚本 utils/afl_bridge_external.py

  1. 脚本监听端口(如 8080)接收 AFL 变异数据包

  2. 转发数据包到本地 HTTP 服务(127.0.0.1:80)

  3. 捕获程序崩溃信号回传给 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++)

bash 复制代码
git clone https://github.com/aflnet/aflnet.git
cd aflnet
# 编译全量组件
make
# 安装系统工具
sudo make install

3. 编译 QEMU(二进制无源码 HTTP 服务)

复制代码
cd qemu_mode
./build_qemu_support.sh

4. 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

常见报错解决

  1. llvm-config not found

    export LLVM_CONFIG=llvm-config-14
    make clean && make distrib

  2. build_qemu_support.sh 编译失败

    sudo apt install libglib2.0-dev libpixman-1-dev libtool

  3. 桥接脚本端口占用 修改--bridge-port更换空闲端口,或关闭占用进程:sudo lsof -i:端口

相关推荐
淼澄研学6 小时前
Kimi API黑产倒卖技术解析与Python合规接入指南
开发语言·网络·python
SendTomo7 小时前
P2P文件传输工具对比:SendTomo vs send.wang
javascript·网络协议·webrtc·html5·p2p
qyyyyy5707 小时前
英文技术标准和协议规范怎么读?RFC、接口规范与安全标准 PDF 翻译流程
网络协议·网络安全·机器翻译·csrf·技术美术
无锡耐特森7 小时前
Profinet转ModbusTCP协议网关:数字化工厂跨协议互联
网络
MartinYeung58 小时前
[论文学习]ProAct:针对LLM越狱的主动防禦框架
网络·学习·安全
发量惊人的中年网工8 小时前
中小企业网络管理进阶:从设备堆叠到统一管理
服务器·网络·安全·网络安全·php·制造
workflower9 小时前
案例 :某交通厅基于AI技术的智能安全运营实践
网络·人工智能·安全·设计模式·机器人
SendTomo9 小时前
WebRTC文件互传工具实测对比
javascript·网络·webrtc·html5·p2p
运维全栈笔记9 小时前
致远 OA HTTPS 配置避坑指南
网络协议·http·https
测开小菜鸟10 小时前
智能体安全与伦理测试:守护AI的“底线”,让智能体安全、负责任地工作
网络·人工智能·安全