impramodsargar/AssetLens
GitHub: impramodsargar/AssetLens
AssetLens 是一款 PowerShell 原生的被动侦察工具,通过对单一互联网暴露主机零数据包接触地从第三方来源收集信息并生成自包含报告。
Stars: 0 | Forks: 0
AssetLens
针对单一互联网暴露主机的被动侦察。对目标发送零数据包。
功能 •
安装 •
用法 •
运行 •
模式 •
收集 •
输出 •
范围
**AssetLens** 是一个原生的 PowerShell 被动侦察收集器,专门针对**单一互联网暴露主机**。它从第三方来源收集所有信息——无需向目标发送任何数据包——并生成一份独立报告(纯文本 / JSON,只需一个文本编辑器即可读取),以及一个按优先级排序的建议后续检查工作列表。
## 功能
- **零接触被动** - 所有数据均来自第三方来源;目标永远不会察觉到你的存在
- **单主机原则** - 每个偏离主机的资产都会被自动标记为 `OUT OF SCOPE, DO NOT TEST`(超出范围,请勿测试),并被排除在主动工作列表之外
- **七个阶段** - 范围/归属、证书、互联网扫描、CDN 背后的源站、历史记录、JS 挖掘、OSINT
- **有密钥或无密钥** - 无密钥的 HTTP 核心可零配置运行;免费密钥仅用于扩大覆盖范围
- **Microsoft 365 / Azure AD** 租户映射 - 租户 ID、Managed 与 Federated 对比、ADFS/IdP URL、租户域名
- **被动技术指纹识别** - 内置的 Wappalyzer 规则集与存档响应体匹配(无主动请求)
- **OSINT** - AlienVault OTX 威胁情报、AbuseIPDB 信誉、GitHub 代码 + 提交邮箱、LeakIX、数据泄露检查
- **独立报告** - `Report.md` 以及不依赖任何 CDN 的 `Report.html` 仪表板,可在任何离线环境下打开
- **打包输出** - 自动压缩并计算 SHA-256,附带按优先级排序的 `Verify.md` 建议后续检查工作列表
- **PowerShell 原生** - 无需 WSL,无需 Git Bash;无密钥核心可在你安装任何内容之前运行
## 安装
```
git clone https://github.com/impramodsargar/AssetLens.git
cd AssetLens
# 1. 安装 toolchain (subfinder, gau, waybackurls, waymore, uro, retire.js, trufflehog, gitleaks)
.\Invoke-AssetLens.ps1 -Setup
# 如果刚刚安装了 Go / Python,请重启 shell,然后:
.\Invoke-AssetLens.ps1 -Setup -SkipBase
# 2. (可选)添加你的免费 API keys
Copy-Item .\config\keys.example.ps1 .\config\keys.ps1
notepad .\config\keys.ps1
```
## 用法
```
.\Invoke-AssetLens.ps1
[-Strict] [-HttpOnly] [-Keyless] [-Enum] [-UatBase https://uat..]
```
| 命令 | 作用 |
|---|---|
| `.\Invoke-AssetLens.ps1 ` | **侦察** -> 打包 + `Report.md` + 自动压缩 |
| `.\Invoke-AssetLens.ps1 -Setup [-SkipBase]` | 安装工具链 |
| `.\Invoke-AssetLens.ps1 -Report -Package ` | (重新)生成 `Report.md` - 纯本地,无网络 |
| `.\Invoke-AssetLens.ps1 -MapUat -Package -UatBase https://uat.host` | 映射 URI -> `uat_targets.txt` - 纯本地 |
| `.\Invoke-AssetLens.ps1 -Zip -Package [-FullBodies]` | (重新)压缩打包以供传输;默认排除原始响应体 |
| `.\Invoke-AssetLens.ps1 -Diff -Package -Against ` | 对比两次扫描 -> `Diff.md`(新增端口/CVE/SAN/endpoint) |
| `.\Invoke-AssetLens.ps1 -Validate` | 预检:实时检查每个 API 密钥 + 工具(访问服务提供商和良性 IP,绝不访问目标) |
## 运行 AssetLens
```
# 完整 keyed pass - 覆盖范围最广
.\Invoke-AssetLens.ps1 app.target.com
# keyless pass - 无需 API keys,不消耗配额,不与你的账户绑定
.\Invoke-AssetLens.ps1 app.target.com -Keyless
# 最严格的被动模式 - 完全不进行 DNS resolution(仅从 passive-DNS APIs 获取 IP)
.\Invoke-AssetLens.ps1 app.target.com -Strict
# 侦察,然后将收集到的 URI 映射到另一个 host 以进行重放
.\Invoke-AssetLens.ps1 app.target.com -UatBase https://uat.target.com
```
输出将存放在 `output\app.target.com_\` 中,并自动压缩生成 `.zip.sha256` 以供传输。
## 模式
| 标志 | 效果 |
|---|---|
| *(默认)* | 务实模式 - 允许对目标进行一次 DNS 解析以获取其 IP |
| `-Strict` | 完全不进行 DNS 解析;IP 仅来自被动 DNS API。如果规则禁止对目标进行*任何*接触,请选择此项。 |
| `-HttpOnly` | 跳过所有外部 CLI 工具;仅运行 HTTP 核心(无密钥 + 有密钥 API) |
| `-Keyless` | 忽略 `config\keys.ps1`;仅运行无密钥来源。默认(无标志)会使用你的密钥以实现最广泛的覆盖。 |
| `-Enum` | 可选的子域名枚举(subfinder)。**默认关闭** - 单主机范围。仅适用于泛解析 / 多主机目标。 |
所选模式会记录在 `Index.md` 中。
## 收集内容
| 阶段 | 来源 | 需要密钥? |
|---|---|---|
| **P1** 范围 | RDAP(主域名) + **DNS 记录(MX/TXT-SPF/DMARC/NS/CNAME)** + IP + **地理位置及国旗** (ipwho.is / flagcdn) + **Microsoft 365 / Azure AD 租户映射**(租户 ID、Managed/Federated、ADFS URL、租户域名 - 查询 Microsoft,而非目标) + 网段所有者 + CDN/WAF 标志 | 无需密钥 |
| **P2** 证书 | crt.sh SAN(标记范围内的);`subfinder` (`-Enum`) | 无需密钥 |
| **P3** 扫描 | **Shodan-InternetDB**(端口/CPE/CVE,无需密钥!);Shodan 主机;Censys 主机;Netlas 主机;**AbuseIPDB** IP 信誉 | InternetDB 无需密钥 |
| **P4** 源站 | VirusTotal + SecurityTrails 被动 DNS;**CriminalIP** (+ Quake) 直接证书 -> IP 枢纽;Netlas 域名 | 需要密钥 |
| **P5** 历史 | `gau` + `waybackurls` + **CommonCrawl CDX** + urlscan -> url、参数、js;**`uro`** 合并几乎重复的 URL 模式 | 核心无需密钥 |
| **P6** js | **`waymore`** 下载存档响应 -> **原生 regex** 提取 endpoint/参数/词表/**云资产**/**技术指纹**(内置特征 + 捆绑的 Wappalyzer 规则集)/**source-map**/**API 规范** + `trufflehog`/`gitleaks` 密钥 + **`retire.js`** 漏洞库(CVE 链接至 NVD) | 核心无需密钥 |
| **P7** osint | Tranco;GitHub 代码搜索 **+ 提交邮箱**;**AlienVault OTX** 威胁情报 + 被动 DNS;LeakIX;**LeakCheck** 数据泄露检查(针对发现的每个邮箱);SpiderFoot 被动模式 | 混合 |
## 输出包
```
output/_/
Report.md <- synthesized brief: services / CVEs / origins / attack-surface / secrets / OSINT (READ FIRST)
Report.html <- same, self-contained dashboard: metric tiles + host-location map + detail cards
Index.md <- passive-only attestation + mode + key status
Verify.md <- ranked worklist of suggested next checks
OOS_observed.txt <- every off-host asset, flagged DO NOT TEST
manifest.sha256 <- integrity / chain-of-custody
recon.log
01_scope/ 02_certs/ 03_scan/ 04_origin/ 05_history/ 06_js/ 07_osint/ 08_tech/
```
### 打包
每次侦察运行都会**自动创建** `output\_.zip` + `.zip.sha256`。使用以下命令重新压缩任何包:
```
.\Invoke-AssetLens.ps1 -Zip -Package output\_
```
通过你偏好的渠道传输 zip 文件,并在另一端**验证 `.zip.sha256`**。所有内容均为纯文本 / JSON 格式,因此只需一个文本编辑器即可在任何地方使用 - 从那里驱动 `Verify.md`。
## 范围原则
目标是**单台主机**。工具呈现的所有其他内容 - SAN、子域名、同管兄弟主机、InternetDB 主机名、被动 DNS 邻居 - 都会被写入 `OOS_observed.txt` 并标记为 **OUT OF SCOPE, DO NOT TEST**(超出范围,请勿测试),绝不会进入主动工作列表。这种防护是自动进行的,因此偏离主机的资产不会意外出现在主动列表中。
## 注意事项
- **密钥**存放在 `config\keys.ps1` 中,该文件已被 git 忽略。切勿提交真实密钥;仅发布 `keys.example.ps1`,并轮换任何曾出现在日志中的密钥。
- **为什么使用 PowerShell 而非 Git Bash:** 避免了 MSYS 对斜杠参数的路径篡改;HTTP 查询使用 `Invoke-RestMethod`(无 curl 参数篡改)。
- **技术指纹:** `config\wappalyzer.json` 是一个精简的、基于 MIT 许可证的 Wappalyzer 规则集(通过 ProjectDiscovery 的 `wappalyzergo`;参见 `config\wappalyzer.LICENSE`) - 仅包含可匹配响应体的模式,并针对存档响应体进行**被动**匹配。基于 Header/JS 的技术(如 Shopify、Next.js)在此方式下设计为不可见。
- **切勿**将在线托管扫描器指向目标 - 这属于代理主动扫描,且会泄露资产信息。
- **扩展:** 每个阶段都是 `Invoke-AssetLens.ps1` 中的一个 `PhaseN-*` 函数。通过将内容写入对应的 `0N_` 文件夹,并为任何偏离主机的资产调用 `Add-OOS` 来添加来源。
- `-Setup` 会添加 Go 的 `%GOPATH%\bin` 工具;如果安装后 `subfinder` 等工具显示 MISSING,请将该目录添加到 PATH 并重启 shell。
仅限被动收集。OOS_observed.txt 中的任何内容均不在允许测试的范围内。
标签:AI合规, ESC4, IPv6, Libemu, OSINT, PowerShell, 安全工具库, 实时处理, 日志审计, 被动侦察, 资产测绘, 进程管理, 逆向工具