ankitjha67/orthrus
GitHub: ankitjha67/orthrus
ORTHRUS 是一个涵盖侦察、扫描、利用确认到报告生成的全流程自动化渗透测试框架,通过重新验证机制显著降低漏洞误报。
Stars: 7 | Forks: 2
# Project ORTHRUS
**用于授权安全测试的自动化漏洞发现与漏洞利用确认框架。**
[](LICENSE)
[](https://www.python.org/)
[](#-legal--ethical-use)
[](https://colab.research.google.com/github/ankitjha67/orthrus/blob/main/examples/orthrus_colab.ipynb)
ORTHRUS 会对目标进行爬取,识别其技术栈,运行 58 个漏洞扫描器,
然后通过专门的漏洞利用确认阶段**重新验证**那些有价值的发现——
从而使报告能够区分“看起来存在漏洞”(推测性)与“已被成功利用”(已确认)。
它会生成包含 CVSS v3.1 + v4.0 评分以及 OWASP / CWE / PCI-DSS / NIST-CSF / MITRE ATT&CK 映射的
JSON / CSV / HTML / PDF / SARIF / Markdown 格式的报告。

对仅限 127.0.0.1 访问的内置练习目标进行的真实扫描。可通过 [`examples/render_report_ui.py`](examples/render_report_ui.py) 从任何 JSON 报告重新生成此视图。
📊 **在真实目标上的有效性验证:** [`docs/PROOF.md`](docs/PROOF.md) 记录了
在授权范围内(DVGA GraphQL、匹配到 7 个 CISA-KEV CVE 的 Oracle
WebLogic 控制台、未经认证的 Redis)的可重现实时发现,
以及包含 1019 个测试 / 通过 lint 检查的质量门禁。
🎬 **查看运行演示:** [`docs/DEMO.md`](docs/DEMO.md) — 包含真实输出的 6 歡演示指南(扫描 →
攻击图 → 修复手册 → 补丁 → 云安全态势 → 代理),可通过 [`demo.sh`](demo.sh) 使用一条命令重现。
📐 **完整系统规范:** [`docs/PRD.md`](docs/PRD.md) — 详尽的、针对已实现系统的 PRD:
涵盖每个子系统(58 个扫描器、17 个确认模块、18 个侦察模块)、数据/配置/范围/存储模型、
确认原则,以及高级扫描器与方法的开发路线图。
## 目录
- [功能](#-features)
- [工作原理](#-how-it-works)
- [范围强制执行](#-scope-enforcement-the-safety-boundary)
- [环境要求](#-requirements)
- [安装说明](#-installation)
- [在 VS Code 或 Google Colab 中运行](#-run-in-vs-code-or-google-colab)
- [快速开始](#-quickstart)
- [安全尝试](#-try-it-safely)
- [使用指南](#-usage-guide)
- [配置说明](#-configuration)
- [报告生成](#-reporting)
- [生产环境:PostgreSQL 与分布式扫描](#-production-postgresql--distributed-scanning)
- [架构与项目结构](#-architecture--project-layout)
- [扩展 ORTHRUS(插件)](#-extending-orthrus-plugins)
- [开发指南](#-development)
- [法律与道德使用规范](#-legal--ethical-use)
- [贡献指南](#-contributing)
- [开源许可](#-license)
## ✨ 功能
**侦察(18 个模块)**
- 具备范围感知的 Web 爬虫,被动技术指纹识别
- 无头浏览器(动态)爬取 + SPA 客户端路由发现 — 捕获 JS 渲染的 XHR/fetch endpoint
- 参数挖掘(Arjun 风格的隐藏参数发现)
- JavaScript 分析(endpoint + 敏感信息提取),**source-map 恢复**(从泄露的 `.map` 文件中恢复 endpoint),内容发现
- **robots.txt / sitemap.xml** endpoint 发现(sitemap 索引 + `.gz`)以及 **`/.well-known/`** 探测(security.txt,OpenID/OAuth config → 认证 endpoint)
- 子域名枚举,DNS 枚举(+ 尝试 AXFR),WAF 检测
- REST/GraphQL API 发现,Wayback Machine 历史 URL
- 被动 IP 地址情报(反向 DNS / ASN / 地理位置 / 云归属)+ 同主机托管收集
- Nmap 端口扫描(可选;需要 `nmap` 二进制文件)
**漏洞扫描器(58 个)**
| 类别 | 扫描器 |
|---|---|
| 注入 | SQLi(报错 / 布尔 / 时间盲注,WAF 绕过),命令注入,SSTI,LFI,XXE,NoSQL,**LDAP**,**XPath / XQuery**,CRLF / 响应拆分,HTTP 请求走私(CL.TE/TE.CL + **CL.0 失步**),CSV / 公式注入 |
| XSS | 反射型(感知 content-type),DOM 型,存储型(浏览器验证),**浏览器污点引擎**(插桩的 source→sink:URL 数据到达 eval/innerHTML/document.write = DOM XSS,location.assign/window.open = 客户端重定向) |
| 访问 / 逻辑 | IDOR,**多身份授权矩阵(BOLA/BFLA,Autorize 风格的 `--identities`)**,**提权强制浏览(通过身份格访问未链接的管理路由)**,CSRF,开放重定向,竞争条件,业务逻辑(参数篡改 / HPP),Host 头注入(密码重置投毒) |
| API (OWASP API Top 10) | 批量赋值 / 对象属性注入 |
| 认证 / 会话 | 认证会话分析,默认凭证,JWT(alg:none,弱密钥,jku/x5u/kid 头攻击,通过已发布的 JWKS 进行 **RS->HS 算法混淆**),**OAuth/OIDC 流程配置错误(缺失 state/PKCE,隐式流程,redirect_uri 接管)**,**SAML 响应检查(未签名断言,签名包装,NameID 注释截断)** |
| 服务端 | SSRF(带外 + 元数据),**OS 命令注入(输出 / 时间 / OOB 回调盲 RCE)**,反序列化,原型链污染(客户端和服务端) |
| 配置 / 传输 | 安全头,**CSP 弱点分析**,**混合内容 / 不安全传输引用**,CORS,TLS 分析,暴露的文件,**目录列表 / autoindex**,缓存投毒,Web 缓存欺骗,框架调试信息暴露,无限制文件上传,子域名接管,**HTTP 配置错误(TRACE/XST,危险方法)** |
| 协议 / API | GraphQL(内省,字段建议泄露,查询批处理 + 别名重载 + 循环片段 DoS,调试/堆栈跟踪泄露 — DVGA 级别),WebSocket,**gRPC server-reflection 暴露**,**影子 / 不当清单 API (API9)** |
| 敏感信息 | **暴露敏感信息扫描器** — AWS/Google/Slack/Stripe/GitHub 密钥 + 响应/JS 中的私钥块(已脱敏) |
| 供应链 | SCA — 已知存在漏洞的 JS 库(retire.js 风格) |
| 模板 | 声明式 Nuclei 风格 YAML/JSON 模板引擎(`--templates`) |
| 情报 | CVE 匹配器(版本 → 已知 CVE)**外加**无版本产品指纹识别(WebLogic, Confluence, Jenkins, Solr → 已知被利用的 CVE),全部通过 CISA KEV + EPSS 丰富数据(`orthrus update`) |
| AI / LLM | Prompt 注入 + 系统 prompt / 敏感信息泄露(OWASP LLM Top 10) |
| 服务 / 基础设施 | 通过原生协议探测发现未经认证的服务暴露(Redis,Memcached) |
主动注入扫描器共享一个 **WAF 绕过编码器库**(URL / 双重 URL /
大小写混合 / 注释间距 / HTML 实体 / unicode);在 `--aggressive` 模式下会自动尝试
能在传输中存活的变体。
**漏洞利用确认(17 个模块)** — 重新验证发现,将其
置信度提升至 `confirmed`:
- **注入** — SQLi,命令注入,SSTI,LFI,XXE,**NoSQL**(驱动程序错误重放)
- **XSS** — 当存在 Playwright 时默认由浏览器执行(窗口标志/对话框 + 屏幕截图)
- **重定向 / 头** — 开放重定向,**CRLF / 响应拆分**(全新 nonce 头存活),**Host 头注入**(一个全新伪造的攻击者 Host 被再次反射到链接/重定向中)
- **访问 / 对象** — **IDOR**(重现了顺序对象枚举:相邻 ID 能解析,而不合理的 ID 不能解析),**批量赋值**(一个全新的逐字段 nonce 被重新绑定到响应对象中)
- **跨域 / token** — **CORS**(通过一个全新生成的攻击者源重新验证任意源反射),**JWT**(恢复一个弱 HMAC 密钥并用于伪造一个有效签名的 token — 密钥永远不会被发送)
- **JS 运行时 / DoS** — **服务端原型链污染**(一个全新的 `__proto__` 哨兵通过清理前/污染后的差异重新持久化到一个新对象上),**GraphQL DoS**(重新发送并重新观察查询批处理和别名重载放大)
- **带外** — SSRF(collaborator 回调)
确认机制同时作用于查询字符串 **和** POST/JSON body 参数,并且是
**并发运行**的(受 `concurrency` 限制),因此 WAN 往返时间是重叠的而不是累加的。
它特意涵盖了*可主动利用*的类别。通过观察已经被明确证明的漏洞发现(缺失安全头、弃用的 TLS、
已知 CVE 的产品暴露、Banner 泄露、暴露的服务、请求走私、GraphQL 内省)在检测阶段
本身就以 `firm`/`confirmed` 状态输出。有少数类别被特意设计为**仅检测**,因为目前不存在*安全*且
通用的自动化利用方法——最明显的是**不安全的反序列化**
(一种被动的序列化 blob 签名;证明 RCE 需要针对特定目标的 gadget
链)——因此 ORTHRUS 会报告它们,而不是捏造一个具有误导性的确认结果。
**报告生成**
- 格式:**JSON, CSV, HTML, PDF, SARIF, Markdown, MITRE ATT&CK Navigator layer**
- 模板:**高管版**,**技术版**,**合规版**
- **CVSS v3.1 + v4.0** 评分;**OWASP Top 10 / CWE / PCI-DSS / NIST-CSF / MITRE ATT&CK** 映射
- 严重性过滤,Logo 品牌化,内嵌屏幕截图及原始请求/响应证据
**平台**
- 异步核心(`httpx`,HTTP/2),基于 host 的 token bucket 速率限制,User-Agent 轮换
- 用于 DOM/存储型 XSS 及 JS 渲染爬取的无头浏览器引擎(Playwright/Chromium)
- 用于盲 SSRF/RCE 检测的带外回调服务器(本地监听器)
- 可插拔的扫描器/漏洞利用/侦察/报告模块,在启动时自动发现
- SQLite(开发环境)或 **PostgreSQL**(+ Alembic 迁移);可选通过 Celery/Redis 进行**分布式**扫描
- OpSec:AES-256-GCM 静态证据加密,操作者审计日志,HAR 导出
**平台与集成**
- **REST API**(`orthrus serve`,FastAPI),在 `/docs` 提供自动 Swagger 文档,以及一个托管的 **Web 控制面板**
- **MCP server**(`orthrus mcp`),将扫描/漏洞发现作为工具暴露给 AI 代理
- **外部工具编排**(`--tools nuclei`)— 运行同类最佳的 CLI 并将其输出标准化为 ORTHRUS 的漏洞发现
- **IaC 配置错误审计**(`orthrus iac`)— Dockerfile / docker-compose / Terraform,完全离线
## 🔁 工作原理
ORTHRUS 运行一个四阶段的流水线。每一个网络请求——在每一个阶段——都会
经过强制执行范围的 HTTP 客户端。
```
flowchart LR
A[Target + Scope] --> B[Recon]
B --> C[Scan]
C --> D[Exploit / Confirm]
D --> E[Report]
B -. assets & endpoints .-> DB[(Findings DB)]
C -. findings .-> DB
D -. confirmations .-> DB
DB --> E
subgraph guard [Scope-enforced HTTP client deny-by-default]
B
C
D
end
```
1. **Recon(侦察)** — 发现主机、endpoint、参数和技术。
2. **Scan(扫描)** — 针对发现的注入点运行选定的扫描器;
输出度为 `tentative`/`firm` 的漏洞发现。
3. **Exploit / Confirm(利用 / 确认)** — 重新发送一个受控 payload(对于 XSS,在
真实浏览器中执行;对于 SSRF,等待带外回调),以将
已证实的漏洞发现的置信度升级为 `confirmed`。
4. **Report(报告)** — 将漏洞发现(包含 CVSS、合规映射和
证据)渲染为您选择的格式。
## 🛡️ 范围强制执行(安全边界)
`orthrus.utils.scope.ScopeValidator` 是核心的安全控制组件。它是
**默认拒绝**的:只有当您的 `ScopeConfig` 明确授权时,才会连接相应的
主机 / 端口 / 路径。`orthrus.core.http_client.HttpClient`
在**每次请求之前**都会查询它,并且**重新验证每一个重定向跳转**,
同时无头浏览器也受限于相同的检查。扫描器模块必须使用
`HttpClient` 而不是原始的 `httpx`,因此该边界无法被绕过。
解析后的范围会在每次运行开始时打印出来,以便您在
任何流量离开您的机器之前确认授权边界:
```
Authorized scope - domains=['*.target.com'] ip_ranges=['10.0.0.0/24'] ports=[80, 443] exclude=['/admin/delete/.*']
```
`--scope auto` 会从目标主机派生出一个最小范围;**真实的测试任务
应始终传递明确的 `--scope`。**
## 📋 环境要求
- **Python 3.11+**(基于 3.14 开发,Windows 11)
- “精简核心”依赖项是纯 Python / wheels,在 Windows 上安装
无需任何外部二进制文件。较重的集成是可选项。
## 📦 安装说明
```
git clone https://github.com/ankitjha67/orthrus.git
cd orthrus
python -m venv .venv
# Windows: .\.venv\Scripts\Activate.ps1
# Linux/macOS: source .venv/bin/activate
pip install -e .
```
可选的依赖组:
```
pip install -e ".[browser]" # Playwright headless browser (DOM/stored XSS, PDF)
pip install -e ".[scanners]" # pyjwt, cryptography, sslyze, paramiko, websockets
pip install -e ".[recon]" # python-nmap (needs the nmap binary too)
pip install -e ".[reporting]" # weasyprint (alt PDF backend; default PDF uses [browser])
pip install -e ".[postgres]" # asyncpg + alembic
pip install -e ".[distributed]" # celery + redis
pip install -e ".[dev]" # pytest, ruff, mypy
# 安装 [browser] 后,下载一次 Chromium 运行时:
playwright install chromium
```
## 💻 在 VS Code 或 Google Colab 中运行
想要一份引导式的、可直接复制粘贴的设置说明?这里有两份详细的分步指南,位于
**[docs/USAGE_VSCODE_COLAB.md](docs/USAGE_VSCODE_COLAB.md)**:
- **VS Code** — 虚拟环境配置,推荐的扩展程序,运行内置的
练习目标,断点调试(`launch.json`),以及
测试/lint 工作流。
- **Google Colab** — 零本地安装,全部在浏览器中运行。打开
随时可运行的 notebook 并选择 **Runtime → Run all**:
[](https://colab.research.google.com/github/ankitjha67/orthrus/blob/main/examples/orthrus_colab.ipynb)
## 🚀 快速开始
```
# 仅侦测,scope 自动从目标中派生
orthrus recon -t https://example.com --crawl-depth 3
# 完整 pipeline (recon → scan → confirm → report) → JSON
orthrus scan -t https://example.com -o report.json
# 查看所有选项
orthrus --help
orthrus scan --help
```
## 🧪 安全尝试
不要在别人的系统上学习使用该工具。请使用以下**已授权**的
目标:
- **内置练习目标。** 本仓库在
`tests/integration/reflecting_target.py` 处附带了一个故意设计为存在漏洞的应用,它会在本地测试每一个扫描器:
python tests/integration/reflecting_target.py 8791 # 终端 1
orthrus scan -t http://127.0.0.1:8791 --aggressive -o report.json # 终端 2
- **自建实验室**(您拥有该实例):OWASP Juice Shop,DVWA,OWASP
WebGoat,bWAPP,OWASP Mutillidae II。
- **供应商授权的公共测试站点**,明确允许扫描:
`testphp.vulnweb.com`,`testasp.vulnweb.com`,`rest.vulnweb.com` (Acunetix),
`demo.testfire.net` (IBM),`ginandjuice.shop` (PortSwigger)。
## 📖 使用指南
ORTHRUS 的核心子命令是 `recon`、`scan`、`exploit` 和 `report`,外加
扫描后分析与交付功能:`findings`(终端分类视图),`triage`
(去重/聚类 + 可选的 LLM 误报判定),`chains` / `graph`
(将漏洞发现关联成攻击路径 / 最大杀伤链),`runbook`
(整合的修复计划,按顺序排列,使得最高效的修复措施——即能
打破攻击路径的修复——排在最前面),`finding`(设置漏洞发现的状态/所有者),
`notify`(将高严重性的漏洞发现推送到 Slack / Jira,带有 `--dry-run`),以及
`patch`(为每个漏洞发现生成具体的配置/代码修复补丁)。
自动化与安全态势:`agent`(一个有边界的 LLM 规划器,它会对现有的
范围受限、非破坏性的扫描器进行排序——不运行 shell,不执行任意代码),`cloud`
(只读的 CSPM/IAM 安全态势 + 有毒组合分析),以及 `proxy`(一个
具备范围感知的捕获代理,通过手动浏览向扫描器喂数据)。
实用命令:`doctor`(环境就绪情况),`modules`(模块清单),
`diff`(比较两次扫描),`scans`(列出过往扫描),`benchmark`
(检测准确性测试套件),`update`(刷新 CISA-KEV 情报),`serve`(REST
API + 控制面板),`mcp`(用于 AI 代理的 MCP server),`iac`(基础设施即代码审计),以及 `completion`(Shell 自动补全)。运行 `orthrus --help` 获取完整列表。
### `orthrus scan` — 完整的流水线
```
# 显式指定 engagement scope (wildcard domains + CIDR),排除敏感路径
orthrus scan -t https://app.target.com \
--scope "*.target.com,api.target.com,10.0.0.0/24" \
--exclude-paths "/admin/delete/.*,/api/v1/payments" \
-o report.html --format html --template technical
# 仅运行特定的 scanner 模块
orthrus scan -t https://app.target.com --modules sqli,xss,ssti,ssrf -o report.json
# Aggressive 模式还会启用基于时间的盲注测试 (SQLi/cmd) 和 race conditions
orthrus scan -t https://app.target.com --aggressive -o report.json
# 认证扫描 (重用捕获的 session cookie + 额外的 headers)
orthrus scan -t https://app.target.com \
--auth-cookie "session=abc123; csrf=def456" \
--headers '{"Authorization": "Bearer eyJ..."}' \
-o report.json
# 通过代理路由 (例如 Burp),限制请求速率,提高超时时间
orthrus scan -t https://app.target.com --proxy http://127.0.0.1:8080 --rate-limit 10 --timeout 45
# 跳过确认阶段 (同时禁用 OOB 回调服务器)
orthrus scan -t https://example.com --no-exploit -o report.json
# 禁用 headless 浏览器 (跳过 DOM/stored XSS + 浏览器确认)
orthrus scan -t https://example.com --no-browser -o report.json
```
常见的 `scan` 选项:`--modules`,`--aggressive`,`--rate-limit`,
`--crawl-depth`,`--max-pages`,`--timeout`,`--proxy`,`--auth-cookie`,
`--user-agent`,`--callback`,`--no-exploit`,`--browser/--no-browser`,
`--exclude-paths`,`--headers`,`--threads`,`--scan-id`,`-o/--output`,
`--format`,`--template`,`--min-severity`,`--logo`,`--har`,`-v/--verbose`。
### 针对您拥有的站点的完整端到端扫描(推荐工作流)
`orthrus scan` 会在单个命令中运行全部四个阶段 — 侦察 → 扫描 → 漏洞利用确认 → 报告 —
并在您传入 `-o` + `--format` 时写入报告。安装了
`[browser]` 扩展包后,DOM/存储型 XSS 和 JS 渲染的爬取会自动包含在内。针对**您拥有或被明确授权测试的站点**,这是一个安全且对实时站点友好的流程:
```
# 1) 预览 engagement scope + 计划 — 不发送任何流量
orthrus scan -t https://yoursite.com --scope "yoursite.com,*.yoursite.com" --dry-run
# 2) 使用温和的设置运行完整 pipeline → 技术 HTML 报告
orthrus scan -t https://yoursite.com \
--scope "yoursite.com,*.yoursite.com" \
--rate-limit 10 \
--crawl-depth 3 --max-pages 200 \
--exclude-paths "/logout,/admin/delete/.*" \
-o reports/yoursite.html --format html --template technical
# 3) 从相同的已存储扫描中导出更多格式 (无需重新扫描)
orthrus scans # list scans, copy the id
orthrus report --scan-id --format pdf --template executive -o reports/yoursite_exec
orthrus report --scan-id --format sarif -o reports/yoursite # CI / code-scanning
orthrus report --scan-id --format json -o reports/yoursite # machine-readable
```
根据您的目标进行调整:
- **更深入的测试**(负载更高 — 刻意使用,最好在预发布环境):添加
`--aggressive` 以进行基于时间盲注的 SQLi/命令测试和竞争条件探测。
- **需认证的区域**:添加 `--auth-cookie "session=…; csrf=…"`(从您的浏览器开发者工具中复制已登录的
cookie),或者通过 `--login-url` 和相关参数驱动登录操作
(`orthrus scan --help`)。
- **监控每一个请求**:通过 `--proxy http://127.0.0.1:8080` 经由 Burp/ZAP 路由。
- **门控 CI**:添加 `--fail-on high`,以便在出现高危及以上漏洞发现时以非零状态退出。
### `orthrus recon` — 仅侦察
```
# 所有 recon 模块 (fingerprint, crawl, JS, content, WAF, API, DNS)
orthrus recon -t https://example.com -o recon.json
# 开启/关闭模块;添加 subdomain enum (需要 *.domain scope) 和 Wayback
orthrus recon -t https://target.com --scope "*.target.com" \
--subdomains --wayback --no-content --crawl-depth 5
```
### `orthrus report` — 渲染现有的扫描
```
# 报告从已存储的扫描中生成;选择格式 + 模板
orthrus report --scan-id scan-abcd1234 --format pdf --template executive -o exec_report
orthrus report --scan-id scan-abcd1234 --format csv -o findings
orthrus report --scan-id scan-abcd1234 --format html --template compliance --min-severity high -o audit
```
### `orthrus exploit`
```
orthrus exploit --scan-id scan-abcd1234
```
## ⚙️ 配置说明
运行时设置会从环境变量(前缀为 `ORTHRUS_`)或
`.env` 文件中读取。基本的 SQLite 运行不需要任何配置。
| 变量 | 用途 | 默认值 |
|---|---|---|
| `ORTHRUS_DB_URL` | 数据库 URL (SQLite 或 PostgreSQL) | `sqlite+aiosqlite:///./orthrus.sqlite3` |
| `ORTHRUS_DATA_DIR` | 屏幕截图 / 扫描工件目录 | `./scan_data` |
| `ORTHRUS_LOG_LEVEL` | 默认日志级别 | `info` |
| `ORTHRUS_ENCRYPTION_KEY` | base64 AES-256 密钥;静态加密敏感证据 | _(关闭)_ |
| `ORTHRUS_REDIS_URL` | Celery 中间件/后端 (分布式模式) | `redis://localhost:6379/0` |
| `ORTHRUS_PLUGINS_DIR` | 启动时自动加载的外部插件目录 | _(无)_ |
| `ORTHRUS_SHODAN_API_KEY`, `ORTHRUS_CENSYS_API_ID`/`_SECRET`, `ORTHRUS_VIRUSTOTAL_API_KEY`, `ORTHRUS_NVD_API_KEY`, `ORTHRUS_GITHUB_TOKEN` | 可选的被动侦察 / CVE 情报凭证 | _(无)_ |
```
# 示例:PostgreSQL + 静态加密
export ORTHRUS_DB_URL="postgresql+asyncpg://orthrus:orthrus@localhost:5432/orthrus"
export ORTHRUS_ENCRYPTION_KEY="$(python -c 'import base64,os;print(base64.b64encode(os.urandom(32)).decode())')"
```
## 📑 报告生成
- **JSON** — 完整的结构化输出(每一个字段、证据、漏洞利用结果)。
- **CSV** — 每个漏洞发现占据一行(严重性、置信度、CVSS、类型、URL、参数、
参数位置、CWE、OWASP),适用于电子表格/分类。
- **HTML** — 带样式的报告;`technical` 包含原始的请求/响应证据和
屏幕截图,`executive` 是摘要,`compliance` 强调框架映射。
- **PDF** — 通过无头 Chromium 将 HTML 报告渲染为 PDF(需要 `[browser]`)。
- **SARIF** — 用于 CI / 代码扫描
控制面板的静态分析结果交换格式(如 GitHub 代码扫描);与 `--fail-on` 配合使用以对流水线进行门控。
- **Markdown** — 适用于工单、pull request 和 wiki 的便携纯文本报告。
- **ATT&CK Navigator** (`--format navigator`) — 一个 MITRE ATT&CK Navigator 层级的 JSON,
根据漏洞发现数量进行热力图映射;将其放入
[mitre-attack.github.io/attack-navigator](https://mitre-attack.github.io/attack-navigator/)
中即可在 ATT&CK 矩阵上查看该扫描结果。
每个漏洞发现都带有 CVSS v3.1 + v4.0 向量/评分,并映射到 OWASP Top
10、CWE、PCI-DSS、NIST-CSF、**MITRE ATT&CK**(结构化技术 ID),以及
**MITRE D3FEND** 对抗措施。针对特定漏洞的 ATT&CK 技术选择参考了 [Anthropic-Cybersecurity-Skills](https://github.com/mukul975/Anthropic-Cybersecurity-Skills)
目录 (Apache-2.0);这些 ID 均为公开的 MITRE 事实。
**分享终端视图。** `examples/render_report_ui.py` 会将任何 JSON
报告渲染为带有主题的终端 UI(横幅、范围面板、摘要、OWASP 覆盖情况、
漏洞发现表格),并导出 **SVG + HTML** 帧(当安装了
`[browser]` 扩展时还会导出 **PNG**)——适用于文档、幻灯片和工单:
```
orthrus scan -t http://127.0.0.1:8791 -o report.json
python examples/render_report_ui.py report.json -o out/scan
# → out/scan.svg, out/scan.html, out/scan.png
```
## 🏭 生产环境:PostgreSQL 与分布式扫描
```
# PostgreSQL 后端 (需要 [postgres]: asyncpg + alembic)
export ORTHRUS_DB_URL="postgresql+asyncpg://orthrus:orthrus@localhost:5432/orthrus"
alembic upgrade head
# 跨 Celery workers 的分布式扫描 (需要 [distributed] + Redis)
celery -A orthrus.distributed.celery_app worker --loglevel=info
orthrus scan --distributed --workers 4 --redis redis://localhost:6379/0 -t targets.txt
# 或者使用 Docker 启动整个 stack (app + workers + redis + postgres)
docker compose -f docker/docker-compose.yml up -d --build
docker compose -f docker/docker-compose.yml run --rm app scan -t https://example.com
```
## 🧱 架构与项目结构
```
orthrus/
core/ config, scope-enforced HTTP client, browser engine, callback server, orchestrator, schemas
recon/ crawler, dynamic/SPA crawl, param-mining, fingerprint, JS analyzer, source-map recovery, content discovery, subdomain/DNS enum, WAF, API, wayback, ports
scanners/ 58 scanners + base interface + registry
exploits/ 17 confirmation modules + base interface + registry
integrations/ external-tool adapters (nuclei, ...) normalized into findings
intel/ CVE threat-intel enrichment (CISA KEV + EPSS)
iac/ Infrastructure-as-Code misconfig analyzer (Dockerfile/compose/Terraform)
api/ FastAPI REST API + web dashboard; mcp_server.py = MCP server
reporting/ JSON/CSV/HTML/PDF/SARIF/Markdown generator, CVSS engine, Jinja2 templates
db/ SQLAlchemy 2.0 models, async store, Alembic migrations
distributed/ Celery app, tasks, target dispatcher
utils/ logger, scope validator, rate limiter, encoding
main.py Click CLI entry point
docker/ Dockerfile + docker-compose (app, workers, redis, postgres)
examples/ render_report_ui.py (report → themed SVG/HTML/PNG) + a sample report
docs/ screenshots and supporting images
tests/ unit tests + a bundled deliberately-vulnerable integration target
```
## 🔌 扩展 ORTHRUS(插件)
扫描器、漏洞利用、侦察模块和报告器都是通过
装饰器自动发现的。只需放入一个继承了相关基类并注册
到 `ORTHRUS_PLUGINS_DIR`(或包内目录)的模块,它就会加入
流水线——无需修改核心代码。一个新的扫描器大致如下:
```
from orthrus.scanners.base_scanner import BaseScanner
from orthrus.scanners.registry import register
@register
class MyScanner(BaseScanner):
name = "my-scanner"
vuln_type = "my-vuln"
async def scan(self, ctx):
# use ctx.http (scope-enforced) only; yield Finding(...) objects
...
```
## 🧰 开发指南
```
pip install -e ".[dev]"
ruff check orthrus tests
mypy orthrus
pytest -q
```
该测试套件是离线且确定性的(单元测试 + 内置的漏洞目标);
它不会触碰网络或任何外部主机。
## ⚖️ 法律与道德使用规范
本软件仅提供用于**授权的安全测试、教育和研究目的。**
- 仅对您**拥有**或被**明确书面授权**
测试的系统使用 ORTHRUS。请保留该授权的副本。
- 定义准确的 `--scope` 并遵守它。范围强制执行是一种安全辅助手段,
而不是法律庇护。
- 未经许可对系统运行主动扫描器/漏洞利用程序可能会违反
计算机滥用法(如 CFAA、英国 CMA、EU 2013/40 及同等法规),并可能导致
**刑事和民事责任**。
- 本软件按**“原样”提供,不提供任何形式的保证**。作者
和贡献者对其任何误用、损坏、数据丢失或法律
后果**不承担任何责任**。
- 使用 ORTHRUS 即表示您对自己的行为承担全部责任,并确认您
已获得测试每个目标所需的授权。
**如有疑问,请勿使用。** 请在内置目标或自建的实验环境中进行练习。
## 🤝 贡献指南
欢迎提交 Issue 和 pull request — 请参阅 **[CONTRIBUTING.md](CONTRIBUTING.md)**
了解开发环境、质量门禁(`ruff check orthrus tests` + `pytest -q`),以及
如何添加扫描器。请保持更改对范围是安全的(所有网络访问都必须通过
强制执行范围的 `HttpClient`),并为新的检测器添加测试。
发现了**ORTHRUS 本身**的安全问题?请遵循 **[SECURITY.md](SECURITY.md)** 中的负责任披露
流程,而不是打开一个公开的 Issue。
## 📄 开源许可
[MIT](LICENSE) © 2026 Ankit Jha。请参阅 LICENSE 文件中额外的**授权使用声明**
以及上方的[法律与道德使用规范](#-legal--ethical-use)部分。
标签:API安全, CISA项目, JSON输出, Python, Web安全, 云安全态势管理, 前端应用, 搜索引擎查询, 无后门, 测试用例, 特征检测, 网络测绘, 自动化渗透测试, 蓝队分析, 运行时操纵