RuoJi6/fuzzhound

GitHub: RuoJi6/fuzzhound

一款面向 API 安全测试的智能 Fuzz 工具,支持 Swagger/OpenAPI 文档自动解析和多种漏洞检测模式。

Stars: 24 | Forks: 0

# 🐕 FuzzHound **FuzzHound** 是一款专为 API 安全测试设计的智能 Fuzz 工具,支持 Swagger/OpenAPI 文档自动解析,提供多种 Fuzz 模式和漏洞检测能力。像猎犬一样嗅探 API 中的安全漏洞! ## 💯 功能特性 ### 核心功能 - **🔍 自动化 API 发现**:自动解析 Swagger 2.0 和 OpenAPI 3.0 文档,支持 JSON/YAML 格式 - **🎯 智能参数识别**:自动识别路径参数、查询参数、请求头、Cookie、请求体等 - **📦 枚举参数支持**:自动识别并测试 API 文档中定义的枚举参数,支持数量限制 - **🔗 $ref 引用解析**:完整支持 Swagger/OpenAPI 中的 `$ref` 引用解析 ### Fuzz 测试能力 - **💥 用户名 Fuzz**:基于字典的用户名爆破测试,支持关键字匹配和全参数模式 - **🔐 密码 Fuzz**:基于字典的密码爆破测试,支持自定义字典和数量控制 - **🔢 数字型 Fuzz**:支持随机模式和范围遍历模式,可检测越权、IDOR 等漏洞 - **💉 SQL 注入检测**: - 三种检测模式:基础(10个payload)、智能(20个)、完整(155个) - 基线对比分析,自动计算风险评分 - 支持 152 种 SQL 错误特征匹配 - 智能去重和误报过滤 - **📁 文件上传支持**:自动识别文件上传接口,生成测试文件(支持图片、PDF、CSV等) ### 高级特性 - **🎨 灵活的参数控制**: - `--fuser 30`:关键字匹配 + 随机30个用户名 - `--fuser all`:所有字符串参数 + 随机15个用户名 - `--fuser all:100`:所有字符串参数 + 随机100个用户名 - `--fuser all:all`:所有字符串参数 + 全部字典 - **🔥 一键全量测试**:`--fall` 参数启用所有 Fuzz 测试 - **🎯 状态码筛选**: - `--fuzz-status`:筛选显示的 Fuzz 结果状态码 - `--fuzz-filter`:只对指定状态码的 API 进行 Fuzz 测试 - **⚡ 多线程并发**:支持自定义线程数,提高测试效率 - **🔒 认证支持**:支持 Bearer Token、API Key、Basic Auth、Cookie 等多种认证方式 - **🌐 代理支持**:支持 HTTP/HTTPS 代理,可配合 Burp Suite 使用 - **📊 详细报告**:生成 HTML 格式的测试报告,包含请求/响应详情 - **🎭 随机 User-Agent**:内置 User-Agent 池,模拟真实浏览器请求 - **🚫 黑名单过滤**:支持方法、路径、正则表达式黑名单,避免测试危险接口 ## ✅ 安装 ### 环境要求 - Python 3.7+ - pip ### 安装步骤 1. 克隆项目到本地: git clone https://github.com/RuoJi6/fuzzhound.git cd fuzzhound 2. 安装依赖: pip3 install -r requirements.txt 3. 验证安装: python3 fuzzhound.py --help ## 🥰 使用指南 ### 基础用法 #### 1. 测试单个 API # 基础测试 python3 fuzzhound.py -u http://example.com/api-docs # 指定线程数和延迟 python3 fuzzhound.py -u http://example.com/api-docs -t 10 --delay 0.5 #### 2. 启用 Fuzz 测试 # 用户名 Fuzz(关键字匹配 + 随机15个) python3 fuzzhound.py -u http://example.com/api-docs --fuser # 密码 Fuzz(关键字匹配 + 随机30个) python3 fuzzhound.py -u http://example.com/api-docs --fpass 30 # 用户名 Fuzz(所有字符串参数 + 全部字典) python3 fuzzhound.py -u http://example.com/api-docs --fuser all:all # SQL 注入检测(智能模式) python3 fuzzhound.py -u http://example.com/api-docs --fpsql --sql-mode smart # 一键启用所有 Fuzz python3 fuzzhound.py -u http://example.com/api-docs --fall #### 3. 高级用法 # 使用代理 + 认证 + 所有 Fuzz python3 fuzzhound.py -u http://example.com/api-docs \ --proxy http://127.0.0.1:8080 \ --token "your-bearer-token" \ --fall all \ -t 15 # 只对返回 200 的 API 进行 Fuzz python3 fuzzhound.py -u http://example.com/api-docs \ --fall \ --fuzz-filter 200 # 限制枚举参数测试数量 python3 fuzzhound.py -u http://example.com/api-docs \ --enum-limit 10 ### 配置文件 编辑 `config/config.yaml` 自定义默认配置: # 目标配置 target: base_url: "http://example.com" timeout: 10 verify_ssl: false # 请求配置 request: threads: 5 delay: 1.5 retry: 1 # Fuzz 配置 fuzz_username: enabled: false username_file: "config/usernames.txt" count: 15 # 默认随机挑选15个 fuzz_password: enabled: false password_file: "config/top100_password.txt" count: 15 ## 📖 参数说明 ### 基础参数 | 参数 | 说明 | 示例 | |------|------|------| | `-u, --url` | 目标 URL 或 API 文档路径 | `-u http://example.com/api-docs` | | `-c, --config` | 配置文件路径 | `-c config/custom.yaml` | | `-t, --threads` | 并发线程数 | `-t 10` | | `--delay` | 请求间延迟(秒) | `--delay 0.5` | | `--timeout` | 请求超时时间(秒) | `--timeout 30` | | `--proxy` | HTTP/HTTPS 代理 | `--proxy http://127.0.0.1:8080` | | `--token` | Bearer Token | `--token "your-token"` | | `--debug` | 启用调试模式 | `--debug` | ### Fuzz 参数 | 参数 | 说明 | 示例 | |------|------|------| | `--fall [MODE]` | 一键启用所有 Fuzz | `--fall` 或 `--fall all` | | `--fuser [N\|all\|all:N\|all:all]` | 用户名 Fuzz | `--fuser 30` / `--fuser all:100` | | `--fpass [N\|all\|all:N\|all:all]` | 密码 Fuzz | `--fpass all` / `--fpass all:all` | | `--fnumber [N\|START-END\|all]` | 数字型 Fuzz | `--fnumber 20` / `--fnumber 1-1000` | | `--fpsql [KEYWORDS]` | SQL 注入检测 | `--fpsql` 或 `--fpsql id,name` | | `--sql-mode [MODE]` | SQL 检测模式 | `--sql-mode smart` | | `--sql-payloads [N]` | 自定义 SQL payload 数量 | `--sql-payloads 50` | ### 筛选参数 | 参数 | 说明 | 示例 | |------|------|------| | `--fuzz-status` | 筛选显示的 Fuzz 结果状态码 | `--fuzz-status 200,500` | | `--fuzz-filter` | 只对指定状态码的 API 进行 Fuzz | `--fuzz-filter 200` | | `--enum-limit` | 枚举参数测试数量限制 | `--enum-limit 10` | | `--ignore-blacklist` | 忽略黑名单 | `--ignore-blacklist` | ## 🎯 使用场景 ### 场景 1:快速安全扫描 # 对目标进行快速安全扫描,启用所有 Fuzz python3 fuzzhound.py -u https://api.example.com/swagger.json --fall -t 15 ### 场景 2:SQL 注入专项测试 # 使用完整模式进行 SQL 注入检测 python3 fuzzhound.py -u https://api.example.com/api-docs \ --fpsql \ --sql-mode full \ --fuzz-filter 200 ### 场景 3:用户名/密码爆破 # 使用自定义字典进行爆破 python3 fuzzhound.py -u https://api.example.com/api-docs \ --fuser all:all \ --fpass all:all \ -t 20 ### 场景 4:配合 Burp Suite 使用 # 通过 Burp 代理进行测试,方便查看详细请求 python3 fuzzhound.py -u https://api.example.com/api-docs \ --proxy http://127.0.0.1:8080 \ --fall \ --debug ### 场景 5:越权测试 # 使用数字型 Fuzz 测试 IDOR 漏洞 python3 fuzzhound.py -u https://api.example.com/api-docs \ --fnumber 1-10000 \ --fuzz-filter 200 ## 🔖 待办事项 - [x] **Swagger/OpenAPI 解析**:支持 Swagger 2.0 和 OpenAPI 3.0 - [x] **多种 Fuzz 模式**:用户名、密码、数字、SQL 注入 - [x] **智能参数匹配**:关键字匹配和全参数模式 - [x] **状态码筛选**:支持 Fuzz 前后的状态码筛选 - [x] **文件上传支持**:自动生成测试文件 - [x] **SQL 注入检测**:基线对比 + 错误匹配 + 风险评分 - [ ] **XSS 检测**:支持反射型和存储型 XSS 检测 - [ ] **命令注入检测**:支持系统命令注入检测 - [ ] **SSRF 检测**:支持服务端请求伪造检测 - [ ] **XXE 检测**:支持 XML 外部实体注入检测 - [ ] **JWT 测试**:支持 JWT 弱密钥、算法混淆等测试 - [ ] **GraphQL 支持**:支持 GraphQL API 测试 - [ ] **WebSocket 支持**:支持 WebSocket 接口测试 - [ ] **插件系统**:支持自定义 Fuzz 插件 - [ ] **数据持久化**:支持测试结果数据库存储 - [ ] **Web UI**:提供 Web 界面进行测试和查看结果 ## 📊 输出示例 ### 控制台输出 ╔═══════════════════════════════════════════════════════════╗ ║ ║ ║ 🐕 FuzzHound - API 安全测试工具 ║ ║ ║ ║ 支持 Swagger/OpenAPI 自动化测试和智能 Fuzz ║ ║ ║ ╚═══════════════════════════════════════════════════════════╝ 🔍 自动检测到 API 文档路径: https://api.example.com/swagger.json ✓ 成功解析 25 个 API 接口 📍 阶段 1/2: 普通测试 [200] 1.23 KB 125ms GET /api/users/{id} Get User Info [401] 0.15 KB 45ms POST /api/login User Login [200] 2.45 KB 234ms GET /api/products List Products 📍 阶段 2/2: Fuzz 测试 🔍 Fuzz前置筛选:只对状态码为 [200] 的API进行Fuzz测试 [💉SQL] 1.25 KB 156ms GET /api/users/{id} [可能存在SQL注入] └─ Payload: id=1' OR '1'='1 └─ 风险评分: 75/100 └─ 检测到SQL错误: MySQL syntax error ✓ 测试完成!报告已保存到: output/report.html ### HTML 报告 生成的 HTML 报告包含: - 测试统计信息 - 状态码分布 - 详细的请求/响应信息 - SQL 注入检测结果 - 风险评分和建议 ## 🔧 自定义字典 ### 用户名字典 编辑 `config/usernames.txt`: admin administrator root test user ### 密码字典 编辑 `config/top100_password.txt`: 123456 password admin 12345678 ### SQL Payload 编辑 `config/sql_payloads_*.txt`: - `sql_payloads_basic.txt`:基础 payload(10个) - `sql_payloads_smart.txt`:智能 payload(20个) - `sql_payloads_full.txt`:完整 payload(155个) ## 📜 许可证 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件 ## 📧 联系方式 如有任何问题或建议,请通过以下方式联系: - **GitHub Issues**: [提交 Issue](https://github.com/RuoJi6/fuzzhound/issues) ## 🙏 致谢 感谢所有为本项目做出贡献的开发者! **⚠️ 免责声明** 本工具仅供安全研究和授权测试使用。使用本工具进行未经授权的测试是违法的。使用者需自行承担使用本工具的一切后果,作者不承担任何法律责任。
标签:API发现, API安全测试, CISA项目, DNS枚举, DOE合作, Fuzz工具, IDOR测试, OpenAPI解析, PE 加载器, SQL注入检测, Swagger解析, Web安全, 代码生成, 参数篡改, 密码爆破, 密码管理, 接口安全, 文件上传测试, 智能Fuzzing, 渗透测试工具, 用户名枚举, 网络安全工具, 自动化安全审计, 蓝队分析, 越权检测, 逆向工具