信息收集:被动信息收集,主动信息收集
信息收集是所有渗透测试的起点,也是决定你能走多远的基础。我常跟团队说一句话:信息收集的深度,直接决定了攻击面的宽度。很多人一上来就掏 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,就能拿到所有历史子域名列表。这在很多企业级渗透里是发现非公开资产的关键一步。
搜索引擎语法(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" /
主动信息收集(交互式探测)
被动收集画出了资产地图,主动收集就是走过去敲门、听回声、记录门牌。说白了就是通过发送数据包来获取目标系统的响应。这里要特别小心——主动行为会被 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
服务指纹与漏洞探测
光知道开放端口还不够,得确认服务版本、操作系统、甚至潜在漏洞。我常用 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 和反向代理。
被动与主动的协同
两者不是先后顺序那么简单。我通常拉一个双轴表格,把被动收集的数据作为输入,主动收集的结果作为验证,再反哺给被动收集做更深挖掘。比如:
- 被动收集阶段:从 crt.sh 拿到 50 个子域名,从 Whois 拿到 IP 段。
- 主动扫描:对 50 个子域名做端口扫描,发现只有 12 个存活,但其中 3 个存在奇怪的端口(如 8089)。
- 回馈被动:拿着这三个端口号去 Shodan 搜索,发现它们运行的专有软件版本,进而找到历史漏洞。
下面这张 SVG 图清晰展示了被动收集与主动收集的配合流程,以及它们共享的数据池。
-T5 扫客户核心服务器,结果对方的 DDoS 防护直接把流量黑洞了,还触发了安全事件响应。做主动收集,慢就是快。
小结
信息收集从来不只有一种姿势。被动收集让你静悄悄地摸清底牌,主动收集帮你确认手中牌的虚实。我个人习惯把被动收集放在每一个渗透测试的最初阶段,甚至在没有目标 IP 的时候就开始。记住一句老话:你永远不知道哪条公开记录会变成撬开对方大门的钥匙。做好收集,后面的每一步都会轻松很多。