2. 信息收集基础:被动信息收集的概念与方法

说到信息收集,很多新手上来就拿着扫描器怼目标IP。嗯,我以前也干过这事。结果呢?刚扫了三个端口,目标WAF直接把我IP封了。后来我才明白,真正的信息收集应该从被动阶段开始——你不动手,让对方自己把东西露出来。

核心观点:被动信息收集的核心是“只观察,不触碰”。你不向目标发送任何探测数据包,只通过公开渠道获取信息。这样连日志都不会留下。

2.1 什么叫被动信息收集?

说白了,就是利用已经公开存在的资源来了解目标。你想想看,公司官网、招聘信息、备案数据、DNS记录、社交媒体……这些信息本来就摆在那里,任何人都能看到。你只是把它们收集起来,分析整理。

我个人喜欢把信息收集分成两个阶段:

  • 被动阶段——你只是个旁观者,不产生任何流量。
  • 主动阶段——你需要发送探测数据,比如端口扫描、目录爆破。
维度被动收集主动收集
与目标交互零交互有交互
产生日志不会留下痕迹会被记录
数据来源搜索引擎、公开档案、DNS记录端口扫描、漏洞探测
风险等级极低较高
适用场景黑盒测试初期、红队侦查已有授权后的精细探测

我在项目中遇到过不少团队,上来就主动扫描把目标打草惊蛇了。后来红队复盘时,发现前期如果好好做被动信息收集,至少能省一半时间。

2.2 被动信息收集的六大维度

被动收集不是瞎翻网页,需要有体系。我一般按下面六个方向来:

  1. 域名与子域名——通过证书透明度、DNS记录、搜索引擎找。
  2. IP与网段归属——ASN查询、WHOIS、RIR数据库。
  3. 技术栈识别——看响应头、Wappalyzer、BuiltWith。
  4. 人员与邮箱——领英、GitHub、Hunter.io。
  5. 历史漏洞与资产——Wayback Machine、漏洞库、Git泄漏。
  6. 社交媒体与文档——招聘信息、媒体报道、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 / AAAAIP地址找到服务器真实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 被动信息收集整体流程

把前面的方法串起来,我画了一张图,你自己看看这个流程:

被动信息收集知识流程 目标域名/IP WHOIS / 注册信息 DNS 记录 搜索引擎 证书透明度 收集子域名、IP段、邮箱、技术栈 交叉关联:IP → 域名 → 邮箱 → 人员 输出:攻击面清单 + 非侵入式报告 注意:被动收集不能替代主动探测,但它能让你知道该往哪儿探测

这张图展示了典型的被动信息收集工作流:从单一域名出发,同时向四个方向收集,汇总后进行交叉关联,最终形成攻击面清单。

2.5 避坑指南

我踩过不少坑,分享几个比较典型的:

  • 过度依赖单一数据源——只查WHOIS不查证书,结果漏了重要子域名。我建议至少用三个不同数据源交叉验证。
  • 忽略隐私保护——现在很多域名开了WHOIS隐私,注册信息被掩码。但藏在隐私服务后面的邮箱可能在其他地方出现过(比如GitHub提交记录)。我曾经用一个被掩码的邮箱前缀去搜GitHub,真的找到了同一个用户名。
  • 不区分CDN——通过DNS查到A记录,发现是Cloudflare的IP就直接报告目标IP。其实那是CDN节点,不是源站。需要再通过历史DNS、CNAME、SSL证书溯源找到真实IP。
  • 忘记记录时间戳——被动收集的信息会过期。我习惯把每次收集的结果保存下来,带上时间戳,方便后续对比变化。

2.6 小结

被动信息收集是渗透测试和红队行动的基石。不动手、不触碰、不留下痕迹——这是原则。你只要把公开数据拿回来,整理清楚,就能找到60%以上的攻击面。剩下的30%靠主动探测,还有10%靠运气(别笑,真遇到过)。

顺便提一句,上面这些命令和技巧只是入门。后面章节我们会深入实战,结合具体的靶标项目来演示怎么把这些方法串起来用。