信息收集:被动信息收集,主动信息收集

信息收集是所有渗透测试的起点,也是决定你能走多远的基础。我常跟团队说一句话:信息收集的深度,直接决定了攻击面的宽度。很多人一上来就掏 Nmap 扫端口,但往往漏掉了大量通过公开渠道就能拿到的高价值情报。这一章我带你过一遍被动和主动的收集方法,把两者的边界和配合讲清楚。

你可能会问:为什么非要分被动和主动?很简单,被动不触碰目标系统,完全合法且不会留下痕迹;主动会发送探测数据包,容易触发告警。实战中我一般先花 60% 时间做被动收集,剩下的再搞主动。这样做的好处是,你能提前画出目标的网络轮廓,为主动扫描定好方向。

核心观点:被动收集帮你发现「有什么」,主动收集帮你验证「是什么」。两者互补,缺一不可。

被动信息收集(OSINT + 公开渠道)

被动收集,说白了就是利用一切公开数据,在不与目标系统直接通信的前提下挖掘信息。我做过一次红队演练,光是靠证书透明度和搜索引擎,就把对方六个未备案的子域名翻了出来。下面我把常用的手段列出来。

常用被动收集手段

手段 来源/工具 典型产出
DNS 枚举 dig, nslookup, 被动 DNS 数据库 子域名、MX 记录、NS 记录
证书透明度日志 crt.sh, Google CT 所有已签发证书的域名和子域名
搜索引擎语法 Google dork, Bing, Yandex 敏感文件、目录、登录页面
Whois 查询 whois, ARIN 注册人、邮箱、电话、IP 段
SHODAN / FOFA 物联网搜索引擎 暴露的设备、开放端口、banner
社交工程 LinkedIn, GitHub, 社交媒体 人员信息、技术栈、内部项目

DNS 枚举的常见做法是用 `dig` 做 AXFR 尝试(我曾见过两台 DNS 服务器没锁 AXFR,直接拿回所有记录)。如果 AXFR 失败,就通过被动 DNS 数据库或暴力猜解子域名。

我个人特别依赖证书透明度日志。原因很简单:证书签发记录公开且不可篡改,任何域名只要申请过 HTTPS 证书就会留痕。你只需要访问 crt.sh?q=example.com,就能拿到所有历史子域名列表。这在很多企业级渗透里是发现非公开资产的关键一步。

实战技巧:我曾经用 crt.sh 找到了一个公司的内部 vpn.example.com,顺着这个域名只用了半小时就撞进了 VPN 后台。记住——证书日志不撒谎。

搜索引擎语法(Google Dork)

Google Dork 看起来像黑科技,其实只是巧妙利用搜索运算符。比如想找某个站点的备份文件:site:example.com ext:sql OR ext:bak。我习惯先收集所有子域名,然后对每个子域做 dork 扫描,往往能发现测试页面或遗留的配置文件。

# 查询特定站点的 phpMyAdmin 登录页
site:target.com inurl:phpmyadmin intitle:phpMyAdmin

# 找开放目录
site:target.com intitle:"index of" /
注意:Google 会自动限制频繁查询,建议使用随机 User-Agent 和延时,或者用 Bing/ Yandex 做辅助。另外,不要碰触任何未授权的扫描——搜索引擎层面的 dork 属于被动,但一旦你点击结果链接就可能变成主动。

主动信息收集(交互式探测)

被动收集画出了资产地图,主动收集就是走过去敲门、听回声、记录门牌。说白了就是通过发送数据包来获取目标系统的响应。这里要特别小心——主动行为会被 IDS/IPS、WAF 甚至防火墙记录,务必获得书面授权。

端口扫描与服务识别

Nmap 还是最顺手的工具。我的标准流程是:先用 -sn 快速存活探测,发现哪些 IP 在线;再用 -sS -sV 做 SYN 扫描和版本检测。为什么不直接全端口?因为时间成本——全端口扫描一个 C 段可能要几小时,而通过被动收集已经知道大概的服务范围,可以大大缩小扫描目标。

# 快速存活探测
nmap -sn 192.168.1.0/24

# 针对已知存活主机做版本扫描
nmap -sS -sV -p 80,443,22,3389 192.168.1.10

# 全端口扫描(谨慎使用)
nmap -p- --min-rate=10000 192.168.1.10
避坑指南:我记得有次对客户做渗透,他们自认为只有三个公网 IP。我用被动收集发现还有一个阿里云 OSS 的 CNAME 解析到他们的登录页面。如果只按客户给出的资产扫描,那个隐藏页面根本不会被发现。所以主动扫描的对象一定要来源于被动收集发现的所有域名和 IP 段,别信客户给的清单。

服务指纹与漏洞探测

光知道开放端口还不够,得确认服务版本、操作系统、甚至潜在漏洞。我常用 Nmap 的 NSE 脚本配合 WhatWeb(Web 应用指纹)来做。比如检测 Apache Struts 漏洞:

# Nmap 检测 Struts 漏洞(CVE-2017-5638)
nmap --script http-struts2-devMode -p 8080 target.com

# WhatWeb 识别 Web 框架
whatweb http://target.com --aggression 3

主动收集还有一个很重要的工作——网络拓扑探测。使用 traceroute、tracert 或 Nmap 的 --traceroute 参数,能画出目标 CDN 背后的真实服务器路径。有时候你会惊讶地发现,一个看似简单的 Web 服务背后经过了三个不同的 CDN 和反向代理。

被动与主动的协同

两者不是先后顺序那么简单。我通常拉一个双轴表格,把被动收集的数据作为输入,主动收集的结果作为验证,再反哺给被动收集做更深挖掘。比如:

  1. 被动收集阶段:从 crt.sh 拿到 50 个子域名,从 Whois 拿到 IP 段。
  2. 主动扫描:对 50 个子域名做端口扫描,发现只有 12 个存活,但其中 3 个存在奇怪的端口(如 8089)。
  3. 回馈被动:拿着这三个端口号去 Shodan 搜索,发现它们运行的专有软件版本,进而找到历史漏洞。

下面这张 SVG 图清晰展示了被动收集与主动收集的配合流程,以及它们共享的数据池。

信息收集:被动与主动的协同流程 信息收集协同流程 被动信息收集 DNS / 证书日志 Whois / 搜索引擎 Shodan / 社交网络 被动 DNS 数据库 主动信息收集 端口扫描 (Nmap) 服务指纹识别 漏洞探测 (NSE) 网络拓扑探测 统一资产数据库 攻击面清单 / 验证报告 说明:被动收集汇入数据池,主动收集验证数据池,两者循环迭代,最终生成攻击面清单
重要提醒:主动扫描会产生大量日志。如果你在实战渗透中不想打草惊蛇,使用代理或 VPN 转发流量,并严格控制扫描速率。我曾经见过一个实习生用 Nmap 的 -T5 扫客户核心服务器,结果对方的 DDoS 防护直接把流量黑洞了,还触发了安全事件响应。做主动收集,慢就是快。

小结

信息收集从来不只有一种姿势。被动收集让你静悄悄地摸清底牌,主动收集帮你确认手中牌的虚实。我个人习惯把被动收集放在每一个渗透测试的最初阶段,甚至在没有目标 IP 的时候就开始。记住一句老话:你永远不知道哪条公开记录会变成撬开对方大门的钥匙。做好收集,后面的每一步都会轻松很多。