第三章:信息收集与侦察

各位同学,今天我们来聊聊渗透测试里最容易被忽视、但恰恰是最关键的一步——信息收集。我见过太多新手,上来就拿着扫描器乱扫,结果要么被WAF封了IP,要么扫了半天全是误报。说白了,你连目标的门朝哪开都不知道,怎么打?

我个人习惯,信息收集至少要占整个渗透测试时间的30%以上。你想想看,信息越全,后面的攻击就越精准。这一章,我就把域名、端口、目录、指纹这四个核心环节,掰开揉碎了讲给你听。

3.1 域名信息收集

域名信息收集,说白了就是搞清楚目标有哪些资产。我遇到过不少企业,你以为他只有一个官网,结果子域名里藏着测试环境、后台管理、甚至VPN入口。

3.1.1 子域名枚举

为什么要找子域名?因为主站通常防护严密,但子域名可能就没人管了。我曾经在某次项目中,主站怎么都打不进去,结果在子域名里发现了一个phpMyAdmin,密码还是admin/admin……嗯,你懂的。

常用的工具有这些:

工具 特点 推荐场景
Sublist3r 基于搜索引擎和DNS 快速收集,适合初期
Amass API接口多,深度扫描 企业级渗透测试
OneForAll 国产神器,字典丰富 中文站点效果极佳
我的小技巧: 别只依赖工具。去Google搜一下 "site:example.com -www",有时候能发现工具扫不到的隐藏子域名。

3.1.2 DNS记录分析

DNS记录里藏着不少好东西。A记录告诉你IP,MX记录暴露邮件服务器,TXT记录有时候会泄露一些敏感配置。

我习惯用 dig 命令手动查一下:

# 查询A记录
dig example.com A

# 查询MX记录
dig example.com MX

# 查询TXT记录(经常有惊喜)
dig example.com TXT

# 区域传输(基本不成功,但值得一试)
dig axfr @ns1.example.com example.com
注意: 区域传输(AXFR)如果配置不当,会把整个DNS记录全暴露给你。我曾经就靠这个,直接拿到了目标的所有内部服务器IP列表。

3.2 端口扫描

端口扫描,就是看目标开了哪些门。你想想看,一个Web服务器如果开了22端口(SSH)、3306端口(MySQL),那攻击面就大多了。

3.2.1 扫描策略选择

Nmap是绕不开的工具。但怎么扫,有讲究:

  • 全连接扫描(-sT): 慢,但稳定。适合内网环境。
  • 半连接扫描(-sS): 快,隐蔽。适合外网渗透,我90%的情况都用这个。
  • UDP扫描(-sU): 慢得要命,但有时候能发现DNS、SNMP等服务。

我个人常用的命令:

# 快速扫描常见端口
nmap -sS -T4 -p 1-10000 target.com

# 全端口扫描(慢,但全面)
nmap -sS -T4 -p- target.com

# 服务版本和操作系统识别
nmap -sV -O target.com
核心经验: 别一上来就全端口扫。先扫Top 1000端口,发现Web服务后,再针对性地扫其他端口。我见过有人扫全端口扫了3小时,结果目标就开了80和443。

3.2.2 端口服务识别

光知道端口号不够,你得知道背后跑的是什么服务。Nmap的 -sV 参数就是干这个的。

举个例子,端口8080可能是Tomcat,也可能是Jenkins,还可能是某个自定义服务。服务版本信息,直接决定了后续的漏洞利用方向。

避坑指南: 我曾经遇到过Nmap把某个服务识别错了。后来我习惯再用 nc 或者 curl 手动确认一下。比如 curl -I http://target.com:8080,看返回头里的Server字段。

3.3 目录扫描

目录扫描,就是找目标网站里隐藏的路径。后台登录、备份文件、敏感目录……这些都可能藏在某个路径下。

3.3.1 常用工具

工具 速度 字典质量 推荐指数
dirsearch ★★★★★
gobuster 极快 ★★★★
ffuf 极快 自定义 ★★★★★

我目前最常用的是 ffuf,因为它支持并发高,还能做很多高级过滤:

# 基本目录扫描
ffuf -u http://target.com/FUZZ -w /path/to/wordlist.txt

# 过滤掉404响应
ffuf -u http://target.com/FUZZ -w wordlist.txt -fc 404

# 根据响应大小过滤(排除默认页面)
ffuf -u http://target.com/FUZZ -w wordlist.txt -fs 1234
注意: 字典质量决定了扫描效果。别用网上随便下的字典。我习惯自己维护一个字典,把常见CMS、框架的路径都加进去。比如WordPress的 /wp-admin、ThinkPHP的 /index.php 等。

3.3.2 扫描技巧

目录扫描不是傻跑字典。有几个技巧:

  • 先扫根目录: 看看有没有 robots.txtsitemap.xml,这些文件经常泄露路径。
  • 注意状态码: 200是成功,403是禁止访问(可能里面有料),301是重定向(可能指向内网地址)。
  • 递归扫描: 发现一个目录后,继续往深处扫。比如发现 /admin/,就再扫 /admin/login//admin/upload/
我的经验: 有一次我扫到一个 /backup/ 目录,里面有个 db_backup.sql 文件。下载下来一看,里面全是明文密码。嗯,那个项目当天就结束了。

3.4 指纹识别

指纹识别,就是判断目标网站用了什么技术栈。是Nginx还是Apache?是PHP还是Java?是WordPress还是ThinkPHP?知道了这些,你才能精准地找对应的漏洞。

3.4.1 识别方法

我一般从三个维度来判断:

  1. HTTP响应头: ServerX-Powered-BySet-Cookie 等字段会泄露信息。
  2. 页面特征: 比如WordPress的 /wp-content/ 路径,或者ThinkPHP的 ThinkPHP 版本号在报错页面里。
  3. 特定文件: 比如 /favicon.ico 的MD5值,可以用来识别CMS。

常用的指纹识别工具:

# WhatWeb(功能全面)
whatweb http://target.com

# Wappalyzer(浏览器插件,方便)
# 直接在浏览器里看

# 手动查看响应头
curl -I http://target.com
核心思路: 指纹识别不是一次性的。你扫到某个目录后,可能发现那个目录用的是不同的技术栈。比如主站是Java,但 /blog/ 目录是WordPress。这种情况我遇到过好几次。

3.4.2 常见指纹特征

技术 特征 识别方法
Nginx Server: nginx 响应头
Apache Server: Apache 响应头
PHP X-Powered-By: PHP/7.4 响应头
WordPress /wp-content/, /wp-admin/ 路径特征
ThinkPHP 报错页面有 "ThinkPHP" 字样 触发报错
避坑指南: 有些网站会伪造指纹。比如明明用的是Nginx,但把Server头改成了 "Microsoft-IIS/10.0"。我曾经被这种伎俩骗过,浪费了半天时间。后来我习惯结合多个特征来判断,不只看一个点。

3.5 信息收集的整合与利用

信息收集不是孤立的活动。域名、端口、目录、指纹,这四个环节是环环相扣的。

举个例子:

  • 你通过子域名枚举,发现了一个 dev.example.com
  • 端口扫描发现它开了8080端口,服务是Tomcat。
  • 目录扫描找到了 /manager/html(Tomcat管理后台)。
  • 指纹识别确认是Tomcat 8.5,存在弱口令漏洞。

你看,每一步都在为下一步铺路。我习惯把收集到的信息整理成一个表格,方便后续利用:

目标: example.com
├── 子域名:
│   ├── www.example.com (192.168.1.1)
│   ├── dev.example.com (192.168.1.2)
│   └── mail.example.com (192.168.1.3)
├── 端口:
│   ├── 80 (Apache 2.4.41)
│   ├── 443 (Nginx 1.18.0)
│   └── 8080 (Tomcat 8.5)
├── 目录:
│   ├── /admin/ (403)
│   ├── /backup/ (200, 有文件)
│   └── /wp-admin/ (200, WordPress)
└── 指纹:
    ├── 主站: PHP 7.4 + Nginx
    └── 子站: Java + Tomcat
最后提醒: 信息收集阶段,别做任何攻击性操作。只收集,不触碰。一旦你开始扫描或者尝试登录,就可能触发告警。我见过有人信息收集时顺手试了个弱口令,结果被SOC抓个正着。

好了,这一章的内容就到这里。信息收集是渗透测试的基石,你花的时间越多,后面的路就越顺。下一章,我们会进入真正的漏洞挖掘环节——SQL注入。到时候我会分享一些我在实战中遇到的奇葩案例。