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

相关推荐
QXWZ_IA2 小时前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
wdeok3 小时前
Socket编程Tcp
服务器·网络·tcp
xiaoye-duck19 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
无足鸟ICT21 小时前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络
坤坤子吖1 天前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
xiaoye-duck1 天前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
andxe1 天前
工业级 PoE 交换机选型指南:破解边缘部署四大核心难题
运维·网络·安全·光通信·交换机
LK_071 天前
【FastAPI】基础篇 01|开始之前:API、HTTP 与 FastAPI 到底是什么
网络协议·http·fastapi
say_fall1 天前
【Linux网络编程】计算机网络基础:局域网与广域网、OSI七层模型与TCP/IP五层模型、封装解包与MAC/IP地址、端口号与socket编程接口
linux·网络·tcp/ip·计算机网络·信息与通信
阿星_1 天前
pydio登陆不了分析问题
网络协议·http·https