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:端口

相关推荐
Yuiiii__2 小时前
一次“在家连不上公司内网服务”的排障实战记录
网络·智能路由器
普马萨特3 小时前
5G小基站对室内定位的影响
网络·5g
专业工业电源打工人3 小时前
F0505S-2WR3 适配优选 钡特电源 DF2-05S05LS|2W 隔离 DC-DC 模块电源5V转5V硬件选型参数规格解析
大数据·网络·人工智能
he39123773 小时前
ogg命令
运维·网络
其实防守也摸鱼3 小时前
Kimi K3深度测评:长文本之外的真实力
运维·开发语言·网络·人工智能·python·学习·安全
caimouse4 小时前
TCP/IP 协议驱动 (tcpip.sys) 分析
网络协议·tcp/ip·reactos
便利店10244 小时前
快递选「挂号」还是「平邮」?传输层一次讲清
网络·网络协议·tcp/ip·传输层
夜雪一千4 小时前
UDP 协议简介
网络·网络协议·udp
封狼居胥廖4 小时前
网络编程3
网络