Forbiddem/RootXshodan

GitHub: Forbiddem/RootXshodan

一款基于 Shodan API 的组织资产侦察工具,通过 ASN 所有权验证和多维度相关性评分,精准识别目标组织真实拥有的网络资产并剔除误报。

Stars: 0 | Forks: 0

# RootXshodan **专注于 Shodan 的组织侦察。** 给定一个组织名称和/或域名 —— 它会 *并行*地通过大量相关的 dork 扫描 Shodan,然后**只保留 可证明属于你目标的资产**,并剔除无用信息。 Shodan 的常见问题:搜索 `org:"Acme"` 或 `ssl:acme.com` 会得到一堆 不相关的 host(共享 CDN、其他客户、巧合的证书字符串)。 RootXshodan 运行所有相关的 dork 家族,然后根据每个结果与你组织的 相关程度(hostname / SSL 证书 / org / ISP / ASN)进行评分,并 丢弃所有不符合条件的内容。 ``` ____ _ __ __ _ _ | _ \ ___ ___ | |_ \ \/ /___ | |__ ___ __| | __ _ _ __ | |_) / _ \ / _ \| __| \ // __|| '_ \ / _ \ / _` |/ _` | '_ \ | _ < (_) | (_) | |_ / \\__ \| | | | (_) | (_| | (_| | | | | |_| \_\___/ \___/ \__| /_/\_\___/|_| |_|\___/ \__,_|\__,_|_| |_| ``` ## 安装说明 只需要 `requests`(大多数系统都已安装)。它会直接调用 Shodan REST API ——你**不需要**安装 `shodan` pip 包。 ``` pip install -r requirements.txt # just: requests ``` ## API key 可以通过以下任意方式提供(按顺序检查): ``` python rootxshodan.py -t acme.com --api-key export SHODAN_API_KEY= # then just run python rootxshodan.py --api-key --save-key # store to ~/.config/rootxshodan/api_key (chmod 600) ``` 如果没有提供 key,它将执行一次 **dry run**(演练),仅打印 dork 计划。 ## 使用说明 ``` # 最简单 — 单个 domain python rootxshodan.py -t google.com # org 和 domain 组合(逗号分隔即可);深入探索已发现的 ASN python rootxshodan.py -t "Google inc, google.com" --deep --max-pages 3 # 显式指定字段 + 获取排名前 20 的主机的完整 per-host 服务列表 python rootxshodan.py --org "Acme Corp" --domain acme.com --host-detail 20 # 仅保留高置信度 assets(排除中等/低相关度项) python rootxshodan.py -t tesla.com --min-score 3 # 保留所有内容,不进行过滤(查看原始 firehose) python rootxshodan.py -t acme.com --no-filter ``` ## 它的工作流程(4 个阶段) 1. **Discovery(发现)** — 使用 facets 调用 `/shodan/host/count`。映射组织的 ASN、port、 product、CVE 和国家。**消耗 0 个查询 credit。** 2. **Enumeration(枚举)** — 并行运行所有相关的 dork(受限于 Shodan 的 1 req/s 速率),然后应用相关性过滤器。这是消耗查询 credit 的地方(每个 dork 每 100 个结果消耗 1 个;可通过 `--max-pages` 调整)。 3. **DNS** — 从 Shodan 的 DNS DB 中提取子域名清单。 4. **Host detail(主机详情)** *(可选,`--host-detail N`)* — 为排名前 N 的 host 提供完整的 服务/漏洞列表。消耗 0 个查询 credit。 ## 它运行的 dork(针对域名 `D` 和组织 `O`) | 类别 | Dork | |----------|------| | hostname | `hostname:"D"` | | ssl | `ssl:"D"`, `ssl.cert.subject.cn:"D"`, `ssl.cert.subject.cn:"*.D"` | | ssl-org | `ssl.cert.subject.o:"O"` | | org | `org:"O"` (+ 去除后缀的变体,例如 *Google inc* → *Google*) | | http | `http.html:"D"`, `http.title:"O"` | | vuln | `hostname:"D" has_vuln:true`, `org:"O" has_vuln:true` | | asn | 针对阶段 1 发现的每个 ASN 使用 `asn:AS####` (使用 `--deep`) | | custom | 你通过 `--dork '...'` 传入的任何内容(可重复) | ## 相关性及 ASN 所有权验证(“无冗余”引擎) 问题所在:对于一个知名的域名,**hostname 和反向 DNS 是可以伪造的**。 任何人都可以在自己的 OVH 服务器上设置 PTR 记录或自签名证书指向 `cache.google.com` —— 因此“hostname 匹配”并*不能*证明所有权。 RootXshodan 通过**验证每个 ASN 实际注册的所有者**来解决这个问题。 在发现阶段,它会为每个候选 ASN 运行免费的 `asn:ASxxxx` 计数(facet `org`), 并只保留注册组织与你目标匹配的 ASN。位于不相关网络(OVH、Amazon、Tencent 等)上 伪造 PTR 的 host 会被自动剔除。 随后,每个保留的结果都会被标记上一个**所有权(ownership)**层级: | Ownership | 含义 | |-----------|---------| | **OWNED** | 位于经验证的、组织拥有的 ASN 上,**并且**有真实的 hostname/证书匹配 —— 确实是组织自己的服务 | | **CLOUD-CUST** | 位于组织的云 ASN 上,但是是客户的 VM(客户反向 DNS,例如 `*.googleusercontent.com`)或者没有确凿的证据 —— 位于*他们*的网络上,但并非由他们运营 | | **UNVERIFIED** | 声称拥有该组织的 hostname/证书,但**不**在经验证的组织 ASN 上 —— 伪造的反向 DNS / 自签名的冒充者(通常会被评分过滤器剔除) | 评分(层级 = HIGH ≥4 / MEDIUM 2–3 / LOW 1;默认保留 ≥ `--min-score` 2): - **+3** 经验证的组织拥有 ASN · 受信任的证书 CN/SAN ∈ 你的域名 - **+2** hostname ∈ 你的域名且*位于拥有的 ASN 上* · org / cert-subject-O token 匹配 - **+1** hostname ∈ 你的域名但*不*在拥有的 ASN 上(可伪造) · 自签名证书 · ISP / http 提及 共享托管/CDN 组织名称(AWS、Cloudflare、Azure、Akamai 等)本身绝不算作 证据。使用 `--owned-only` 可以*仅*保留 OWNED + CLOUD-CUST 资产,并剔除所有未经验证的冒充者。 终端报告会优先显示 **★ GENUINELY ORG-OWNED & VULNERABLE** 部分, 以便你立即查看是否有任何*真实的*组织资产(非客户或冒充者) 处于暴露状态。 ## 输出 终端报告**外加** `rootxshodan--/` 中的四个文件: - `rootxshodan.json` — 包含所有内容,机器可读 - `hosts.csv` — 扁平化的 host/服务表格,适用于电子表格 - `report.html` — 独立的深色主题仪表板 - `report.md` — Markdown 报告 部分包括:摘要、ASN/组织概况、host 清单(包含置信度)、 **暴露的/有趣的服务**(数据库、RDP/VNC、Docker/K8s、IPMI、SMB 等)、 **漏洞(CVE)**、**泄露的内部 IP/host**(RFC1918 及从 banner 提取的 `.internal`/`.corp`/`.local`),以及发现的子域名清单。 ## 关键 flag | Flag | 含义 | |------|---------| | `--max-pages N` | 每个 dork 的结果页数(100/页,1 credit/页)。默认为 1 | | `--min-score N` | 相关性阈值(默认为 2)。使用 3 仅保留高置信度结果 | | `--owned-only` | 仅保留经验证的组织拥有 ASN 上的资产(剔除冒充者) | | `--max-verify N` | 验证排名前 N 的候选 ASN 的所有权(默认为 30) | | `--no-filter` | 保留所有结果(禁用相关性过滤器) | | `--wide` | 添加嘈杂的 `http.html:domain` dork(任何嵌入了该域名的站点) | | `--deep` | 同时扫描每一个**经验证的**组织 ASN | | `--host-detail N` | 排名前 N 的 host 的完整服务列表 | | `--workers N` | 并行 dork worker(默认为 4) | | `--rate S` | API 调用之间的最小秒数(默认为 1.05) | | `--dork '...'` | 添加原始自定义 dork(可重复) | | `--no-vuln` / `--no-dns` | 跳过这些阶段(某些 plan 会阻止 `has_vuln`) | ## 注意事项 / 限制 - 遵守 Shodan 约 1 req/s 的限制。并行 worker 重叠了延迟,但调用是 由共享的速率限制器串行化的 —— 请谨慎调低 `--rate`。 - `has_vuln:` / `vuln:` 和某些 facets 需要付费的 Shodan plan;如果你的 plan 阻止了它们,工具会记录日志并继续执行。 - **仅限授权使用。** 适用于你自己的资产、目标在范围内的漏洞赏金计划, 或获得书面许可的测试任务。
标签:ESC4, OSINT, Python, 实时处理, 无后门, 聊天机器人, 资产测绘, 逆向工具