call-yog/pocforge
GitHub: call-yog/pocforge
一款 Web 漏洞扫描器,区别于同类之处在于为每个发现的漏洞自动生成可运行的 PoC 工件,显著缩短漏洞初审时间。
Stars: 0 | Forks: 0
# pocforge
[](https://github.com/call-yog/pocforge/actions/workflows/ci.yml)
[](LICENSE)
[](pyproject.toml)
一款为您自动编写 PoC 的 Web 漏洞扫描器。
大多数扫描器在得出*“存在漏洞:是”*时便止步不前。而这也正是漏洞初审员通常会直接丢弃的那一半结果。`pocforge` 会为每一个发现生成一个可运行的工件——例如 HTML 页面、curl 命令或自动提交的表单——审查者可以直接在浏览器中打开它,直观地看到漏洞被触发。
它的重点不在于提供更好的检测,而在于缩短漏洞初审时间。
## 检测内容
| ID | 漏洞 | 严重程度范围 | PoC 工件 |
| ---------- | --------------------------------------------------- | -------------- | ------------------------------------- |
| CORS-001 | 反射攻击者 Origin + 凭据 | CRITICAL | 读取受害者数据的 HTML |
| CORS-002 | 反射攻击者 Origin,无凭据 | MEDIUM | HTML(未认证读取) |
| CORS-003 | 接受 `Origin: null` + 凭据 | HIGH | 沙盒 iframe HTML |
| REDIR-001 | 开放重定向(基础 + 5 种绕过 payload) | HIGH / MEDIUM | 可点击 URL + curl 复现 |
| CSRF-001 | 无 anti-CSRF token 的 POST 表单 | HIGH / MEDIUM | 自动提交的 HTML 表单 |
| CLICK-001 | 页面可被嵌入框架(无 XFO,无 `frame-ancestors`) | HIGH | 覆盖式点击劫持页面 |
运行 `pocforge --list-checks` 可从工具中打印此列表。
## 无法实现的功能
- **认证扫描。** 不涉及登录流程,也不处理会话。如果您需要 cookie,请通过 `--burp` 路由流量,让代理去添加它们。
- **爬虫。** 请直接提供 URL,它只会测试这些 URL,不会对您的范围文件进行蜘蛛爬取。
- **将 `ACAO: *` 视为一个发现。** 浏览器拒绝在这种情况下发送凭据,将其作为漏洞上报只会让您在 HackerOne 上损失声誉。
- **隐藏流量。** 每次探测都会携带 `User-Agent: pocforge/...` 标头。请假定 WAF 已经发现了您。
## 安装
```
pip install -e .
```
要求 Python 3.10+。
## 用法
```
# 单个 URL → 将 markdown 报告打印到 stdout
pocforge https://target.example.com/
# 单个 URL → 将 report.md 和每个 PoC 文件写入到一个目录中
pocforge https://target.example.com/ -o reports/target/
# 批量
pocforge -f targets.txt -o reports/ --burp
# 通过管道传递给其他工具
pocforge https://target.example.com/ --json | jq '.[].findings[].check_id'
# 强制所有流量通过 Burp (--proxy http://127.0.0.1:8080 --insecure 的别名)
pocforge https://staging.example.com/ --burp
```
`-o` 目录包含:
```
reports/target/
├── report.md
├── 01_cors_creds_poc.html
├── 02_cors_null_poc.html
└── 03_clickjacking_poc.html
```
Markdown 是您的报告草稿。HTML 文件是您需要附加的证据。初审员打开它们,漏洞触发,然后他们支付赏金。
## 示例输出
请参阅 [`examples/sample_run/`](examples/sample_run/) 获取真实的扫描输出(针对故意设置为存在漏洞的 httpbin 端点进行 CORS + 点击劫持测试)。
如需查看完整的实战示例——包括针对 Acunetix vulnweb 测试应用的发现、扫描以及最终生成的 PDF 报告——请参阅 [`examples/sample_engagement/`](examples/sample_engagement/)。该流程完全由 [`examples/recon_scan.ps1`](examples/recon_scan.ps1) 端到端驱动(域名 → Wayback URL 发现 → [`recon_filter.py`](examples/recon_filter.py) → pocforge)。
## 架构
```
pocforge/
├── detectors/ # one file per bug class — (client, target) -> [Finding]
├── poc/ # one file per bug class — Finding -> PoC artifact
├── http_client.py # shared httpx.Client (proxy, timeout)
├── models.py # Finding / Evidence / PoC / ScanReport
├── reporter.py # markdown + per-PoC file output
└── cli.py
```
检测器是基于共享 HTTP 客户端的纯函数。添加一个新的漏洞类只需在 `detectors/` 中添加一个文件,在 `poc/` 中添加一个文件,并在注册表中添加一行。详情请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 测试
```
pip install -e ".[dev]"
pytest -v
```
包含 13 个测试,全部针对 `httpx.MockTransport` 运行——无需网络,具有确定性,耗时约 1.5 秒。
## 路线图
- 带有内置 OOB 回调监听器的 SSRF 检测器(无需 Burp Collaborator)
- JWT alg 混淆 / 弱密钥 / `kid` 注入
- 竞争条件测试器(Kettle 风格的单数据包攻击)
- GraphQL 别名批处理、内省滥用
- OAuth `redirect_uri` 链分析(与 REDIR-001 组合使用)
## 致谢
站在巨人的肩膀上:
- [James Kettle](https://portswigger.net/research) — 单数据包竞争攻击、缓存投毒、CORS 研究
- [Sam Curry](https://samcurry.net/) 及汽车行业研究团队 — OAuth 链构造技术
- [PortSwigger Web Security Academy](https://portswigger.net/web-security) — 这里的每个检测器最先都是针对这些实验测试的
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/) — 修复文案的权威参考
## 许可证
[MIT](LICENSE)。
标签:CISA项目, PoC生成, Python, Web安全, 加密, 动态分析, 安全规则引擎, 文档结构分析, 无后门, 漏洞扫描器, 蓝队分析, 运行时操纵, 逆向工具, 防御加固