maxi-schaefer/Aegis-tool
GitHub: maxi-schaefer/Aegis-tool
一款用 Go 标准库构建的教育性质 Web 安全部察管线工具,将子域名枚举、端口扫描、漏洞检测与 CVE 关联等阶段串联并输出自包含的交互式 HTML 报告。
Stars: 0 | Forks: 0
# aegis
一款教育性质的 Web 应用程序/网络侦察工具,它将
多个阶段串联成一个 pipeline:
1. **子域名枚举** — 被动方式(通过 crt.sh 查询 certificate-transparency 日志)以及可选的针对字典的主动 DNS 爆破。
所有 DNS 查询都会通过一个**带重试机制的解析器**(带有指数退避的有限重试),因此瞬时的 SERVFAIL、超时和受速率限制的公共解析器将不再会静默丢弃存活主机。被证实确实不存在的域名 (NXDOMAIN) 依然会快速失败。如果没有找到子域名,则会扫描根域名本身。
2. **子域名接管检测** — 标记指向未被声明的第三方资源(GitHub Pages、S3、Heroku 等)的悬空 CNAME。
3. **端口和服务扫描** — 一种**两阶段的 nmap 策略**:首先进行快速端口扫描以发现开放端口,然后针对这些开放端口进行较平缓、更高强度的 `-sV` 扫描。当 nmap 无法识别服务时,将交由分层的**协议指纹引擎**(参见下文的“版本检测:指纹引擎”)处理,而不是盲目抓取 banner。原始 nmap XML 会按主机保存,以用于取证和复现。
4. **HTTP 指纹识别** — TLS 证书检查(过期、自签名、SAN)、弃用的 TLS 1.0/1.1 支持、缺失的安全标头以及不安全的 cookie 标志。
5. **Web 技术检测** — 识别网站运行的框架、服务器、CMS、语言、JS 库、CDN 和分析工具,**尽可能检测出版本**(例如 `Next.js 14.2.3`、`nginx 1.25.3`、`WordPress 6.4.2`、`PHP 8.2.10`)。检测基于特征且是只读的:它仅对 HTTP 阶段已发出的单个 GET 请求返回的标头、cookie 和 body 的有限前缀进行模式匹配 — 没有额外的请求,也没有 payload。每次检测都会附带置信度等级和触发它的证据。
6. **敏感路径发现** — 对常见的意外暴露路径(`.git/HEAD`、`.env`、备份文件等)进行基线感知检查,该过程是只读的,针对“软 404”主机提供误报保护,**并**进行内容签名验证(仅凭 200 响应是不够的 — body 必须看起来确实像 git 引用、`.env` 文件、SQL 导出等,才会被报告为已确认)。
7. **保守的 Web 漏洞检测** — 反射型 XSS 和基于错误的 SQL 注入*检测*信号(而非利用 — 有关具体测试内容及为何远未达到真正的漏洞利用尝试,请参见下文“Web 漏洞检测”)。
8. **截屏捕获** — 通过 headless Chrome/Chromium 可选地捕获每个主机网页的全页屏幕截图,直接嵌入到 JSON/HTML 报告中,使其保持单文件且便于离线查看。
9. **漏洞关联** — 将发现的服务与 NVD CVE API v2.0 进行匹配,当 nmap 识别出 CPE 时,**优先使用基于 CPE 的精确匹配**,而不是自由文本关键字搜索,并且**在将匹配视为已确认之前,会根据 NVD 发布的受影响版本范围检查检测到的版本**。
每次运行都会写入其自己带有时间戳的目录 —
`reports/_/` — 包含一份 JSON 报告、一份 Markdown 报告、一份**自包含的交互式 HTML 报告**(支持深色/浅色主题、风险仪表盘、严重性细分、实时过滤和排序以及技术标签),以及(默认情况下)每个扫描主机的原始 nmap XML 证据。
范围/白名单文件与 `` 一起作为第二道技术护栏,你可以将某次运行的结果与前一次进行对比,以查看发生了什么变化。
仅使用 Go 标准库构建 — 没有外部依赖,也无需管理 `go.sum`。
## ⚠️ 合法与合规使用
此工具会针对您指定的目标执行**主动侦察**:DNS 爆破、nmap 扫描和 HTTP 探测(包括路径发现)会针对真实主机生成真实流量。仅对以下目标运行此工具:
- 您个人拥有的域名/系统,或者
- 您拥有明确、书面授权的系统(例如签署的渗透测试工作说明书,或漏洞赏金项目的公开范围)。
未经授权的扫描可能会违反法律,例如美国《计算机欺诈和滥用法》(CFAA)、英国《计算机滥用法》以及其他地区的类似法规,同时也会违反大多数托管/云服务提供商的可接受使用政策。该工具需要 `` 并支持可选的 `-scope-file` 白名单作为轻量级护栏,但它们都不能从法律层面替代实际的书面授权 — 在运行该工具之前,您必须自行准备好授权。
## 环境要求
- Go 1.21+(仅使用标准库,因此 `go build` 无需网络访问即可工作)
无需获取模块)
- 已安装并在您的 `PATH` 中的 `nmap`
- 对 `crt.sh` 和 `services.nvd.nist.gov` 的出站 HTTPS 访问权限
- (可选但推荐)NVD API 密钥 — 公共速率限制约为 5 次请求/30秒。您可以在此免费申请:
https://nvd.nist.gov/developers/request-an-api-key
- (可选)已安装的 Chrome 或 Chromium,仅在使用 `-screenshot` 时需要
## 构建
```
cd aegis
go build -o aegis .
```
## 使用方法
```
./aegis example.com
```
输出结果将存放在 `reports/example.com_20260715_143000/`:
```
reports/example.com_20260715_143000/
├── report.json # full machine-readable findings
├── report.md # human-readable summary w/ executive summary
├── report.html # open this in a browser — searchable/sortable
└── raw/
├── www.example.com_discovery.xml
├── www.example.com_version.xml
└── ...
```
### 常用选项
```
# 仅 Passive enumeration,默认扫描设置
./aegis -passive-only example.com
# 使用 wordlist 添加 active DNS brute-forcing
./aegis -wordlist subdomains-sample.txt example.com
# 限制为显式的 scope/allowlist(推荐用于 real engagements)
./aegis -scope-file scope-sample.txt example.com
# 更快速、更嘈杂的发现 + 最高精度的 version detection
./aegis \
-discovery-timing 5 -min-rate 500 -version-intensity 9 example.com
# 与之前的运行进行 Diff 以查看发生了哪些变化(新的 hosts、ports、CVEs)
./aegis \
-previous reports/example.com_20260601_090000/report.json example.com
# 仅 Recon + 扫描,跳过 HTTP checks、path scanning 和 NVD correlation
./aegis \
-skip-http-check -skip-vuln-check example.com
# 仅跳过 sensitive-path discovery(保留 TLS/header checks)
./aegis -skip-path-scan example.com
# 不持久化 raw nmap XML(更小的输出目录)
./aegis -save-raw=false example.com
# 重用已保存的 scan profile,仅隐藏低严重级别的 CVE 噪音
./aegis -config aegis-config-sample.json \
-min-severity 7 example.com
# 捕获截图并跳过 web-vuln checks(仅 recon 运行)
./aegis -screenshot -skip-web-vuln-check example.com
```
### 所有 flags
| Flag | 默认值 | 描述 |
|------|---------|-------------|
| `-config` | `""` | 提供其他 flag 默认值的 JSON 文件路径(CLI flag 优先级更高 — 参见下文“配置文件”) |
| `-scope-file` | `""` | 白名单文件;解析出的不在其中的子域名会被记录,但永远不会被主动探测 |
| `-wordlist` | `""` | 用于主动 DNS 爆破的子域名字典路径 |
| `-passive-only` | `false` | 跳过主动爆破;仅使用 crt.sh |
| `-ports` | *(未设置)* | nmap 的端口规范,例如 `1-1000` 或 `22,80,443` |
| `-top-ports` | `1000` | 当 `-ports` 未设置时使用 |
| `-discovery-timing` | `4` | 用于快速发现阶段的 nmap `-T` 模板 (0-5) |
| `-version-intensity` | `7` | 用于精度阶段的 nmap `--version-intensity` (0-9) |
| `-min-rate` | `0` | 用于发现阶段的 nmap `--min-rate` (0 = 自适应) |
| `-banner-fallback` | `true` | 当 nmap 无法识别服务时,执行原始 TCP banner 抓取 |
| `-scan-threads` | `3` | 并发 nmap 扫描数(保持较低水平 — 避免压垮目标) |
| `-http-threads` | `10` | 在 HTTP 指纹识别/路径扫描期间并发探测的主机数 |
| `-scan-timeout` | `5m` | 覆盖两个 nmap 阶段的单主机超时时间 |
| `-skip-takeover-check` | `false` | 跳过悬空 CNAME / 子域名接管检测 |
| `-skip-http-check` | `false` | 跳过 TLS/安全标头/cookie 指纹识别 |
| `-skip-path-scan` | `false` | 跳过敏感路径发现(仍会运行其他 HTTP 检查) |
| `-max-path-findings` | `10` | 达到此次数后停止扫描主机路径 |
| `-skip-vuln-check` | `false` | 跳过 NVD 关联 |
| `-min-severity` | `0` | 隐藏低于此 CVSS 分数的 CVE 匹配项 (0 = 显示全部) |
| `-skip-web-vuln-check` | `false` | 跳过保守的反射型 XSS / SQL 错误检测 |
| `-web-vuln-max-params` | `8` | 每个主机用于测试 XSS/SQLi 信号的常见查询参数名称数量 |
| `-screenshot` | `false` | 通过 headless Chrome 捕获每个主机网页的屏幕截图 |
| `-chrome-path` | `""` | 用于 `-screenshot` 的 Chrome/Chromium 二进制文件路径(如果未设置则自动检测) |
| `-screenshot-timeout` | `20s` | `-screenshot` 的单主机超时时间 |
| `-nvd-api-key` | `""` | 可选的 NVD API 密钥,用于提高速率限制 |
| `-save-raw` | `true` | 将每个主机的原始 nmap XML 持久化到 `raw/` 下 |
| `-previous` | `""` | 上一次运行的 `report.json` 路径;将当前结果与其进行对比 |
| `-output-dir` | `reports` | 基础目录;本次运行将写入 `/_/` |
| `-dns-threads` | `20` | 并发 DNS 爆破 worker |
| `-no-color` | `false` | 禁用彩色终端输出 |
| `-version` | `false` | 打印 aegis 版本并退出 |
## 配置文件
对于定期的测试任务,您可以将常用设置放在一个 JSON 文件中,并使用 `-config` 指定它 — 在命令行中同时传递的任何参数仍会覆盖文件中的设置,因此配置只是一组默认值,而非强制锁定:
```
./aegis -config aegis-config-sample.json example.com
```
有关完整的键集,请参见 `aegis-config-sample.json`(它们与上面的 flag 相对应,例如 `"top_ports"`、`"scan_threads"`、`"min_severity"`)。
## 交互式 HTML 报告
`report.html` 是一个独立的单文件(内联 CSS/JS,无 CDN 或
网络调用),因此可以安全地离线打开或附加到工单中。它
包含:
- 一个显示主机最高风险的**风险仪表盘**,并附带通俗易懂的判定结论
- 一个**严重性分布柱状图**(严重/高/中/低)和一个指标
面板(子域名、范围内/外、开放端口、CVE、接管风险、
暴露路径)
- **深色和浅色主题**,可在页眉处切换
- 搜索框(按子域名、产品、**技术**或 CVE ID 过滤),
排序控件(风险分数/名称/端口数量),以及展开/折叠全部
- 可折叠的单主机卡片,左侧边缘按严重性进行颜色编码,
包含技术栈、端口/服务/CVE、HTTP/TLS/cookie 发现、
暴露路径和接管状态
- 每个主机的启发式 0-100 风险分数,用作默认排序依据
## Web 技术检测
对于它探测的每个 Web 端口,aegis 会对使用的
技术进行指纹识别,并在其暴露时提取版本。这复用了
HTTP 阶段现有单个 GET 请求的响应 — 不会发送额外请求,
也绝不会提交任何 payload。
检测到的类别包括框架(Next.js、Nuxt、Angular、SvelteKit、
Gatsby、Express、Laravel、Django、Rails),服务器(nginx、Apache、IIS),
语言(PHP、ASP.NET),CMS/电商(WordPress、Drupal、Joomla、
Shopify),JS 库(React、Vue、jQuery),CDN(Cloudflare、Vercel),
以及分析工具。
每项发现都会记录触发它的证据及置信度等级,因此
您可以将明确的信号(`Server:` 标头、`__NEXT_DATA__`
构建 ID)与较弱的推断区分开来:
```
"technologies": [
{ "name": "Next.js", "category": "framework", "version": "14.2.3",
"confidence": "high", "evidence": "__NEXT_DATA__ script tag" },
{ "name": "nginx", "category": "server", "version": "1.25.3",
"confidence": "high", "evidence": "Server header" },
{ "name": "React", "category": "js-library",
"confidence": "medium", "evidence": "data-reactroot attribute" }
]
```
版本对于分类 prioritization 至关重要:它们直接回答了“这
是否已过时?”的问题,并且当同一技术被多个签名发现时,
包含版本的检测优于单纯的裸检测。
检测在有意设计上偏向保守 — 签名仅对
已掌握的数据进行模式匹配,因此缺失条目意味着“未证实”,而非
“不存在”。位于剥离标头的 CDN 背后的站点可能会显示出比
实际运行的技术更少的结果。
## 测试
签名引擎和 DNS 重试逻辑已经过单元测试,且无需
网络访问:
```
go test ./...
```
## 扫描策略:速度与精度
直接跨大范围端口运行 `nmap -sV` 速度很慢,因为
版本*探测*的开销远高于单纯的端口状态
检查。此工具将其拆分为每个主机两次 nmap 调用:
1. **发现** — `-T4 --max-retries 1`(可配置)应用于完整
请求的端口范围,完全不使用 `-sV`。
2. **版本检测** — `-sV --version-intensity N,其定时级别比
发现阶段平缓一级,通过 `-p` 限制为仅在第一阶段发现开放
的端口。
如果某个端口的 nmap 指纹结果仍然为空,`-banner-fallback`
将打开一个原始 TCP 连接,并读取服务返回的内容(或者针对 Web 端口读取
最小的 HTTP HEAD 响应)作为最后的补救手段 —
在报告中会标记为 `banner_grabbed: true`。只要设置了 `-save-raw`,这两个阶段的原始 XML
输出都会保存在 `raw/` 下,以便日后独立验证
扫描结果。
## 漏洞匹配:CPE vs. 关键字
当 nmap 识别出 CPE 时,工具会直接查询 NVD 的结构化 CPE
字典。如果没有可用的 CPE,或者 CPE 查询无结果,
它将回退到自由文本 `keywordSearch`。每项发现都会记录
产生它的方法(`[cpe match]` 或 `[keyword match]`),以便您可以
据此权衡置信度。
**版本范围确认(减少误报):** 仅产品名称
匹配并不意味着*已安装*的版本实际受影响 —
这是基于关键字的 CVE 关联中最大的噪音来源。aegis 现在会解析 NVD 的 `configurations` 块(CPE 匹配
版本范围 — `versionStartIncluding`、`versionEndExcluding` 等,或
确切锁定的版本),并根据它检查检测到的版本:
- **`out-of-range`** — NVD 的范围数据确认已安装的版本
早于或晚于受影响的范围。这些会在您
看到它们之前被丢弃;它们是最明显的误报情况。
- **`confirmed`** — 已安装的版本落在已发布的
受影响范围内(或匹配确切锁定的 CPE 版本)。显示为
`[version confirmed]`。
- **`unconfirmed`** — NVD 未为此 CVE 发布结构化版本数据
(很常见,尤其是对于关键字匹配)。作为线索保留 —
值得人工检查 — 并显示为 `[version unconfirmed]`。这些在
启发式风险评分中的权重也低于 (0.6×) 已确认的匹配。
## 子域名接管检测
对于范围内的每个主机,该工具会解析 CNAME 链,并
将其与已知的易受攻击服务模式列表(GitHub Pages、S3、
Heroku、Shopify、Azure、Netlify 等)进行比对。如果 CNAME 匹配,它
将发出单个只读 GET 请求(先尝试 HTTPS,失败则回退到 HTTP)
并寻找该服务自身的“资源未被声明”错误文本。
每项发现都带有**置信度等级**:
- **`inconclusive`** — 连接彻底失败。这是一种提示(悬空
记录通常根本无法完成握手),而非确认。
- **`likely`** — 响应 body 匹配了该服务已知的未声明
资源错误文本。由于某些服务在无关
情况下也会显示类似文本,因此仅凭这一点被视为中等置信度。
- **`confirmed`** — body 匹配**且**独立的 DNS 查询
显示 CNAME 目标本身根本无法解析,这正是
真正悬空记录的样子。这第二个信号才是
真正在这里减少误报的关键,因为仅靠 body 文本匹配可能会对碰巧共享措辞的
自定义错误页面产生误报。
## 敏感路径发现
检查一个精心挑选的小型路径列表,这些路径在
配置正确的主机上永远不应被访问(`.git/HEAD`、`.env`、`wp-config.php.bak`、
`docker-compose.yml`、云凭证文件等)。现在应用两层
误报保护:
1. **Soft-404 基线** — 首先使用随机不存在的
路径探测每个主机;匹配该基线状态/长度的候选路径将被忽略(自定义的“一切皆为 200”错误页面不应
在每个候选路径上都产生发现结果)。
2. **内容签名验证** — 大多数候选路径现在还带有该
文件类型唯一的模式(git `HEAD` 文件以
`ref: refs/...` 开头;SQL 转储包含 `CREATE TABLE`/`INSERT INTO`;
`.env` 文件具有 `KEY=value` 行;AWS 凭证文件包含
`aws_access_key_id`;等等)。不匹配
预期签名的 200 响应被视为基线
检查旨在捕获的相同误报(例如,每个路径自定义页面变化刚好
足以规避基线检查),将被丢弃而不是被报告。
每项发现都会被标记为 `confirmed`(签名匹配)或 `unverified`(该
路径未定义签名,因此仅应用了状态/基线检查
— 仍值得人工检查,只是置信度较低)。这仅仅是
存在性检查 — 除了读取 body 的有限前缀以检查签名外,不会利用或下载发现的任何内容。
## 版本检测:指纹引擎
当 nmap 自身的 `-sV` 探针未返回开放
端口的产品/版本时,aegis 不再回退到盲目抓取 banner — 它会运行一个小巧的
分层指纹识别 pipeline (`internal/fingerprint`):
```
IP:Port → Service Detection → Protocol Modules → Fingerprint Engine → Version Estimate
```
- **服务检测** 读取服务在建立连接时发送的任何问候语,
而不预设协议。
- **协议模块** — 每个已知协议一个:
- **SSH**: 直接解析版本 banner (`SSH-2.0-OpenSSH_8.9p1`)。
- **MySQL**: 解析二进制握手包中以 null 结尾的
服务器版本字段(也能从字符串中识别出 MariaDB)。
- **Redis**: 发送内联 `INFO` 命令并读取 `redis_version:`。
- **HTTP**: 发送 `HEAD /` 并解析 `Server:` 标头。
- **通用文本问候**: FTP/SMTP/POP3/IMAP 风格的 `220 ...` banner。
- **通用回退**: 宽松的 `name/version` 模式匹配,或者 —
最后手段 — 原始的清理后的 banner 文本,以确保至少有记录。
- **指纹引擎** 运行所有适用的模块,保留最高
置信度的结果,并在找到高置信度匹配后提前停止(在成功解析 SSH banner 后,无需再尝试较弱的模块)。
- **版本预估** 是最终的 `Result`:产品、版本、产生它的
协议/签名以及 0.0-1.0 的置信度分数。
结果显示在报告中为 `fingerprint_protocol` /
`fingerprint_confidence`,在终端中显示为例如
`[fingerprint: mysql, 90% confidence]`,以便您可以区分结构化解析
(SSH banner,MySQL 握手)与低置信度的猜测。
## Web 漏洞检测
Web 漏洞检测默认运行;传递 `-skip-web-vuln-check`
即可将其关闭。它们针对每个主机探测一个包含常见查询参数名称的简短列表
(`internal/webvuln`),受 `-web-vuln-max-params` 限制(默认为 8):
- **反射型 XSS**: 将包含几个 HTML 特殊字符的 canary 字符串附加到参数中,并检查它是否在响应中原样返回(未转义)
— 一种缺少输出编码的信号。它永远不会
尝试实际执行 JavaScript、绕过过滤器/WAF 或达到
存储型/DOM 型 XSS。
- **SQL 注入**: 将单引号附加到参数中,并检查是否存在
已知的、原样的数据库错误字符串(MySQL、PostgreSQL、MSSQL、
Oracle、SQLite)。纯粹基于错误 — 不使用基于布尔的盲注、基于时间的盲注或
基于 UNION 的数据提取技术。
这是一个用于后续人工审查的轻量级信号,**不能**替代
专用的 DAST 工具(Burp、ZAP 等) — 它仅针对
基础 URL 测试常见的参数名称,而不是针对网站上每个表单/链接的
爬取清单。与 aegis 中的所有其他检测一样,仅对
您被授权测试的主机运行此项。
## 屏幕截图
`-screenshot` 通过 headless Chrome/Chromium 捕获每个主机网页的全页 PNG
(`internal/screenshot`) — 就像在浏览器选项卡中
打开 URL 一样进行正常页面加载,除了页面自身运行的
内容外,不注入或执行任何其他内容。需要安装 Chrome 或 Chromium;aegis 会自动检测常见的安装位置,或者您可以使用 `-chrome-path` 直接指向
特定的二进制文件:
```
./aegis -screenshot example.com
./aegis -screenshot -chrome-path "/path/to/chrome" example.com
```
屏幕截图以 base64 格式直接嵌入到 `report.json` 中,并内嵌显示在
`report.html` 中(点击可打开全尺寸)— 没有单独的图像
文件需要管理,这与报告的单文件、
离线友好设计保持一致。如果未找到 Chrome,aegis 将在
启动时快速失败并显示明确的提示,而不是在运行期间针对单个主机报错。
## 范围/白名单护栏
`-scope-file` 接收一个纯文本文件(参见 `scope-sample.txt`),其中包含规则:
精确的主机名、通配符主机名 (`*.staging.example.com`)、CIDR 块或单个 IP。任何解析后但不匹配
规则的主机名将被记录为 `out_of_scope: true`,并且永远不会被 nmap、
HTTP 探测器、路径扫描器或接管检测器触碰 — 仅对其运行被动枚举和 DNS 解析。
## 与之前的运行结果进行对比
使用 `-previous` 指向之前运行的 `report.json`,该工具将打印出变化:新增/移除的子域名、新打开/关闭的端口,以及新发现的 CVE。对于长期跟踪某项测试任务或定期的外部攻击面审查非常有用。
## 架构
```
aegis/
├── main.go # CLI + pipeline orchestration
└── internal/
├── config/config.go # optional JSON config file (default flag values)
├── subdomain/subdomain.go # crt.sh passive enum + DNS brute-force
├── dnsx/dnsx.go # retrying DNS resolver (backoff, NXDOMAIN fast-path)
├── takeover/takeover.go # dangling-CNAME / subdomain-takeover detection (confidence-tiered)
├── scanner/scanner.go # two-phase nmap wrapper, calls into internal/fingerprint as fallback
├── fingerprint/fingerprint.go # protocol-aware version-detection engine (HTTP/SSH/MySQL/Redis/generic)
├── httpcheck/httpcheck.go # TLS cert/protocol + headers + cookie checks
├── techfinger/techfinger.go # web technology + version fingerprinting (pure, no I/O)
├── pathscan/pathscan.go # baseline- and content-signature-aware sensitive-path discovery
├── webvuln/webvuln.go # conservative reflected-XSS / error-based SQLi detection
├── screenshot/screenshot.go # headless-Chrome page screenshot capture
├── vuln/vuln.go # NVD CVE API v2.0 client (CPE + keyword)
├── vuln/version.go # version-range comparison for confirming/rejecting CVE matches
├── scope/scope.go # allowlist guardrail
├── diff/diff.go # compares two JSON reports
├── report/report.go # JSON + Markdown + terminal summary + risk scoring
├── report/html.go # self-contained interactive HTML report
└── ui/ui.go # colors, banners, progress lines, tables, risk gauge
```
## 关于准确性的说明
- 基于 CPE 的漏洞匹配在产品标识上是精确的;
版本范围确认(参见上文)会额外检查*已安装*的版本是否确实在 NVD 的受影响范围内。未发布范围数据的 NVD 匹配
被标记为 `unconfirmed` — 仍值得关注,
只是不如 `confirmed` 匹配那样可靠。
- 接管发现需要匹配的错误页面模式才能被标记为易受攻击;单纯的连接失败会被报告为 `inconclusive`,而
在没有独立确认悬空 DNS 的情况下的 body 模式匹配是
`likely` 而不是 `confirmed` — 在声称资源状态之前需手动验证。
- crt.sh 可能会从过期/重新签发的证书中返回陈旧的子域名;
该工具通过要求实时 DNS 解析来过滤它们。解析
在放弃之前会重试瞬时故障,因此只有在
反复失败或遇到明确的 NXDOMAIN 后,主机才会被丢弃。
- 技术检测只能证明存在,而不能证明不存在:剥离 `Server`/`X-Powered-By` 标头的 CDN 或反向代理
将会导致比网站实际运行的技术更少的检测结果。应将 `medium`/`low` 置信度的条目视为线索,并注意从自我报告的标头中获取的版本可能是伪造的或陈旧的。
- 原始 banner 抓取 (`banner_grabbed: true`) 来自指纹引擎的回退模块,而不是 nmap 自身的协议感知检测
— 在信任其结果而非报告中其他冲突信号之前,请检查 `fingerprint_confidence`。
- Web 漏洞检测在设计上范围很窄:仅针对基础 URL 测试一个
包含常见参数名称的简短列表,仅限基于错误的 SQLi(无盲注/基于时间的技术),以及仅通过 canary 反射进行的反射型 XSS(未验证 JS 执行)。未发现并不意味着
应用程序对 XSS/SQLi 是安全的 — 它只意味着这些特定的、保守的检查
没有被触发。应将命中视为需要人工验证的强线索,而不是已确认的、可直接报告的漏洞。
- 单主机风险分数是一个启发式的分类辅助工具(CVE 严重性 + TLS/标头合规性 + 暴露路径 + Web 漏洞发现 + 接管风险),而
不是正式的风险评估方法 — 使用它是为了确定审查优先级,而不是替代审查。
- 尊重每次任务的速率限制和时间窗口要求 —
`-scan-threads`、`-discovery-timing` 和 `-min-rate` flag 的存在是为了帮助您保持礼貌且不越界,而不仅仅是为了提升速度。
## 进一步扩展的想法
- 添加一个 HTTP 层级的爬虫,在对每个端点进行指纹识别之前,先枚举每个主机的路径/endpoint。
- 添加 NSE 漏洞脚本 (`--script=vuln`) 作为一种可选的、更慢、
更高信号强度的模式,用于深度测试任务。
- 如果您需要在多次任务中拥有可查询的历史记录而不是成对对比,请将结果持久化存储在 SQLite 中,而不是扁平化的 JSON/目录中。
- 针对新发现的严重/高危问题添加 Slack/webhook 通知,这对于持续的外部攻击面监控非常有用。
- 扩充接管指纹列表,或从维护良好的社区源中拉取,以跟上新 SaaS 平台的步伐。
标签:CISA项目, EVTX分析, GitHub, URL枚举, 反取证, 子域名枚举, 安全报告, 安全评估, 实时处理, 密码管理, 数据统计, 日志审计, 端口扫描, 系统安全, 资产测绘