3、信息收集基础:被动信息收集与主动信息收集
信息收集,说白了就是「知己知彼」的第一步。我做了这么多年红蓝对抗,见过太多团队在信息收集阶段偷懒,结果后面被打得措手不及。你想想看,连目标的门朝哪开都不知道,你怎么制定攻击计划?
这一章,咱们就把信息收集这件事掰开揉碎了讲。我会把被动收集和主动收集分开说,再配上我常用的工具和实战经验。嗯,这里要注意——信息收集不是一次性的活儿,它是个持续迭代的过程。
核心原则:被动收集在前,主动收集在后。先摸清目标的大致轮廓,再动手去碰它。这个顺序一旦搞反,你可能会提前暴露自己。
3.1 被动信息收集:不碰目标,先摸清底细
被动收集,就是你不直接跟目标系统发生任何网络交互。你只是在公开的渠道里翻找信息。我个人习惯把这一步叫做「白盒侦察」——你不动手,但信息已经摆在你面前了。
3.1.1 OSINT 开源情报
OSINT 听起来高大上,其实说白了就是「搜」。但怎么搜、搜什么,这里头有门道。
- 搜索引擎高级语法:site:、inurl:、intitle:、filetype:。我曾在一次演练中,用
site:target.com filetype:pdf翻出了一份内部网络拓扑图——对方居然没删干净。 - 社交媒体与招聘信息:LinkedIn、招聘网站上的职位描述,经常暴露技术栈。比如招「Kubernetes 运维」的,那目标大概率有容器环境。
- 代码托管平台:GitHub、GitLab 上的泄露。用
org:target "password"搜一下,你可能会吓一跳。 - 证书透明度日志:crt.sh 这个网站,能查到目标所有的 SSL/TLS 证书记录,包括子域名。
我的经验:OSINT 最容易被忽视的是「时间维度」。信息是有时效性的。我一般会先拉一份全量数据,然后按时间排序,重点关注最近 3 个月内的新增信息——那往往是目标当前最活跃的资产。
3.1.2 DNS 枚举
DNS 枚举,就是通过 DNS 协议去挖掘目标的域名和子域名信息。为什么重要?因为很多攻击面都藏在子域名里——测试环境、后台管理、API 网关……
常用的方法有几种:
| 方法 | 原理 | 典型工具 |
|---|---|---|
| 字典爆破 | 用常见子域名列表去猜 | dnsenum、subfinder |
| DNS 区域传输 | 尝试请求完整的区域记录(成功率低) | dig axfr |
| 证书透明度查询 | 从 crt.sh 拉取证书中的域名 | crt.sh + 脚本 |
| 搜索引擎爬取 | 利用搜索引擎的缓存记录 | Google dork + 手工 |
我曾经在一次项目中,用字典爆破加证书透明度交叉验证,找到了目标一个隐藏的 Jenkins 服务器。那个 Jenkins 没设密码,直接拿到了生产环境的部署权限。你想想看,就这一步,省了多少事。
注意:DNS 枚举虽然是被动的,但高频的 DNS 查询可能会被目标的 DNS 服务器记录。如果目标有 DNS 日志审计,你的 IP 可能会被标记。建议使用公共 DNS 解析器或代理来分散请求。
3.2 主动信息收集:动手碰一碰
被动收集做完,你手里应该有一份目标的大致资产清单了。接下来就是主动探测——直接跟目标系统建立网络连接,看看它到底开了哪些口子。
3.2.1 端口扫描
端口扫描,就是问目标:「你开了哪些门?」每个端口对应一个服务,每个服务都可能是一个突破口。
我个人习惯把端口扫描分成两个阶段:
- 快速全端口扫描:用 Masscan 扫 1-65535 所有端口,速度极快。目的是先摸清哪些端口是活的。
- 精细服务探测:用 Nmap 对发现的开放端口做深度探测,获取服务版本、操作系统指纹等信息。
为什么会这样分?因为 Nmap 扫全端口太慢了。Masscan 号称「最快的端口扫描器」,能在几分钟内扫完整个互联网。嗯,这里要注意——Masscan 的误报率比 Nmap 高,所以它只适合做第一轮筛选。
3.2.2 服务探测
端口开了,不代表你知道它是什么服务。服务探测就是去识别端口背后跑的是什么软件、什么版本。
Nmap 的服务探测靠的是「指纹匹配」——它发送特定的探测包,然后根据返回的响应特征来识别服务。比如:
# 快速扫描常见端口
nmap -sS -sV -T4 -p 80,443,22,3306,6379 target.com
# 全端口扫描 + 服务版本探测(慢,但全面)
nmap -sS -sV -p- -T4 target.com
# 操作系统识别
nmap -O target.com
我遇到过最坑的一次——Nmap 把一个自定义服务识别成了 Apache,结果那个服务其实是目标自己写的 HTTP 中间件,存在一个未公开的 RCE 漏洞。所以,永远不要完全相信工具的输出。服务探测的结果只是参考,最终还是要靠人工验证。
关键点:服务版本号是漏洞利用的核心依据。比如 OpenSSH 7.2 之前存在 CVE-2016-6210,Nginx 1.14.0 之前存在目录遍历漏洞。版本号越精确,你找到对应 exploit 的概率就越高。
3.3 工具实战:Nmap 与 Masscan
这两个工具是主动信息收集的「倚天剑」和「屠龙刀」。我几乎每个项目都会用到它们。
3.3.1 Nmap:精细探测之王
Nmap 的功能太强了,我挑几个最常用的场景说:
| 场景 | 命令示例 | 说明 |
|---|---|---|
| TCP SYN 扫描 | nmap -sS target |
半开扫描,速度快,不易被日志记录 |
| UDP 扫描 | nmap -sU target |
UDP 服务探测,速度慢但必要 |
| 脚本扫描 | nmap --script vuln target |
调用 NSE 脚本检测常见漏洞 |
| 规避防火墙 | nmap -sS -f -D RND:10 target |
分片 + 诱饵 IP,绕过简单检测 |
避坑指南:我曾经在演练中直接用默认参数扫目标,结果触发了对方的 IDS 告警,目标直接封了我们的 IP。后来我学乖了——先用 -T2 慢速扫描,配合 --randomize-hosts 随机化目标顺序,再挂上代理。记住,隐蔽性比速度重要。
3.3.2 Masscan:速度至上
Masscan 的设计哲学就是「快」。它用异步传输的方式,能在单机上达到每秒数百万个数据包的发送速率。
# 扫描全端口,速率 1000 包/秒
masscan -p1-65535 --rate=1000 target.com
# 扫描常见端口,输出为 JSON 格式
masscan -p80,443,22,8080 --rate=5000 -oJ results.json target.com
# 指定网卡和源 IP(绕过某些限制)
masscan -p1-65535 --rate=2000 --interface eth0 --source-ip 192.168.1.100 target.com
Masscan 的输出格式比较简陋,我一般会把它跟 Nmap 配合使用:先用 Masscan 扫出开放端口列表,再把这个列表喂给 Nmap 做精细探测。
警告:Masscan 的扫描行为非常「暴力」。如果你在真实生产环境用默认速率(比如 10000 包/秒),很可能会打垮目标的小型路由器或防火墙。我建议从 --rate=500 开始,逐步调高,观察目标响应情况。
3.4 信息收集的「避坑」总结
做了这么多年攻防,我踩过的坑不少。给你列几个最常见的:
- 只扫 TCP 不扫 UDP:很多关键服务(DNS、SNMP、DHCP)跑在 UDP 上。你不扫 UDP,等于漏掉半张攻击面。
- 忽略 IPv6:现在很多目标有 IPv6 地址,但扫描器默认只扫 IPv4。记得加上
-6参数。 - 不做结果去重:同一个 IP 可能对应多个域名,同一个服务可能出现在多个端口。去重后的资产清单才是干净的。
- 不留记录:每次扫描的结果都要保存下来。我习惯用
-oA同时输出三种格式(normal、XML、grepable),方便后续分析。
信息收集这个阶段,说白了就是「磨刀不误砍柴工」。你花的时间越多,后面漏洞利用阶段就越顺畅。别急着动手,先把地图画清楚。