Venu-exe/httpfuzz
GitHub: Venu-exe/httpfuzz
HTTPFuzz 是一个基于纯 C 和 POSIX sockets 编写的轻量级 Web 模糊测试引擎,通过内置 payload 和基线异常检测机制帮助安全测试人员高效发现 HTTP 端点中的注入类漏洞。
Stars: 2 | Forks: 0
# HTTPFuzz:基于 C 语言的轻量级 Web Fuzzing 引擎
HTTPFuzz 是一个毕业设计网络安全项目:一个基于变异的 HTTP fuzzer,使用纯 C 语言和原始 POSIX sockets 编写。它使用一组精心挑选的漏洞类别 payload(SQLi、XSS、命令注入、路径遍历、SSTI 等)探测目标 endpoint,将每个响应与干净的基线进行比较,并标记暗示存在真实漏洞的异常——然后将所有内容写入实时 HTML 报告。
它作为 [WebTrap](https://github.com/Venu-exe/WebTrap)(一个防御性 honeypot)的配套工具而开发,构成了攻防闭环:可以将 HTTPFuzz 指向 WebTrap,以演示实时的检测工作。
## 功能
- **原始 Socket HTTP 引擎:** 无需外部 HTTP 库——请求通过 POSIX sockets 手动构建和解析,可完全控制 headers 和时间。
- **内置 Payload 集:** 附带精心挑选的默认 payload 列表,涵盖 SQLi、XSS、命令注入、路径遍历、SSTI、格式化字符串、CRLF 注入和边界/长度测试。
- **自定义 Wordlists:** 使用 `-w` 提供您自己的 payload 文件,可选择标记类别(`CATEGORY:payload` 语法)。
- **三个 Fuzz 点:** URL 查询/路径(默认)、POST body(`-X POST -d`)或自定义 header(`--header "Name: FUZZ"`)——让您不仅可以测试 URL/body 参数,还可以测试基于 header 的 SSRF/SQLi/CRLF 注入。
- **静态额外 Headers:** `--header "Authorization: Bearer xyz"`(无 FUZZ 标记)会在每次请求时发送该 header——对于 fuzzing 经过身份验证的 endpoint 非常有用。
- **并发 Fuzzing:** `-T N` 运行 N 个 worker 线程来对抗目标,可在处理大型 wordlists 时大幅提高运行速度。
- **速率限制:** `-r MS` 限制所有线程发出请求的频率——以礼貌的方式测试有速率限制或脆弱的目标。
- **校准基线:** `-b N` 预先对基线进行 N 次采样,并根据观察到的分布推导出长度/时间容差,从而减少具有每次请求噪声(时间戳、nonces、广告)的页面上的误报。
- **基于基线的异常检测:** 每个 payload 的响应都会与校准后的基线进行比较,并标记:
- 状态码更改
- 显著的响应长度差值(经过容差调整)
- 基于时间的异常(例如,`SLEEP(5)` payload 触发长达数秒的延迟——这是一个典型的盲注 SQLi 信号)
- 响应 **body** 中反射的 payload(潜在的 XSS)或响应 **headers** 中反射的 payload(潜在的 header 注入 / SSRF 式的 header 信任)
- 已知的错误泄露特征(SQL 错误、stack traces 等)
- **实时 HTML 报告:** 自动生成、带样式的报告,突出显示有趣的发现,并安全地对所有 payload 文本进行 HTML 转义。
- **JSON 报告:** `-j FILE` 在 HTML 报告旁边写入一份机器可读的报告,适用于 CI pipeline 或其他工具。
- **GET 和 POST Fuzzing:** 使用 `FUZZ` 标记对查询参数或 POST body 字段进行 Fuzzing。
## 项目结构
```
httpfuzz/
│
├── src/ # Source files
│ ├── main.c # CLI entrypoint & fuzzing loop
│ ├── http_client.c # Raw socket HTTP request/response handling
│ ├── mutator.c # Payload set loading & template substitution
│ ├── analyzer.c # Baseline-relative anomaly detection
│ └── report.c # HTML report generation
├── include/ # Header files
├── payloads/ # Example custom wordlist
│ └── example_wordlist.txt
├── reports/ # Generated HTML reports (created at runtime)
├── Makefile
└── README.md
```
## 安装与设置
1. **克隆代码仓库:**
git clone https://github.com/Venu-exe/httpfuzz.git
cd httpfuzz
2. **构建:**
make
*仅需 `gcc` 和 POSIX 环境——无需外部库。*
3. **使用 FUZZ 标记对目标运行:**
./httpfuzz -u "http://127.0.0.1:8080/search?q=FUZZ"
## 用法
```
Usage: ./httpfuzz -u URL [options]
Required:
-u URL Target URL, with 'FUZZ' marking the injection point
e.g. http://127.0.0.1:8080/search?q=FUZZ
Options:
-X METHOD HTTP method: GET or POST (default: GET)
-d DATA POST body template, must contain FUZZ (used with -X POST)
--header H Extra header line, e.g. "X-Forwarded-For: FUZZ" or
"Authorization: Bearer xyz". If it contains FUZZ, it
becomes the fuzz point instead of the URL/body -- lets you
target header-based SSRF/SQLi/CRLF injection. If it doesn't
contain FUZZ, it's just sent as a static header on every
request (handy for auth tokens/cookies while fuzzing).
-w FILE Custom payload wordlist (default: built-in payload set)
-o FILE Output HTML report path (default: reports/httpfuzz_report.html)
-j FILE Also write a machine-readable JSON report (for CI pipelines)
-t SECONDS Per-request socket timeout (default: 8)
-T THREADS Concurrent worker threads (default: 1, max: 50)
-r MS Rate limit: minimum delay between request starts, across
all threads (default: 0 = no limit)
-b N Baseline samples to calibrate false-positive tolerance
against dynamic pages (default: 3, use 1 for the old
single-baseline behavior)
-h Print help
```
### 示例:fuzzing POST 登录表单
```
./httpfuzz -u "http://127.0.0.1:8080/login" -X POST -d "username=FUZZ&password=test"
```
### 示例:fuzzing header 而不是 URL/body
```
./httpfuzz -u "http://127.0.0.1:8080/" --header "X-Forwarded-For: FUZZ" -w payloads/example_wordlist.txt
```
### 示例:使用静态 header 进行经过身份验证的 fuzzing、多线程、输出用于 CI 的 JSON
```
./httpfuzz -u "http://127.0.0.1:8080/search?q=FUZZ" \
--header "Authorization: Bearer eyJ..." \
-T 10 -j reports/findings.json
```
### 示例:使用自定义 wordlist
```
./httpfuzz -u "http://127.0.0.1:8080/search?q=FUZZ" -w payloads/example_wordlist.txt
```
## 如何在本地进行测试
1. 使用 `make` 构建 fuzzer。
2. 搭建任何本地测试目标——例如,[WebTrap](https://github.com/Venu-exe/WebTrap) 的 honeypot,或一个简单且故意留有漏洞的脚本。
3. 运行 `./httpfuzz -u "http://127.0.0.1:8080/?q=FUZZ"`。
4. 在浏览器中打开 `reports/httpfuzz_report.html` 以查看被标记的发现。
## 使用的技术
- **C (C99):** 仅使用标准库——`socket`、`getaddrinfo`、`string.h`、`stdio.h`(无外部依赖)
- **POSIX Sockets:** 手动进行 HTTP/1.1 请求构建和响应解析
## 免责声明
本项目仅供教育目的和授权的安全测试(您拥有的系统、您自己的实验室环境,或您正在参与的 bug bounty 计划范围内的资产)。请勿在未获得明确测试许可的系统上运行 HTTPFuzz——这样做可能是违法的。
标签:POSIX Sockets, Web安全, 客户端加密, 密码管理, 蓝队分析