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 |
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 被动收集的避坑指南
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 枚举方法
我一般用三种方法结合:
- 字典爆破:用常见子域名列表去猜。工具推荐
subfinder、ffuf、gobuster。 - 证书透明度日志:从 crt.sh 拉取所有已签发的证书域名。
- 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
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 页面的样式和内容。
/api/ 路径是 Node.js 的情况。所以,每个端点都要单独做指纹识别。
3.5 信息收集知识体系
下面这张图总结了信息收集阶段的整体流程和关键节点:
3.6 信息收集的产出物
信息收集不是做完就完了,你得把结果整理成可用的格式。我一般会输出以下内容:
- 资产清单:所有发现的域名、子域名、IP 地址、C 段。
- 端口与服务表:每个 IP 的开放端口、服务名称、版本号。
- 技术栈清单:每个端点的 Web 服务器、后端语言、CMS、框架。
- 敏感信息汇总:泄露的邮箱、密钥、配置文件路径。
- 潜在入口点:管理后台、测试环境、API 端点、旧版本服务。
信息收集阶段,说白了就是「把目标摸透」。被动收集让你知道目标长什么样,主动收集让你知道目标穿什么衣服、戴什么首饰。两者结合,你才能找到那扇没锁的门。