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安全, 客户端加密, 密码管理, 蓝队分析