2. 信息收集基础:被动信息收集的概念与方法
说到信息收集,很多新手上来就拿着扫描器怼目标IP。嗯,我以前也干过这事。结果呢?刚扫了三个端口,目标WAF直接把我IP封了。后来我才明白,真正的信息收集应该从被动阶段开始——你不动手,让对方自己把东西露出来。
核心观点:被动信息收集的核心是“只观察,不触碰”。你不向目标发送任何探测数据包,只通过公开渠道获取信息。这样连日志都不会留下。
2.1 什么叫被动信息收集?
说白了,就是利用已经公开存在的资源来了解目标。你想想看,公司官网、招聘信息、备案数据、DNS记录、社交媒体……这些信息本来就摆在那里,任何人都能看到。你只是把它们收集起来,分析整理。
我个人喜欢把信息收集分成两个阶段:
- 被动阶段——你只是个旁观者,不产生任何流量。
- 主动阶段——你需要发送探测数据,比如端口扫描、目录爆破。
| 维度 | 被动收集 | 主动收集 |
|---|---|---|
| 与目标交互 | 零交互 | 有交互 |
| 产生日志 | 不会留下痕迹 | 会被记录 |
| 数据来源 | 搜索引擎、公开档案、DNS记录 | 端口扫描、漏洞探测 |
| 风险等级 | 极低 | 较高 |
| 适用场景 | 黑盒测试初期、红队侦查 | 已有授权后的精细探测 |
我在项目中遇到过不少团队,上来就主动扫描把目标打草惊蛇了。后来红队复盘时,发现前期如果好好做被动信息收集,至少能省一半时间。
2.2 被动信息收集的六大维度
被动收集不是瞎翻网页,需要有体系。我一般按下面六个方向来:
- 域名与子域名——通过证书透明度、DNS记录、搜索引擎找。
- IP与网段归属——ASN查询、WHOIS、RIR数据库。
- 技术栈识别——看响应头、Wappalyzer、BuiltWith。
- 人员与邮箱——领英、GitHub、Hunter.io。
- 历史漏洞与资产——Wayback Machine、漏洞库、Git泄漏。
- 社交媒体与文档——招聘信息、媒体报道、PPT泄露。
这些维度之间有交叉,但整体上覆盖了目标的大部分攻击面。下面我们挑几个重点讲。
2.3 常用工具与命令
2.3.1 WHOIS查询
WHOIS是最基础的信息源。它能告诉你域名注册人、注册邮箱、注册商、DNS服务器。虽然现在很多域名开了隐私保护,但有时候注册人忘了开,信息就全暴露了。
我习惯直接在终端用 whois 命令:
whois example.com
注意输出中的几个关键字段:
- Registrant Name / Email —— 注册人信息,经常能找到真实姓名和邮箱。
- Name Server —— 有时候能发现子域名托管服务商。
- Creation / Expiration Date —— 了解域名活跃周期,有助于判断资产变更。
注意:有些国家的域名(如 .cn)屏蔽WHOIS公共查询,需要用对应的注册局API。我曾经做香港项目时,whois命令直接返回空,后来改用香港注册局专用接口才拿到数据。
2.3.2 DNS记录收集
DNS记录里藏着大量信息。常用的记录类型:
| 记录类型 | 含义 | 用于收集什么 |
|---|---|---|
| A / AAAA | IP地址 | 找到服务器真实IP |
| MX | 邮件交换 | 发现邮件服务商,有时能推导出办公网络段 |
| NS | 名称服务器 | 确认DNS托管商 |
| TXT | 文本记录 | SPF/DKIM/DMARC,可能泄露内部邮件策略或第三方服务密钥 |
| CNAME | 别名 | 发现CDN或云服务,迂回找出真实IP |
我喜欢用 dig 命令,它比 nslookup 详细得多:
dig example.com ANY +short
dig mx example.com
dig ns example.com
你可能会问,为什么不直接用在线工具?因为在渗透测试时,终端里一气呵成效率更高。我把几个常用查询写成脚本,一条命令搞定所有DNS信息。
2.3.3 搜索引擎的高级用法
Google Hack 不是新东西,但一直很好用。我总结了几个常用语法:
site:example.com intitle:"index of"—— 找目录列表,可能有敏感文件。site:example.com filetype:xls OR filetype:xlsx password—— 找泄漏的Excel文件。site:example.com inurl:wp-content—— 快速判断是否用WordPress。
技巧:Bing 和 DuckDuckGo 有时候比谷歌能搜到不一样的结果,因为爬虫策略不同。我通常会三个引擎都查一遍,经常会发现搜索引擎索引了不同的页面。
2.3.4 证书透明度(Certificate Transparency)
这是最近几年我最依赖的被动信息源。SSL/TLS证书必须公开记录,意味着你通过crt.sh或CertSpotter就能拿到该域名下所有证书信息,包括子域名。
查询方式很简单:
curl -s "https://crt.sh/?q=%.example.com&output=json" | jq .
返回的JSON里直接列出了所有子域名。我曾在一次项目中,用这个方法发现了一个被遗忘的开发子域名,直接通向了目标内部网络。
2.4 被动信息收集整体流程
把前面的方法串起来,我画了一张图,你自己看看这个流程:
这张图展示了典型的被动信息收集工作流:从单一域名出发,同时向四个方向收集,汇总后进行交叉关联,最终形成攻击面清单。
2.5 避坑指南
我踩过不少坑,分享几个比较典型的:
- 过度依赖单一数据源——只查WHOIS不查证书,结果漏了重要子域名。我建议至少用三个不同数据源交叉验证。
- 忽略隐私保护——现在很多域名开了WHOIS隐私,注册信息被掩码。但藏在隐私服务后面的邮箱可能在其他地方出现过(比如GitHub提交记录)。我曾经用一个被掩码的邮箱前缀去搜GitHub,真的找到了同一个用户名。
- 不区分CDN——通过DNS查到A记录,发现是Cloudflare的IP就直接报告目标IP。其实那是CDN节点,不是源站。需要再通过历史DNS、CNAME、SSL证书溯源找到真实IP。
- 忘记记录时间戳——被动收集的信息会过期。我习惯把每次收集的结果保存下来,带上时间戳,方便后续对比变化。
2.6 小结
被动信息收集是渗透测试和红队行动的基石。不动手、不触碰、不留下痕迹——这是原则。你只要把公开数据拿回来,整理清楚,就能找到60%以上的攻击面。剩下的30%靠主动探测,还有10%靠运气(别笑,真遇到过)。
顺便提一句,上面这些命令和技巧只是入门。后面章节我们会深入实战,结合具体的靶标项目来演示怎么把这些方法串起来用。