3、信息收集阶段:被动信息收集(OSINT)、主动信息收集(端口扫描、服务探测)、子域名枚举与指纹识别

信息收集,说白了就是「知己知彼」的第一步。我见过太多测试人员,上来就掏工具乱扫一气,结果要么被 WAF 封了 IP,要么漏掉了关键入口。信息收集的质量,直接决定了后续渗透的深度和效率。

这一阶段我习惯分成两条线走:被动和主动。被动收集不碰目标一根汗毛,全靠公开信息拼图;主动收集则是直接跟目标系统「打招呼」,获取更精确的资产信息。两条线交叉验证,才能画出完整的攻击面。

3.1 被动信息收集(OSINT)

OSINT(Open Source Intelligence),就是利用公开渠道获取情报。你不需要发送任何数据包,只需要会搜、会看、会分析。

3.1.1 核心信息源

信息源 可获取内容 常用工具/平台
搜索引擎 子域名、敏感文件、暴露的管理后台 Google Hacking、Bing、Shodan
DNS 记录 A 记录、MX 记录、TXT 记录、NS 记录 dig、nslookup、dnsrecon
SSL 证书 证书透明度日志中的子域名 crt.sh、CertSpotter
Whois 信息 注册人、邮箱、电话、IP 段 whois、whois.domaintools.com
社交媒体 员工信息、技术栈、内部文档截图 LinkedIn、GitHub、Twitter
代码托管平台 泄露的密钥、配置文件、注释中的路径 GitHub 搜索、GitRob、TruffleHog
我的习惯:每次做 OSINT 都会先查 crt.sh。SSL 证书透明度日志里经常能翻到没人记得的子域名,这些往往是测试环境或旧版系统,防护最薄弱。

3.1.2 Google Hacking 实战

Google Hacking 不是黑科技,就是用好搜索语法。我整理了几条最常用的:

# 找登录页面
site:target.com inurl:login | inurl:admin | inurl:portal

# 找敏感文件
site:target.com filetype:pdf | filetype:docx | filetype:xlsx

# 找目录遍历漏洞
site:target.com intitle:"index of" "parent directory"

# 找暴露的配置文件
site:target.com filetype:env | filetype:conf | filetype:yml

# 找 GitHub 上的泄露
"target.com" password OR secret OR api_key

我曾经在一次测试中,用 site:target.com filetype:sql 直接搜到了一个数据库备份文件。虽然文件已经过期,但里面包含了完整的用户表结构和测试账号密码——这成了后续横向移动的突破口。

3.1.3 被动收集的避坑指南

我曾经踩过的坑:过度依赖单一信息源。有一次我只查了 Whois,发现注册邮箱是 admin@target.com,就以为找到了管理员邮箱。后来才发现那只是个自动生成的占位邮箱,真正的管理员邮箱藏在 SSL 证书的 Organization 字段里。所以,交叉验证是 OSINT 的核心原则。

3.2 主动信息收集

被动收集拼完图,就该主动出击了。主动收集会直接向目标发送数据包,所以一定要控制频率和并发,别把目标打挂了。

3.2.1 端口扫描

端口扫描的目的是找出目标开放了哪些端口,以及端口上运行着什么服务。我几乎只用 Nmap,但会用不同的参数组合来适应不同场景。

扫描类型 命令示例 适用场景
快速扫描 nmap -T4 -F target.com 初步探测,快速了解开放端口
全端口扫描 nmap -p- -T4 target.com 不放过任何端口,耗时较长
服务版本探测 nmap -sV -T4 target.com 识别服务名称和版本号
操作系统识别 nmap -O -T4 target.com 判断目标操作系统类型
UDP 扫描 nmap -sU -T4 target.com 扫描 UDP 端口(如 DNS、SNMP)
关键参数说明:
  • -T4:时间模板,4 表示激进但可控。内网环境可以用 -T5,外网建议 -T3 或 -T4。
  • -sV:版本探测,会发送探针包,比普通扫描更慢但信息更全。
  • -p-:扫描 1-65535 所有端口。我一般先扫常见端口,发现异常再全扫。

3.2.2 服务探测与 Banner 抓取

端口扫完了,还得知道端口上跑的是什么服务。Nmap 的 -sV 能搞定大部分,但有些场景需要手动验证。

# 使用 Nmap 进行服务版本探测
nmap -sV -p 80,443,22,3306 target.com

# 使用 Netcat 手动抓取 Banner
nc -v target.com 80
GET / HTTP/1.1
Host: target.com

# 使用 OpenSSL 抓取 HTTPS Banner
openssl s_client -connect target.com:443 -servername target.com

为什么要手动抓 Banner?因为有些服务会伪装端口。比如把 SSH 服务放在 443 端口上,Nmap 可能误判为 HTTPS。手动发个请求,看返回内容,才能确认真实服务。

3.3 子域名枚举

子域名是攻击面的「隐藏副本」。主站防护做得再好,子域名可能就是个测试环境,密码还是 admin/admin。

3.3.1 枚举方法

我一般用三种方法结合:

  1. 字典爆破:用常见子域名列表去猜。工具推荐 subfinder、ffuf、gobuster。
  2. 证书透明度日志:从 crt.sh 拉取所有已签发的证书域名。
  3. DNS 区域传输:如果 DNS 服务器配置不当,可以直接获取全部记录。
# 使用 subfinder 进行被动枚举
subfinder -d target.com -o subdomains.txt

# 使用 ffuf 进行字典爆破
ffuf -w /usr/share/wordlists/subdomains.txt -u http://FUZZ.target.com

# 尝试 DNS 区域传输
dig axfr @ns1.target.com target.com
我的经验:字典爆破时,别只盯着常见的 admin、mail、dev。试试 jenkins、gitlab、jira、confluence 这些开发工具的子域名,中奖率很高。

3.4 指纹识别

指纹识别就是判断目标用了什么技术栈。知道是 Apache 还是 Nginx,是 PHP 还是 Java,是 WordPress 还是 ThinkPHP,后续的漏洞利用方向就清晰了。

3.4.1 常用工具

工具 识别方式 特点
WhatWeb HTTP 头、HTML 内容、Cookie 识别种类多,支持自定义规则
Wappalyzer 浏览器扩展 + API 可视化友好,适合快速查看
BuiltWith 在线服务 技术栈信息非常详细
Nmap NSE 脚本 服务探测 + 指纹匹配 可集成到扫描流程中
# 使用 WhatWeb 进行指纹识别
whatweb target.com

# 使用 Nmap 的 http-server-header 脚本
nmap --script http-server-header -p 80,443 target.com

# 使用 curl 手动查看响应头
curl -I https://target.com

3.4.2 手动指纹识别技巧

工具不是万能的。有些网站会修改默认的 Server 头来迷惑扫描器。这时候就得靠手动分析了:

  • 查看 HTML 注释:很多 CMS 会在注释里留下版本信息。
  • 检查 JS/CSS 文件路径:比如 /wp-content/ 基本就是 WordPress。
  • 分析 Cookie:PHPSESSID 是 PHP,JSESSIONID 是 Java。
  • 查看错误页面:故意访问一个不存在的路径,看 404 页面的样式和内容。
注意:指纹识别不是一次性的。同一个网站的不同子域名、不同路径,可能用了完全不同的技术栈。我遇到过主站是 Java,但 /api/ 路径是 Node.js 的情况。所以,每个端点都要单独做指纹识别。

3.5 信息收集知识体系

下面这张图总结了信息收集阶段的整体流程和关键节点:

信息收集阶段知识体系 信息收集 被动信息收集(OSINT) 主动信息收集 搜索引擎 DNS / SSL Whois / GitHub 端口扫描 服务探测 指纹识别 子域名枚举 字典爆破 证书日志 DNS 区域传输 输出:攻击面清单 IP / 域名 / 子域名列表 开放端口 / 服务 / 版本 技术栈 / CMS / 框架 💡 三条线并行推进,最终汇总成攻击面清单,用于下一阶段的漏洞探测

3.6 信息收集的产出物

信息收集不是做完就完了,你得把结果整理成可用的格式。我一般会输出以下内容:

  • 资产清单:所有发现的域名、子域名、IP 地址、C 段。
  • 端口与服务表:每个 IP 的开放端口、服务名称、版本号。
  • 技术栈清单:每个端点的 Web 服务器、后端语言、CMS、框架。
  • 敏感信息汇总:泄露的邮箱、密钥、配置文件路径。
  • 潜在入口点:管理后台、测试环境、API 端点、旧版本服务。
我的建议:用 Markdown 或 Excel 整理,每个条目都标注信息来源(被动/主动/工具名)。这样后续写报告时,每个发现都能追溯到原始数据,经得起推敲。

信息收集阶段,说白了就是「把目标摸透」。被动收集让你知道目标长什么样,主动收集让你知道目标穿什么衣服、戴什么首饰。两者结合,你才能找到那扇没锁的门。