molemantis/scry

GitHub: molemantis/scry

scry 是一个纯 Python 标准库实现的快速基础设施指纹识别工具,帮助 SRE 和安全人员从公开信号推断网站运行环境并发现 CDN 背后的真实源站。

Stars: 0 | Forks: 0

# scry 为 SRE 和安全人员提供的快速基础设施指纹识别工具。只需将其指向一个 URL 或域名,它就能根据公开信号推断出该网站的运行基础: DNS 提供商、CDN/边缘节点、托管服务、Web 技术栈、TLS 配置、邮件安全、 其前端的网络主干,以及(最有趣的部分)**隐藏在 CDN 背后的真实源站服务器**。 纯 Python **标准库**实现——无需 `pip install`。它会在检测到常见工具(`dig`、`whois`、`curl`、`openssl`、`traceroute`……)时调用它们, 并在工具缺失时平滑降级处理。 ## 输出示例

scry sample output

## 功能说明 - **DNS** — 通过 `dig` 查询 A/AAAA/NS/MX/TXT/CNAME/SOA 记录 - **提供商推断** — DNS、CDN/边缘节点、托管服务、邮件、Web 技术栈/CMS - **CDN/边缘节点检测** — CNAME 模式、IP 归属、响应头、PTR 记录 - **技术栈指纹识别** — `Server`/`X-Powered-By`、cookies、HTML 特征, `` - **TLS** — 证书颁发者/SANs/有效期(`openssl`);如已安装 `testssl.sh` 或 `sslscan`,则进行深度安全态势评估(旧协议、Heartbleed/ROBOT/POODLE 等) - **WAF 检测** — 如已安装,则通过 `wafw00f` 进行 - **ASN / 网络** — 为每个 IP 标注 ASN + 网络名称 + BGP 前缀 (通过 Team Cymru whois,被动获取) - **邮件安全** — SPF / DMARC 记录状态,MX 提供商 - **源站发现** — 通过探测常见源站子域名(`origin-www`、`web1` 等) 以及从证书透明度日志中挖掘的主机名,找出隐藏在 CDN 背后的真实后端, 并标记出任何解析自非 CDN 网络的记录。将结果分为 **Web 源站**与 **其他暴露的基础设施**(VPN、邮件、FTP、非生产环境、管理后台)。 - **源站暴露检测** — 直接连接发现的源站(配置正确的 SNI/Host), 测试 CDN/WAF 是否可被绕过 - **操作系统猜测** — 尽力而为,直接探测发现的源站(ping TTL、SSH banner, 可选的 `nmap -O`),而非仅探测 CDN 边缘节点 - **骨干/传输网络列表** — `--trace` 列出路径上去重后的网络, 并标记其角色(你的 ISP → 传输网络 → 目标侧) ## 安装 除了 Python 3.6+ 之外,无需其他安装: ``` git clone https://github.com/molemantis/scry.git cd scry python3 scry.py example.com ``` ### 可选工具(自动检测,存在则使用) | 工具 | 附加功能 | 安装方式 | |------|------|---------| | `dig`, `whois` | DNS + whois/ASN | 通常已预装(`bind-utils` / `dnsutils`) | | `curl`, `openssl` | 响应头、重定向、TLS 证书 | 通常已预装 | | `traceroute` / `mtr` | 骨干/传输网络列表 | `apt install traceroute` / `brew install mtr` | | `wafw00f` | WAF 识别 | `pip install wafw00f` | | `testssl.sh` / `sslscan` | 深度 TLS 安全态势 | `brew install testssl` / `sslscan` | | `nmap` | 操作系统指纹(`--nmap`) | `apt/brew install nmap` | ## 用法 ``` python3 scry.py example.com # full default run python3 scry.py https://www.example.com # honors scheme (redirects) python3 scry.py example.com --json # machine-readable output python3 scry.py example.com --trace # add backbone/transit list python3 scry.py example.com --no-exposure # skip active origin probe python3 scry.py example.com --nmap # deep OS scan (needs sudo) ``` ### 参数标志 | 标志 | 效果 | |------|--------| | `--json` | 输出完整的结构化 JSON | | `--trace` | Traceroute + 去重后的骨干网络列表(如发现源站则针对源站) | | `--nmap` | 运行 `nmap -O` 获取操作系统指纹(较慢,需要 root 权限,通常会被 CDN 拦截) | | `--find-origin` | 即使未检测到 CDN,也探测源站子域名 | | `--check-exposure` / `--no-exposure` | 源站直接暴露测试(默认开启) | | `--no-crtsh` | 跳过证书透明度子域名挖掘 | | `--no-ssh` | 跳过 TCP/22 SSH banner 获取 | | `--no-whois` | 跳过 whois IP 查询(速度更快,但 CDN 过滤准确度降低) | | `--no-color` | 输出无颜色的纯文本 | ## 被动与主动模式 | 被动(不向目标发送数据包) | 主动(连接到目标) | |--------------------------------|-----------------------------| | DNS 查询 (`dig`) | HTTP/响应头抓取 (`curl`) | | whois / ASN (Team Cymru) | 源站暴露测试 | | 证书透明度 | ping TTL、SSH banner 获取 | | | `--nmap`、`--trace`、`testssl.sh`、`wafw00f` | 为了最大程度保持被动模式,请添加 `--no-exposure --no-ssh` 运行。 ## 扩展功能 指纹识别的知识库位于 `scry.py` 顶部的特征表中(`CNAME_SIGNATURES`、 `NS_SIGNATURES`、`HEADER_PRESENCE`、`ORIGIN_PREFIXES` 等)。 当您发现新的模式时,可以在那里添加条目——欢迎贡献代码。 ## 许可证 [MIT](LICENSE) © `molemantis` ## 免责声明 本工具仅供合法的系统管理、SRE 以及**经授权的**安全测试使用。 作者不对任何滥用行为承担责任。您有责任确保已获得扫描任何目标的许可。
标签:GitHub, Python, 动态分析, 基础设施测绘, 实时处理, 无后门, 网络指纹识别, 运维工具, 逆向工具