3. 信息收集实战:域名信息收集、子域名枚举、端口与服务探测、指纹识别
信息收集,说白了就是“踩点”。你连目标的门朝哪开、墙有多厚都不知道,怎么制定攻击方案?反过来,防守方也一样——你得知道自己暴露了多少信息。
我个人习惯把信息收集分成四个维度:域名信息、子域名、端口与服务、指纹识别。这四步走完,目标的攻击面基本就浮出水面了。
核心观点:信息收集的深度,直接决定后续漏洞挖掘的效率。别急着拿扫描器乱扫,先把信息摸透。
3.1 域名信息收集:Whois 与 DNS
拿到一个域名,我第一件事就是查 Whois。为什么?因为注册信息里经常藏着“惊喜”。
举个例子,我在一次项目中查某个企业的 Whois,发现注册邮箱是 admin@xxx.com,而这个邮箱居然在其他泄露数据库里出现过。顺着这个邮箱,我又找到了该企业的其他域名和内部系统。你看,一个 Whois 查询,可能就打开了突破口。
Whois 查询实战
常用的 Whois 查询工具有:
- whois 命令行(Linux/Mac 自带,Windows 需安装)
- 在线 Whois 查询(如 whois.com、站长工具)
- Python 脚本(使用
python-whois库批量查询)
命令行示例:
whois example.com
输出中重点关注:
| 字段 | 说明 | 安全价值 |
|---|---|---|
| Registrant Name | 注册人姓名 | 可能泄露真实身份 |
| Registrant Email | 注册邮箱 | 可用于社工或关联查询 |
| Name Server | DNS 服务器 | 判断是否使用第三方 DNS |
| Creation Date | 注册时间 | 判断域名新旧程度 |
注意:很多域名开启了 Whois 隐私保护,注册信息会被隐藏。这时候别灰心,试试历史 Whois 记录查询,说不定能挖到旧数据。
DNS 记录收集
DNS 记录能告诉你域名背后的基础设施。我个人习惯收集以下几类记录:
- A 记录:域名指向的 IPv4 地址
- AAAA 记录:IPv6 地址
- MX 记录:邮件服务器地址
- NS 记录:域名服务器
- CNAME 记录:别名记录,可能暴露内部域名
- TXT 记录:经常包含 SPF、DKIM 等安全配置信息
查询命令:
# 查询 A 记录
nslookup example.com
# 查询 MX 记录
nslookup -type=mx example.com
# 查询所有记录(使用 dig)
dig example.com any
小技巧:我曾经通过 TXT 记录里的 SPF 配置,推断出目标使用了某个云邮件服务,然后针对该服务的历史漏洞进行测试,成功找到了一个配置不当的接口。
3.2 子域名枚举:扩大攻击面
主域名通常防护严密,但子域名呢?很多企业把测试环境、后台管理、API 接口放在子域名上,防护却弱得多。子域名枚举,就是帮你找到这些“后门”。
常用的枚举方法有三种:
- 字典爆破:使用常见子域名列表(如
admin、test、dev、api)进行 DNS 查询 - 搜索引擎:利用 Google dork 语法,如
site:example.com -www - 证书透明度(CT)日志:从 SSL/TLS 证书中提取子域名
我推荐的工具:
| 工具 | 方法 | 速度 | 适用场景 |
|---|---|---|---|
| Sublist3r | 搜索引擎 + DNS | 中等 | 快速收集常见子域名 |
| Amass | CT 日志 + DNS + 搜索引擎 | 较慢 | 深度枚举,覆盖面广 |
| Subfinder | 多源聚合 | 快 | 被动收集,不产生流量 |
| dnsrecon | DNS 爆破 + 区域传输 | 中等 | 检测 DNS 区域传输漏洞 |
实战命令:
# 使用 Sublist3r
sublist3r -d example.com
# 使用 Amass(被动模式)
amass enum -passive -d example.com
# 使用 Subfinder
subfinder -d example.com
避坑指南:我曾经用 Amass 跑一个大型目标,结果跑了整整一天,生成了几千个子域名。但其中很多是泛解析(wildcard DNS)产生的假阳性。所以,枚举完一定要做去重和存活验证,用 httpx 或 httprobe 检查哪些子域名真的能访问。
3.3 端口与服务探测
子域名找到了,接下来要看这些服务器上跑了哪些服务。端口扫描是这一步的核心。
你想想看,一个开放的 3306 端口意味着什么?MySQL 数据库。如果这个端口暴露在公网,而且用的是弱密码,那基本就等于把数据送人了。
Nmap 实战
Nmap 是端口扫描的“瑞士军刀”。我常用的扫描策略:
- 快速扫描:
nmap -T4 -F target(扫描前 100 个常用端口) - 全端口扫描:
nmap -p- target(扫描 1-65535 端口,但很慢) - 服务版本探测:
nmap -sV target(识别服务版本) - 操作系统识别:
nmap -O target(需要 root 权限)
综合命令示例:
nmap -sS -sV -O -T4 -p 1-10000 target.com
输出解读:
| 端口 | 状态 | 服务 | 版本 | 潜在风险 |
|---|---|---|---|---|
| 22/tcp | open | SSH | OpenSSH 7.4 | 已知漏洞 CVE-2018-15473 |
| 80/tcp | open | HTTP | Apache 2.4.29 | 目录遍历、信息泄露 |
| 3306/tcp | open | MySQL | 5.7.25 | 弱密码、未授权访问 |
| 8080/tcp | open | HTTP-Proxy | Tomcat 8.5 | 管理后台暴露 |
注意:大规模端口扫描可能触发目标的安全告警。我建议先用 Masscan 做快速探测(每秒可发百万级数据包),再用 Nmap 做精细扫描。另外,扫描前确认你的行为已获得授权,否则可能违法。
3.4 指纹识别:知道对手是谁
端口扫描告诉你开了哪些服务,但没告诉你这些服务的具体“身份”。指纹识别就是干这个的——识别 Web 框架、CMS、中间件、前端库等。
举个例子,你发现目标用了 WordPress,那就可以直接搜索 WordPress 的历史漏洞。如果发现用了某个特定版本的 jQuery,那可能就有已知的 XSS 漏洞。
常用指纹识别工具
| 工具 | 方式 | 特点 |
|---|---|---|
| WhatWeb | 命令行 | 识别 1800+ 种 Web 技术 |
| Wappalyzer | 浏览器插件 | 实时显示当前网站技术栈 |
| BuiltWith | 在线服务 | 提供详细的技术栈报告 |
| FingerprintJS | JS 库 | 浏览器指纹识别(用于反爬) |
WhatWeb 使用示例:
whatweb example.com
# 输出示例
# http://example.com [200 OK] Apache[2.4.29], PHP[7.3.11], HTML5,
# WordPress[5.3.2], jQuery[1.12.4], MetaGenerator[WordPress 5.3.2]
个人经验:有一次我扫描一个目标,WhatWeb 识别出它用了 Drupal 7。我立刻想到 Drupal 7 有个著名的 SQL 注入漏洞(CVE-2018-7600)。验证后,果然存在。你看,指纹识别直接帮你锁定了攻击方向。
3.5 信息收集流程总结
把上面四步串起来,就是一个完整的信息收集流程:
- 域名信息:Whois 查注册信息,DNS 查解析记录
- 子域名枚举:扩大攻击面,找到隐藏资产
- 端口与服务探测:确定开放端口和运行服务
- 指纹识别:识别具体技术栈,定位已知漏洞
这四步走完,你手里应该有一份详细的“目标画像”了。接下来,就可以针对性地进行漏洞挖掘了。
最后提醒一句:信息收集不是一次性工作。目标的服务会变、子域名会新增、指纹会更新。我建议定期(比如每周)做一次信息收集,保持对目标攻击面的持续监控。