Uglybeard/FBps
GitHub: Uglybeard/FBps
一个用于发现 HTTP 访问控制绕过漏洞(401/403)的快速模糊测试工具。
Stars: 1 | Forks: 0
# FBps(Forbidden Bypass)

[](https://www.python.org/)
[]()
[](LICENSE)
FBps (Forbidden Bypass) 是一个用于发现访问控制绕过漏洞(401/403 绕过)的快速 HTTP 模糊测试工具,通过生成方法、URL 和头部等方面的请求变体来探测潜在的安全问题。
它能够检测 Web 应用和反向代理中的错误配置、标准化不一致以及意外的路由行为。
如需可复现的本地测试和载荷调整,请使用 **[FBpsLab](https://github.com/Uglybeard/FBps-lab)**。
## 主要特性
- 基于等级的扫描(`-L`)控制测试集的详尽程度
- URL 模糊测试(路径内载荷 + 追加载荷)
- 通过原始请求目标字节检查标准化不一致(可选词表)
- HTTP 方法测试(`-m` 或 `-A`)
- 头部操作(默认头部词表 + 自定义头部)
- 自定义 User-Agent 支持(`-ua`)
- API 版本降级变体(例如 `/api/v3/...` → `/api/v2/...` → `/api/v1/...`)
- 查询参数模糊测试(基于词表驱动)
- 代理支持、多线程、全局速率限制
- 响应过滤与可选的 JSON 报告
## 安装
1. 克隆仓库:
```
git clone https://github.com/Uglybeard/FBps.git
cd FBps
```
2. 安装依赖:
```
pip install -r requirements.txt
```
## 使用
```
python fbps.py [-h] [-m METHOD] [-H HEADER] [-b BODY] [-c COOKIES] [-ua USER_AGENT]
[-A] [-L LEVEL] [-v] [-o OUTPUT.json] [-t THREADS]
[-rl RATE_LIMIT] [-p PROXY]
[--min-length MIN_LENGTH] [--exclude-length L1,L2,...]
[--insecure]
url
```
## 选项
- 目标与覆盖范围:
- `url` 目标 URL
- `-L, --level` 测试等级(1–3)
- `-A, --all` 使用常见 HTTP 方法执行所有测试(从 `data/methods.txt` 加载)
- 请求构造:
- `-m, --method` 逗号分隔的 HTTP 方法(默认:`GET`)
- `-H, --header` 添加自定义头部(`Key: Value`,可重复)
- `-ua, --user-agent` 设置自定义 User-Agent 头部
- `-c, --cookies` Cookie 字符串(`k=v; k2=v2`)
- `-b, --body` 请求体数据
- 性能与传输:
- `-t, --threads` 工作线程数(默认:5)
- `-rl, --rate-limit` 每秒最大请求数(跨线程全局限制)
- `-p, --proxy` HTTP/SOCKS 代理
- `--insecure` 跳过 TLS 验证
- 降噪与输出:
- `--min-length` 忽略小于 N 字节的响应
- `--exclude-length` 忽略精确的响应大小(逗号分隔)
- `-v, --verbose` 显示每个请求的详细输出
- `-o, --output` 将结果导出为 JSON
## 提示(减少误报)
Web 服务器、反向代理和 WAF 通常会应用不同的标准化规则(路径解码、修剪、斜杠处理、头部解析、缓存等),因此模糊测试可能产生 **误报**:你可能会看到返回 `200 OK` 的响应,但这并非真正的绕过,而只是与你预期不同的“正常”行为。
推荐工作流程:
- 从 **低覆盖** 开始(例如 `-L 1`),并手动审查结果。
- 识别 consistently 返回的“噪声”响应(通常为相同长度的页面、默认错误页面、重定向等)。
- 使用以下方式过滤:
- `--exclude-length` 忽略已知的响应大小
- `--min-length` 跳过空或小型响应
- 调整好过滤器后,提高覆盖等级(`-L 2` / `-L 3` / `-A`),在保持有效发现的同时减少噪声。
## 示例
1. 基本扫描(等级 1)
```
python3 fbps.py https://example.com/secret
```
2. 过滤噪声
```
python3 fbps.py --exclude-length 1234,5678 --min-length 100 https://example.com/secret
```
3. 提高覆盖等级(等级 3)
```
python3 fbps.py -L 3 https://example.com/secret
```
4. 使用所有常见方法
```
python3 fbps.py -A https://example.com/secret
```
5. 代理 + 速率限制 + JSON 输出
```
python3 fbps.py -L 3 -p http://127.0.0.1:8080 -rl 5 -o results.json https://example.com/secret
```
## 测试等级(实际运行内容)
每个等级包含前一等级的所有功能。
**等级 1**
- 使用 `data/path_fuzz.txt` 中的载荷进行 URL 模糊测试
- 使用 `data/path_suffix.txt` 进行 URL 后缀/追加模糊测试
- 使用 `data/params.txt` 进行查询参数模糊测试
- 协议切换测试(http ↔ https)在原始目标 URL 上
- 大写路径段变体
- API 版本降级变体(例如存在 `/vN` 段时 `v3 → v2 → v1`)
- 在原始目标 URL 上启用/禁用基本尾随斜杠
**等级 2**
- 混合大小写路径段变体
- 使用 `data/default_headers.txt` 进行头部模糊测试
- 使用 `data/raw_bytes.txt` 通过原始请求测试标准化不一致
**等级 3**
- 扩展至生成 URL 的尾随斜杠变体、头部模糊测试、查询参数及原始目标修剪
## 实验室环境
如需受控测试和载荷调整,**[FBpsLab](https://github.com/Uglybeard/FBps-lab)** 提供一个容器化环境,包含故意配置错误的 Nginx/Flask 场景,演示位置优先级问题、标准化差异、基于头部的绕过条件以及 API 版本差异。该实验室包含有文档记录的易受攻击端点,可用于验证检测覆盖范围,并在生产测试前最小化误报。
## 注意事项
- **词表 / 载荷来源**:FBps 从 `data/` 加载模糊测试数据(例如 `path_fuzz.txt`、`path_suffix.txt`、`default_headers.txt`)。请通过编辑这些文件来调整覆盖范围。
- **常用方法列表(`-A`)**:方法从 `data/methods.txt` 加载,因此你可以自定义集合而无需修改代码。
- **标准化不一致(可选)**:等级 2+ 还会测试原始请求目标字节后缀,以检测标准化差异。使用代理(例如 Burp/ZAP)时请注意,“原始”请求目标字节可能被代理链标准化或重写,从而降低修剪不一致检查的有效性。
- **负责任使用**:仅在明确授权下运行,并建议在调整载荷和等级时使用受控实验室环境。
标签:401绕过, 403绕过, API安全, API版本降级, HTTP方法测试, HTTP模糊测试, JSON报告, JSON输出, Level级扫描, Python安全工具, URL模糊测试, User-Agent自定义, Web安全, 代理支持, 反向代理安全, 告警, 响应过滤, 头部操作, 安全测试, 开源安全工具, 攻击性安全, 查询参数模糊测试, 蓝队分析, 访问控制绕过, 误配置检测, 请求变体, 路径规范化, 路由异常, 逆向工具, 逆向工程平台