内容
# 项目ORTHRUS
**授权安全测试的自动化漏洞发现与利用确认框架。**
[](LICENSE)
[](https://www.python.org/)
[](#-legal--ethical-use)
[](https://colab.research.google.com/github/ankitjha67/orthrus/blob/main/examples/orthrus_colab.ipynb)
ORTHRUS 爬取目标,识别其技术栈,运行 59 个漏洞扫描器,然后通过专门的利用确认阶段重新验证有趣的发现 - 因此报告区分“看起来很脆弱”(暂定)与“已被证明被利用”(已确认)。它生成 JSON / CSV / HTML / PDF / SARIF / Markdown 报告,包含 CVSS v3.1 + v4.0 评分和 OWASP / CWE / PCI-DSS / NIST-CSF / MITRE ATT&CK 映射 - 以及可选的 [**AI 编写的顾问报告**]( #-ai-consultant-report-orthrus-ai-report) (Markdown / HTML / PDF),严格基于这些发现及其逐字证据。
**运行扫描,然后在内置仪表盘中查看结果** (`orthrus serve`):


<sub>仪表盘按严重性/置信度/CWE 显示发现结果,交互式 **攻击面图** (`orthrus surface`)和 **Repeater** 用于手动验证。喜欢终端吗?完整的运行结果也会在那里显示:</sub>

<sub>对捆绑的仅限 127.0.0.1 的实践目标进行实际扫描。从任何 JSON 报告中重新生成此视图,方法为 [`examples/render_report_ui.py`](examples/render_report_ui.py)。</sub>
### 试用,一键完成
```bash
# 无需克隆,无需 Python 设置 - 拉取镜像并扫描捆绑的实践目标
docker run --rm ghcr.io/ankitjha67/orthrus scan -t http://127.0.0.1:8791 --scope 127.0.0.1
# 或者,从发布页面获取独立的二进制文件(无依赖项):
# https://github.com/ankitjha67/orthrus/releases → ./orthrus scan -t … --scope …
```
📊 **证明它在真实目标上运行:** [`docs/PROOF.md`](docs/PROOF.md) 记录了对授权范围(DVGA GraphQL,一个 Oracle WebLogic 控制台,与 7 个 CISA-KEV CVE 匹配的未经身份验证的 Redis)以及 1065 测试/ lint-clean 质量门的重现实时发现。
🎬 **观看运行:** [`docs/DEMO.md`](docs/DEMO.md) - 6 步演练(扫描 → 攻击图 → 运行手册 → 补丁 → 云态势 → 代理)带有真实输出,可通过 [`demo.sh`](demo.sh) 在一个命令中重现。
📐 **完整系统规格:** [`docs/PRD.md`](docs/PRD.md) - 详细的、已实施的系统 PRD:每个子系统(59 个扫描器,18 个确认器,18 个侦察模块),数据/配置/范围/存储模型,确认原则和高级扫描器及方法的路线图。
> **状态和定位。** ORTHRUS 是一个早期(v0.1.0)的、积极开发的项目,构建为现代 DAST 流水线的深入、手动探索。它是一个 **集成框架** - 侦察 → 扫描 → 利用确认 → 相关性 → 报告在一个工具中 - 旨在 **补充** 而不是替换成熟且经过战斗测试的工具,如 Burp Suite、OWASP ZAP 或 nuclei。验证其发现结果,并期望有粗糙的边缘。欢迎报告错误、假阳性报告和反馈。
---
> ## ⚠️ 法律和伦理使用 - 运行前请阅读
>
> **ORTHRUS 是进攻性安全工具。它发送真实的攻击载荷,并在确认阶段积极尝试利用发现结果。**
>
> - ✅ 仅在您 **拥有** 的系统上使用它,或您持有 **明确、书面授权** 来测试(签署的参与/范围文件、漏洞悬赏计划规则或您自己的实验室)。
> - ❌ 在没有权限的情况下扫描、利用或访问系统在大多数司法管辖区都是 **非法** 的(例如美国的 CFAA、英国的计算机滥用法、欧盟的信息系统攻击指令),可能会导致刑事起诉和民事责任。
> - 🧭 **您** 完全负责如何使用此软件以及是否在授权和当地法律范围内使用。
> - 🚫 作者和贡献者按原样提供此工具,**不提供任何保证** ,并且在滥用或其造成损害的情况下 **不承担任何责任** 。
>
> 如果您没有书面许可来测试目标,**请不要将 ORTHRUS 指向它。** 使用捆绑的故意漏洞的实践目标或自托管实验室(参见 [安全试用](#-try-it-safely))。
>
> 作为一个防护措施,ORTHRUS 默认拒绝:每个出站请求都会根据您声明的参与范围进行验证,然后再发送,并且解析后的范围会在每次运行开始时打印。这是安全辅助工具,**不是** 授权的替代品。参见 [范围强制](#-scope-enforcement-the-safety-boundary)。
---
## 目录
- [功能](#-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 个模块)**
- 范围感知的网络爬虫,被动技术指纹识别
- 无头浏览器(动态)爬取 + SPA 客户端路由发现 - 捕获 JS 渲染的 XHR/fetch 端点
- 参数挖掘(Arjun 风格的隐藏参数发现)
- JavaScript 分析(端点 + 秘密提取),**源映射恢复** (从泄露的 `.map` 文件中恢复端点),内容发现
- **robots.txt / sitemap.xml** 端点发现(站点地图索引 + `.gz`)和 **`/.well-known/`** 探测(security.txt,OpenID/OAuth 配置 → 身份验证端点)
- 子域名枚举,DNS 枚举(+ AXFR 尝试),WAF 检测
- REST/GraphQL API 发现,Wayback Machine 历史 URL
- 被动 IP 地址情报(反向 DNS / ASN / 地理 / 云归属)+ 同宿主机收集
- Nmap 端口扫描(可选;需要 `nmap` 二进制文件)
**漏洞扫描器(59 个)**
| 类别 | 扫描器 |
|---|---|
| 注入 | SQLi(错误/布尔/基于时间的,WAF 躲避),命令注入,SSTI,LFI,XXE,NoSQL, **LDAP**,**XPath / XQuery**,CRLF / 响应拆分,HTTP 请求走私(CL.TE/TE.CL + **CL.0 desync**),CSV / 公式注入 |
| XSS | 反射型(内容类型感知),基于 DOM,存储型(浏览器验证), **浏览器污染引擎** (仪器化源→汇聚:URL 数据到达 eval/innerHTML/document.write = DOM XSS,location.assign/window.open = 客户端重定向) |
| 访问 / 逻辑 | IDOR,**多身份授权矩阵(BOLA/BFLA,Autorize 样式 `--identities`)**,**特权提升强制浏览(未链接的管理员路由通过身份晶格)**,CSRF,开放重定向,竞争条件,业务逻辑(参数篡改 / HPP),主机头注入(密码重置中毒) |
| API(OWASP API 前 10 名) | 质量分配 / 对象属性注入 |
| 身份验证 / 会话 | 身份验证会话分析,默认凭证,JWT(alg:none,弱密钥,jku/x5u/kid 头攻击, **RS->HS 算法混淆** 通过发布的 JWKS), **OAuth/OIDC 流配置错误(缺少 state/PKCE,隐含流,重定向_uri 接管)**, **SAML 响应检查(未签名断言,签名包装,NameID 注释截断)** |
| 服务器端 | SSRF(带外 + 元数据),**OS 命令注入(输出 / 时间 / OOB 回调盲 RCE)**,反序列化,原型污染(客户端和服务器端) |
| 配置 / 传输 | 安全标头, **CSP 弱点分析**,**混合内容 / 不安全传输引用**,CORS,TLS 分析,暴露的文件,**目录列表 / autoindex**,缓存中毒,Web 缓存欺骗,框架调试暴露,无限制文件上传,子域名接管, **HTTP 配置错误(TRACE/XST,危险方法)** |
| 协议 / API | GraphQL(内省,字段建议泄露,查询批处理 + 别名重载 + 循环片段 DoS,调试/堆栈跟踪披露, **参数注入 - 内省模式,然后使用 SQLi / OS 命令 / SSTI 模糊变异和查询参数** - DVGA 级),WebSocket, **gRPC 服务器反射暴露**, **影子 / 不正确的库存 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 | 提示注入 + 系统提示 / 敏感信息披露(OWASP LLM 前 10 名) |
| 服务 / 基础设施 | 未验证的服务暴露(Redis,Memcached)通过原生协议探针 |
主动注入扫描器共享一个 **WAF 躲避编码器库** (URL / 双 URL / 混合大小写 / 评论间距 / HTML 实体 / unicode);在 `--aggressive` 下,会自动尝试传输存活的变体。
**利用确认(18 个模块)** - 重新验证发现结果以将置信度升级为 `confirmed`:
- **注入** - SQLi,命令注入,SSTI,LFI,XXE, **NoSQL** (驱动程序错误重放)
- **XSS** - 默认情况下使用 Playwright 执行浏览器(窗口标志/对话框 + 截图)
- **重定向 / 头部** - 打开重定向, **CRLF / 响应拆分** (新鲜的 nonce 头部存活), **主机头注入** (一个全新的攻击者主机被反射到链接/重定向中)
- **访问 / 对象** - **IDOR** (顺序对象枚举重放:相邻 ID 解析,不可能的 ID 不解析), **质量分配** (一个新鲜的每个字段_nonce 重新绑定到响应对象)
- **跨源 /令牌** - **CORS** (任意源反射重新验证,使用全新的攻击者源创建), **JWT** (一个弱 HMAC 密钥被恢复并用于生成有效签名的令牌 - 密钥永远不会发出)
- **JS-runtime / DoS** - **服务器端原型污染** (一个新鲜的 `__proto__` 哨兵通过 clean-before/polluted-after 差异持续存在于新对象), **GraphQL DoS** (查询批处理和别名重载放大重新发布和重新观察)
- **带外** - SSRF(协作服务器回调)
确认功能在查询字符串 **和** POST/JSON 正文参数上运行,并 **并发运行** (以 `concurrency` 为界),因此 WAN 往返时间重叠而不是相加。
它故意涵盖了 *主动可利用* 的类。已经通过观察证明的发现结果(缺少安全标头,废弃的 TLS,已知 CVE 产品暴露,标头披露,暴露的服务,请求走私,GraphQL 内省)作为 `firm`/`confirmed` 从检测本身发出。几个类别故意 **仅检测** 因为没有 *安全* 的通用自动化利用程序 - 最值得注意的是 **不安全反序列化** (被动序列化 blob 签名;证明 RCE 需要目标特定的小工具链) - 因此 ORTHRUS 报告它们而不是发明一个令人误解的确认。
**报告**
- 格式: **JSON, CSV, HTML, PDF, SARIF, Markdown, MITRE ATT&CK Navigator 层**
- 模板: **高管** , **技术** , **合规**
- **CVSS v3.1 + v4.0** 评分; **OWASP Top 10 / CWE / PCI-DSS / NIST-CSF / MITRE ATT&CK** 映射
- 严重性过滤,徽标品牌,嵌入式截图和原始请求/响应证据
**平台**
- 异步核心(`httpx`,HTTP/2),每主机令牌桶速率限制,用户代理旋转
- 无头浏览器引擎(Playwright/Chromium)用于 DOM/存储的 XSS 和 JS 渲染的爬取
- 带外回调服务器(本地侦听器)用于盲 SSRF/RCE 检测
- 可插拔的扫描器/利用/侦察/报告模块在启动时自动发现
- SQLite(开发)或 **PostgreSQL** (+ Alembic 迁移);可选的 **分布式** 扫描通过 Celery/Redis
- OpSec:AES-256-GCM 静态证据加密,操作员审计日志,HAR 导出
**平台和集成**
- **REST API** (`orthrus serve`,FastAPI)带有自动 Swagger 文档 `/docs`,以及提供的 **Web 仪表盘**
- **MCP 服务器** (`orthrus mcp`)将扫描/发现结果作为 AI 代理的工具
- **外部工具编排** ( `--tools nuclei`)- 运行最佳实践 CLI 并将其输出规范化为 ORTHRUS 发现结果
- **IaC 配置审计** (`orthrus iac`)- Dockerfile / docker-compose / Terraform,完全离线
## 🔁 工作原理
ORTHRUS 运行一个四阶段的管道。每个阶段的每个网络请求都通过强制范围的 HTTP 客户端。
```mermaid
flowchart LR
A[目标 + 范围] --> B[侦察]
B --> C[扫描]
C --> D[利用 / 确认]
D --> E[报告]
B -. 资产 & 端点 .-> DB[(发现结果 DB)]
C -. 发现结果 .-> DB
D -. 确认结果 -> DB
DB --> E
subgraph guard [范围强制的 HTTP 客户端默认拒绝]
B
C
D
end
```
1. **侦察** - 发现主机、端点、参数和技术。
2. **扫描** - 对发现的注入点运行所选扫描器;发出置信度为 `tentative`/`firm` 的发现结果。
3. **利用 / 确认** - 发出受控的载荷(并且,对于 XSS,在浏览器中执行它,对于 SSRF,等待带外回调)
4. **报告** - 将发现结果(带有 CVSS,合规映射和证据)渲染到您选择的格式。
## 🛡️ 范围强制(安全边界)
`orthrus.utils.scope.ScopeValidator` 是承载安全控制负载的结构。 它是 **默认拒绝**:主机/端口/路径仅在您的 `ScopeConfig` 显式授权时才会联系。 `orthrus.core.http_client.HttpClient` 在每次请求 **之前** 和 **重定向跳转** 时都会与其协商,而无头浏览器受相同的检查约束。 扫描器模块必须使用 `HttpClient` 而不是原始 `httpx`,因此无法绕过边界。
解析后的范围在每次运行开始时都会打印,以便您确认参与边界:
```text
授权范围 - 域=['*.target.com'] IP范围=['10.0.0.0/24'] 端口=[80, 443] 排除=['/admin/delete//. *']
```
`--scope auto` 从目标主机导出一个最小范围;**实际参与应该始终传递显式 `--scope`。**
## 📋 需求
- **Python 3.11+** (在 3.14 上开发,Windows 11)
- “精简核心”依赖项是纯 Python / wheels,在 Windows 上安装时无需外部二进制文件。较重的集成是可选的额外功能。
## 📦 安装
```bash
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 .
```
可选依赖项组:
```bash
pip install -e ".[browser]" # Playwright 无头浏览器(DOM/存储 XSS,PDF)
pip install -e ".[scanners]" # pyjwt, cryptography, sslyze, paramiko, websockets
pip install -e ".[recon]" # python-nmap(还需要 nmap 二进制)
pip install -e ".[reporting]" # weasyprint(替代 PDF 后端;默认 PDF 使用 [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
```
**或跳过克隆** - 运行发布的容器镜像或独立二进制文件:
```bash
# Docker(核心 + 扫描器 + API/仪表盘;无需本地 Python)
docker run --rm ghcr.io/ankitjha67/orthrus scan -t http://TARGET --scope TARGET
docker run --rm -p 8000:8000 ghcr.io/ankitjha67/orthrus serve --host 0.0.0.0 # 仪表盘
# 独立二进制文件(无依赖项)- 从发布页面下载,然后:
./orthrus scan -t http://TARGET --scope TARGET
```
每个 [GitHub 发布](https://github.com/ankitjha67/orthrus/releases) 都附带适用于 Linux / macOS / Windows 的预构建二进制文件和容器镜像。
> **jwt** 和 **tls** 扫描器需要 `[scanners]`;**dom-xss** / **stored-xss** 和 XSS 确认需要 `[browser]` + `playwright install chromium`。每个模块在缺少额外功能时都会干净地禁用;精简核心仍然运行 **所有其他功能**。
## 💻 在 VS Code 或 Google Colab 中运行
如果您更喜欢有指导的复制粘贴设置?有两个详细的逐步教程位于 **[docs/USAGE_VSCODE_COLAB.md](docs/USAGE_VSCODE_COLAB.md)**:
- **VS Code** — 虚拟环境设置、推荐扩展、运行捆绑的实践目标、断点调试 (`launch.json`) 和测试/ lint 工作流。
- **Google Colab** — 零本地安装,所有操作都在浏览器中。打开即用的笔记本并选择 **Runtime → Run all**:
[](https://colab.research.google.com/github/ankitjha67/orthrus/blob/main/examples/orthrus_colab.ipynb)
## 🚀 快速开始
```bash
# 仅限侦察,范围自动从目标派生
orthrus recon -t https://example.com --crawl-depth 3
# 完整管道(侦察 → 扫描 → 确认 → 报告)→ JSON
orthrus scan -t https://example.com -o report.json
# 查看所有选项
orthrus --help
orthrus scan --help
```
## 🧪 安全试用
不要在别人的系统上学习该工具。使用以下**授权**目标:
- **捆绑实践目标。** 该仓库附带一个故意暴露漏洞的应用,位于 `tests/integration/reflecting_target.py`,可在本地运行所有扫描器:
```bash
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)。
> ⚠️ 公共漏洞/CVE 数据库(例如 Exploit-DB)编目**漏洞**,**不是授权目标**。永远不要将 ORTHRUS 指向从某处列出的实时系统;那是未经授权的访问。
## 📖 使用指南
ORTHRUS 的核心子命令是 `recon`、`scan`、`exploit` 和 `report`,以及扫描后分析和交付:`findings`(终端分诊视图)、`triage`(重复/聚类 + 可选 LLM 假阳性判断)、`chains` / `graph`(关联发现成攻击路径 / 最大杀伤链)、`runbook`(综合整治计划,按最高杠杆修复 - 即打破攻击路径的修复 - 优先)、`finding`(设置发现状态/所有者)、`notify`(将高严重性发现推送到 Slack / Jira,带有 `--dry-run`)、`patch`(生成具体的配置/代码整治补丁每个发现)和`ai-report`(大四级顾问报告 - 确定性证据 + AI 叙述,通过本地或任何市场 LLM)。
自主和姿态:`agent`(一个有界的 LLM 计划器,顺序执行现有的范围强制执行的非破坏性扫描器 - 没有 shell,没有任意代码)、`cloud`(只读 CSPM/IAM 姿态 + 有毒组合分析)和 `proxy`(一个范围感知的捕获代理,从手动浏览中为扫描器提供数据)。
实用命令:`doctor`(环境准备)、`modules`(模块库存)、`diff`(比较两次扫描)、`scans`(列出过去的扫描)、`benchmark`(检测准确性测试)、`update`(刷新 CISA-KEV 情报)、`serve`(REST API + 仪表板)、`mcp`(用于 AI 代理的 MCP 服务器)、`iac`(基础设施即代码审计)和 `completion`(shell 补全)。运行 `orthrus --help` 获取完整列表。
### `orthrus scan` — 完整管道
```bash
# 显式参与范围(通配符域名 + 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
# 仅运行特定的扫描器模块
orthrus scan -t https://app.target.com --modules sqli,xss,ssti,ssrf -o report.json
# 攻击性模式还启用基于时间的盲测试(SQLi/cmd)和竞争条件
orthrus scan -t https://app.target.com --aggressive -o report.json
# 身份验证扫描(重用捕获的会话 cookie + 额外标头)
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
# 禁用无头浏览器(跳过 DOM/存储的 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]` 额外的浏览器/存储的 XSS 和 JS 渲染的爬取会自动包含在内。**您拥有或明确授权测试**的网站的安全实时友好流程:
```bash
# 1)预览参与范围 + 计划 - 不发送流量
orthrus scan -t https://yoursite.com --scope "yoursite.com,*.yoursite.com" --dry-run
# 2)使用温和的设置运行完整的管道 → 技术 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 # 列出扫描,复制 ID
orthrus report --scan-id <id> --format pdf --template executive -o reports/yoursite_exec
orthrus report --scan-id <id> --format sarif -o reports/yoursite # CI / 代码扫描
orthrus report --scan-id <id> --format json -o reports/yoursite # 机器可读
```
根据您的目标进行调整:
- **更深入的测试**(更多负载 - 谨慎使用,理想情况下在预发布环境):添加 `--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` 以在出现高或更严重的发现时退出非零。
> 仅扫描您**拥有**或持有**书面授权**的主机,并保持 `--scope` 紧密(默认拒绝 - 仅列出的主机被联系)。在共享托管环境中,请在进行主动扫描之前检查提供商的策略。
### `orthrus recon` — 仅限侦察
```bash
# 所有侦察模块(指纹识别、爬取、JS、内容、WAF、API、DNS)
orthrus recon -t https://example.com -o recon.json
# 打开/关闭模块;添加子域名枚举(需要 *.domain 范围)和 Wayback
orthrus recon -t https://target.com --scope "*.target.com" \
--subdomains --wayback --no-content --crawl-depth 5
```
### `orthrus report` — 渲染现有扫描
```bash
# 从存储的扫描中生成报告;选择格式 + 模板
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`
```bash
orthrus exploit --scan-id scan-abcd1234
```
> 注意:确认在 `orthrus scan` 期间自动运行。独立从 DB 重放尚未实现 - 重新运行扫描以(重新)确认。
## ⚙️ 配置
运行时设置从环境变量(前缀 `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 情报凭证 | _(无)_ |
```bash
# 示例: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** — HTML 报告渲染为 PDF(需要 `[browser]`)。
- **SARIF** — 静态分析结果交换格式,用于 CI / 代码扫描仪表板(例如 GitHub 代码扫描);与 `--fail-on` 结合使用以控制管道。
- **Markdown** — 用于票证、拉取请求和 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 矩阵上查看扫描。
### 🌟 AI 顾问报告 (`orthrus ai-report`)
将扫描转换为 **大四级渗透测试交付成果**:每个发现、CVSS 分数和记录的请求/响应都被 **逐字** 渲染,并且语言模型围绕这些事实编写顾问叙述 - 执行摘要、每个发现的技术描述 / 业务影响 / 可能性 / 利用走通 / 补丁建议、关联的攻击链故事和分阶段的补丁建议。因为发现是固定的,证据被引用,**模型无法编造漏洞** - 它解释和上下文化仅扫描器已经证明的内容。
```bash
orthrus ai-report --scan-id <id> -o report.md # Claude(ANTHROPIC_API_KEY)
orthrus ai-report --scan-id <id> --format pdf # 客户端 PDF(样式 HTML → Chromium)
orthrus ai-report --scan-id <id> --format html # 自成体系、样式 HTML 交付成果
orthrus ai-report --scan-id <id> --llm ollama:llama3.1 # 完全本地 - 任何主机都不离开
orthrus ai-report --scan-id <id> --llm openai:gpt-4o # OpenAI(OPENAI_API_KEY)
orthrus ai-report --scan-id <id> --dry-run # 完整结构 + 证据,无模型调用
```
**原生 PDF / HTML,而不是 Markdown。`--format html|pdf` 渲染样式分页大四级文档(封面、分类标志、文档控制表、严重性着色发现表);PDF 重用无头 Chromium 管道。Markdown(`--format md`,默认)可用于差异化和管道。
**像顾问一样进行重复分组。** 共享一个根本原因的发现 - 例如,七个参数上的反射型 XSS 或 cookie 在四个响应中缺少一个标志 - 折叠成 **一个** 发现,并 *受影响实例* 表格列出每个端点/参数,而不是七个几乎相同的条目( `--no-group` 保持它们单独)。继承的默认 CVSS 分数与每个发现的严重性进行协调,因此低严重性子发现永远不会显示关键分数。
**模型无关:**Claude、OpenAI、任何 OpenAI 兼容的端点(Azure、Groq、OpenRouter、vLLM、LM Studio - 通过 `ORTHRUS_LLM_BASE_URL`)、或 **本地 Ollama` 模型,以便敏感发现永远不会离开您的基础设施。凭证和捕获的证据中的 Cookie 被红化后发送到远程模型。叙述是 AI 生成的,并基于记录的证据 - 审查后交付给客户。
## 🏭 生产:PostgreSQL & 分布式扫描
```bash
# PostgreSQL 后端(需要 [postgres]: asyncpg + alembic)
export ORTHRUS_DB_URL="postgresql+asyncpg://orthrus:orthrus@localhost:5432/orthrus"
alembic upgrade head
# 分布式扫描 Celery 工作者(需要 [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 构建整个堆栈(应用 + 工作者 + Redis + Postgres)与 Docker
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
```
> 分布式离线检测需要一个可共享的、可外部访问的回调服务器(例如 Interactsh);内置的本地监听器仅为同一主机目标服务。
## 🧱 架构和项目布局
```
orthrus/
core/ 配置、作用域强制的 HTTP 客户端、浏览器引擎、回调服务器、编排器、模式
recon/ 爬取器、动态/SPA 爬取、参数挖掘、指纹识别、JS 分析器、源代码恢复、内容发现、子域名/DNS 枚举、WAF、API、路易贝克、端口
scanners/ 59 个扫描器 + 基接口 + 注册表
exploits/ 18 个确认模块 + 基接口 + 注册表
integrations/ 外部工具适配器(nuclei, ...)标准化为发现结果
intel/ CVE 威胁情报丰富(CISA KEV + EPSS)
iac/ 基础设施即代码(Dockerfile/compose/Terraform)不合规分析
api/ FastAPI REST API + Web 仪表板;mcp_server.py = MCP 服务器
reporting/ JSON/CSV/HTML/PDF/SARIF/Markdown 生成器、CVSS 引擎、Jinja2 模板
db/ SQLAlchemy 2.0 模型、异步存储、Alembic 迁移
distributed/ Celery 应用程序、任务、目标调度器
utils/ 日志记录器、作用域验证器、速率限制器、编码
main.py Click CLI 入口点
docker/ Dockerfile + docker-compose(应用程序、工作人员、Redis、PostgreSQL)
examples/ render_report_ui.py(报告 → 主题 SVG/HTML/PNG)+ 示例报告
docs/ 截图和支持图像
tests/ 单元测试 + 捆绑的故意暴露的集成测试目标
```
## 🔌 扩展 ORTHRUS(插件)
扫描器、利用模块、侦察模块和报告器通过装饰器自动发现。创建一个继承相关基类的模块并注册到 `ORTHRUS_PLUGINS_DIR`(或树内包),它就会加入管道 - 无需核心更改。一个新的扫描器大约是:
```python
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):
# 仅使用 ctx.http(作用域强制); 产生 Finding(...) 对象
...
```
## 🧰 开发
```bash
pip install -e ".[dev]"
ruff check orthrus tests
mypy orthrus
pytest -q
```
测试套件是离线的和确定性的(单元测试 + 捆绑的脆弱目标);它不会接触网络或任何主机。
## ⚖️ 法律与合规使用
本软件仅用于**授权的安全测试、教育和研究**。
- 仅允许使用 ORTHRUS 测试您**拥有**或**明确获得书面授权**的系统,并保留该授权的副本。
- 定义准确的 `--scope` 并遵守它。范围执行是一种安全辅助工具,**不是法律保障**。
- 未经许可运行主动扫描器/利用工具可能会违反计算机滥用法(CFAA、英国CMA、欧盟2013/40等)并导致**刑事和民事责任**。
- 软件按**“原样”提供,不附带任何形式的保证**。作者和贡献者**不承担**因使用该软件而产生的任何滥用、损害、数据丢失或法律后果的责任。
- 使用 ORTHRUS 时,您需承担全部责任,并确认您拥有对每个测试目标所需的授权。
**如果有疑虑,请勿使用。** 可以使用捆绑的目标或自托管实验室进行练习。
## 🤝 贡献
欢迎提交问题和拉取请求 - 请参阅 **[CONTRIBUTING.md](CONTRIBUTING.md)** 获取开发设置、质量门控(`ruff check orthrus tests` + `pytest -q`)以及如何添加扫描器的信息。请保持更改范围安全(所有网络访问都通过范围强制执行的 `HttpClient` 进行),并为新的检测器添加测试。
在 ORTHRUS 本身发现安全问题?请遵循 **[SECURITY.md](SECURITY.md)** 中的负责任披露流程,而不是公开问题。
## 📄 许可证
[MIT](LICENSE) © 2026 Ankit Jha. 查看LICENSE文件中的额外**授权使用通知**和上面的 [法律与合规使用](#-法律与合规使用) 部分。
连接信息
猜你喜欢
暂无推荐服务器