4. 信息收集工程化

信息收集不是“开几个工具跑一遍”,而是一条从被动侦察到主动扫描、再到数据归一化与资产建模的工程流水线。它的目标是把互联网上零散的域名、IP、证书、端口、服务、人员与泄露线索,收敛成一份可复核、可追溯、可复用的目标资产清单,为后续漏洞验证与授权测试提供边界清晰的输入。

在授权渗透测试中,信息收集必须始终受授权范围(Scope)约束。范围通常以域名、IP 段、ASN、组织实体或云账号的形式给出。工程化的第一步不是扫描,而是把授权范围转成机器可读的规则:允许的根域名、允许的 CIDR、排除的第三方托管、禁止的扫描强度与时间窗。所有后续数据都要带上“来源、时间、采集方式、置信度”四个元字段,否则数据越多越乱。

被动侦察:不接触目标也能获得大量线索

被动侦察的核心是不向目标资产直接发包,而是查询第三方数据源。常用入口包括:证书透明度日志(crt.sh)、公开 DNS 数据集、Whois/RDAP、搜索引擎与代码托管平台、Shodan/Censys/FOFA 等网络空间测绘平台、GitHub 泄露、招聘信息与社交媒体。证书透明度日志尤其关键:企业为内部系统签发证书时,常把 dev-api.example.com、vpn.example.com 这类子域写进 SAN 字段,从而暴露资产命名规律。

被动 DNS 与历史解析记录能揭示“曾经指向过”的 IP,这对发现已下线但仍可访问的旧系统很有价值。网络空间测绘平台则通过指纹(HTTP 标题、TLS 证书、favicon 哈希、特定响应头)反查同一组织资产。需要注意:测绘平台的数据有滞后,且可能把 CDN、云 WAF 的共享 IP 误判为目标资产,必须交叉验证。

主动扫描:从域名到端口与服务的收敛

主动扫描会直接与目标交互,因此必须控制速率、并发与时间窗。典型链路是:子域枚举 → DNS 解析 → 存活探测 → 端口扫描 → 服务与版本识别 → Web 指纹与目录发现。子域枚举可组合被动源与字典爆破;DNS 解析要区分 A、AAAA、CNAME、MX、TXT,CNAME 常暴露云服务商与第三方 SaaS。存活探测先判断主机是否在线,再决定是否进入端口扫描,避免对无效 IP 浪费配额。

端口扫描建议分层:先用高速 SYN 扫描覆盖常见端口,再对开放端口做全端口补充;服务识别用 -sV 与默认脚本,Web 服务再叠加指纹识别。下面给出一段可参考的示例命令(参数为教学示例,实际速率需按授权调整):

# 1) 子域枚举(被动 + 字典)
subfinder -d example.com -all -o subs_passive.txt
ffuf -u https://FUZZ.example.com -w subdomains.txt -mc 200,301,302,403 -o subs_active.json

# 2) 解析与去重
dnsx -l subs_passive.txt -a -resp -o resolved.txt
sort -u resolved.txt | awk '{print $2}' | sort -u > ips.txt

# 3) 存活与端口
naabu -l ips.txt -top-ports 1000 -rate 500 -o ports.txt
nmap -sV -sC -iL ips.txt -p $(cut -d: -f2 ports.txt | sort -un | paste -sd,) -oA scan_result

# 4) Web 指纹与目录
httpx -l subs_passive.txt -title -tech-detect -status-code -o web_fingerprint.txt
ffuf -u https://target.example.com/FUZZ -w common.txt -mc 200,301,403 -o dirs.json

扫描结果要立刻落盘并保留原始输出。判断“是否达成目标”的标准不是端口数量,而是:授权范围内的资产是否被完整覆盖、开放服务是否被正确识别、是否存在越界扫描(扫到了非授权 IP 或第三方 CDN)。一旦发现越界,应立即停止并记录。

OSINT 工具链与数据管理

工具链可以按“采集—解析—归一—存储—查询”五层组织。采集层用 subfinder、amass、theHarvester、Shodan CLI;解析层用 dnsx、httpx、nmap;归一化层把不同工具的 JSON/CSV 统一成同一张资产表;存储层用 SQLite 或 PostgreSQL;查询层用 SQL 或可视化面板。数据管理的重点是去重、关联与置信度:同一 IP 可能对应多个域名,同一域名可能解析到多个 IP,必须建立“域名—IP—端口—服务—指纹”的多对多关系。

建议的最小资产表字段包括:asset_id、type(domain/ip/url)、value、source、first_seen、last_seen、confidence、in_scope、notes。置信度可按来源赋值:证书日志 0.9、测绘平台 0.7、字典爆破 0.5、人工确认 1.0。所有数据必须带时间戳,因为资产会变化,昨天的解析结果今天可能已失效。

工程化建议:把每次采集写成可重放的脚本,输入是范围文件,输出是带时间戳的目录。这样既能复现,也能在授权变更时快速重跑。
合规红线:主动扫描前必须确认目标在授权范围内;对第三方 CDN、云服务商共享 IP 的扫描可能触发对方告警甚至法律风险。发现越界应立即停止并上报。
信息收集工程化流水线:被动侦察 → 主动扫描 → 数据归一化 授权范围 Scope 根域名 / CIDR / ASN 排除项 · 时间窗 · 速率 被动侦察 证书日志 · 被动DNS · 测绘 Whois · 代码托管 · 社媒 主动扫描 子域枚举 · 存活 · 端口 服务识别 · Web 指纹 数据归一化与资产库 去重 · 关联 · 置信度 SQLite / PostgreSQL 被动数据源 crt.sh 证书 SAN SecurityTrails 历史解析 Shodan / Censys 指纹 GitHub 泄露 · 招聘 主动扫描链路(示例参数) 子域枚举 DNS 解析 存活探测 端口扫描 naabu -top-ports 1000 -rate 500 → nmap -sV -sC 资产表字段 asset_id · type · value source · first_seen confidence · in_scope notes · last_seen 归一化:域名 ↔ IP ↔ 端口 ↔ 服务 ↔ 指纹 去重 · 置信度加权 · 时间戳 · 范围校验 输出:可复核的目标资产清单 结果判断 范围覆盖完整?服务识别正确?是否越界扫描? 越界 → 立即停止并记录;未覆盖 → 补充采集

把上述流程固化为脚本后,信息收集就从“一次性动作”变成“可重复的工程能力”。每次授权变更、每次资产上线,都可以用同一套流水线重新采集、重新归一、重新校验,最终交付一份边界清晰、来源可查、置信度明确的目标资产清单,作为后续漏洞验证与风险研判的可靠起点。