Tristan-Duin/http-header-fuzzer
GitHub: Tristan-Duin/http-header-fuzzer
通过向目标服务器发送大量畸形和恶意 HTTP 请求头,帮助安全测试人员快速发现解析漏洞、服务崩溃及其他健壮性问题。
Stars: 1 | Forks: 0
# HTTP Header Fuzzer
测试您的 Web 服务器如何处理不良的 HTTP 请求头。跨 60 多个请求头发送恶意和畸形值,并告诉您哪里出现了问题。这是一种简便快捷的方法,用于找出需要重点关注以改进防御性网络安全实践的地方。
## 安装
```
python3 -m venv venv
source venv/bin/activate
pip install -e .
```
## 运行
```
httpfuzz --url https://example.com
```
就是这样。这会对每个默认请求头使用所有策略进行模糊测试,并为您显示任何异常情况。
您也可以使用 `python -m fuzzer --url https://example.com` 来运行它。
## 选择测试内容
仅对特定的请求头进行模糊测试:
```
httpfuzz -u https://example.com --header-names Host Cookie User-Agent
```
仅使用特定的策略:
```
httpfuzz -u https://example.com -s sql_injection xss
```
同时结合两者:
```
httpfuzz -u https://example.com --header-names Cookie -s xss crlf_injection
```
## 策略
- `overflow` - 长字符串(100 到 100k 字符)
- `sql_injection` - SQL 探测字符串
- `xss` - script 标签、事件处理器、模板注入
- `crlf_injection` - 用于请求头拆分的新行注入
- `format_string` - `%s`、`%x`、`%n` 模式
- `null_byte` - 位于不同位置的空字节
- `unicode` - BOM、超长 UTF-8、全角字符、代理项
- `integer` - 边界值、MAX_INT、NaN、Infinity
- `command_injection` - Shell 元字符
默认运行所有策略。使用 `-s` 来选择特定的策略。
## 保存结果
```
# JSON
httpfuzz -u https://example.com --output json -o results.json
# CSV
httpfuzz -u https://example.com --output csv -o results.csv
```
## 调优性能
```
# 50 个并发请求,5 秒超时
httpfuzz -u https://example.com -c 50 -t 5
# 在请求之间添加延迟(秒)
httpfuzz -u https://example.com --delay 0.1
```
## 使用代理
```
httpfuzz -u https://example.com --proxy http://127.0.0.1:8080
```
## 其他有用的标志
- `--raw` - 使用原始 TCP 套接字而不是 aiohttp(见下文)
- `--exploitable` - 仅显示最易被利用的发现(CRIT/HIGH 严重级别,已去重)
- `--all` - 显示所有结果,而不仅是感兴趣的
- `--method POST` - 使用不同的 HTTP 方法
- `--headers "Content-Type: application/json"` - 为每个请求添加静态请求头
- `--skip-verify` - 跳过 TLS 证书检查
- `--custom-payloads file.txt` - 添加您自己的 payload(每行一个)
- `--header-wordlist file.txt` - 使用您自己的请求头名称列表
- `--retries N` - 重试失败的请求(默认:2)
## Raw 套接字模式
默认情况下,模糊测试器使用 `aiohttp`,它会在包含换行符和空字节的 payload 离开您的机器之前将其拦截。使用 `--raw` 可以绕过此限制,并通过原始 TCP 发送所有内容:
```
httpfuzz -u http://example.com --raw
```
这实际上会将 CRLF 注入、空字节和其他畸形数据发送到服务器,而不是让它们在客户端被拒绝。当您想测试服务器的解析器如何处理真正破损的输入时,请使用此选项。
也支持 HTTPS(原始 TLS 套接字)。不支持 `--proxy`。
## 过滤至重要内容
在完成全面扫描后,减少干扰信息,仅查看最易被利用的结果:
```
httpfuzz -u https://example.com --exploitable
```
这将过滤出 CRIT 和 HIGH 严重级别的发现(服务器错误、被反射回的 payload),并按请求头 + 策略进行去重,这样您就只能看到每个组合的最佳命中结果。
适用于所有输出格式:
```
httpfuzz -u https://example.com --exploitable --output json -o top_findings.json
```
## 工作原理
1. 发送一个正常请求以获取基线(状态码、主体大小、响应时间)
2. 发送相同的请求,但将其中一个请求头设置为恶意值
3. 将每个响应与基线进行比较
4. 标记任何看起来不同的情况 - 状态更改、大小偏移、响应缓慢、payload 被反射回或服务器错误
## 许可证
MIT
标签:aiohttp, CISA项目, CRLF注入, Fuzzer, HTTP头注入, HTTP模糊测试, Python, Raw TCP, Web安全, XSS, 协议解析测试, 反取证, 合规测试, 命令注入, 安全评估, 无后门, 格式化字符串, 漏洞情报, 畸形数据包, 网络安全, 蓝队分析, 计算机取证, 逆向工具, 隐私保护, 鲁棒性测试