第三章:信息收集与侦察
各位同学,今天我们来聊聊渗透测试里最容易被忽视、但恰恰是最关键的一步——信息收集。我见过太多新手,上来就拿着扫描器乱扫,结果要么被WAF封了IP,要么扫了半天全是误报。说白了,你连目标的门朝哪开都不知道,怎么打?
我个人习惯,信息收集至少要占整个渗透测试时间的30%以上。你想想看,信息越全,后面的攻击就越精准。这一章,我就把域名、端口、目录、指纹这四个核心环节,掰开揉碎了讲给你听。
3.1 域名信息收集
域名信息收集,说白了就是搞清楚目标有哪些资产。我遇到过不少企业,你以为他只有一个官网,结果子域名里藏着测试环境、后台管理、甚至VPN入口。
3.1.1 子域名枚举
为什么要找子域名?因为主站通常防护严密,但子域名可能就没人管了。我曾经在某次项目中,主站怎么都打不进去,结果在子域名里发现了一个phpMyAdmin,密码还是admin/admin……嗯,你懂的。
常用的工具有这些:
| 工具 | 特点 | 推荐场景 |
|---|---|---|
| Sublist3r | 基于搜索引擎和DNS | 快速收集,适合初期 |
| Amass | API接口多,深度扫描 | 企业级渗透测试 |
| OneForAll | 国产神器,字典丰富 | 中文站点效果极佳 |
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
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
3.2.2 端口服务识别
光知道端口号不够,你得知道背后跑的是什么服务。Nmap的 -sV 参数就是干这个的。
举个例子,端口8080可能是Tomcat,也可能是Jenkins,还可能是某个自定义服务。服务版本信息,直接决定了后续的漏洞利用方向。
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
/wp-admin、ThinkPHP的 /index.php 等。
3.3.2 扫描技巧
目录扫描不是傻跑字典。有几个技巧:
- 先扫根目录: 看看有没有
robots.txt、sitemap.xml,这些文件经常泄露路径。 - 注意状态码: 200是成功,403是禁止访问(可能里面有料),301是重定向(可能指向内网地址)。
- 递归扫描: 发现一个目录后,继续往深处扫。比如发现
/admin/,就再扫/admin/login/、/admin/upload/。
/backup/ 目录,里面有个 db_backup.sql 文件。下载下来一看,里面全是明文密码。嗯,那个项目当天就结束了。
3.4 指纹识别
指纹识别,就是判断目标网站用了什么技术栈。是Nginx还是Apache?是PHP还是Java?是WordPress还是ThinkPHP?知道了这些,你才能精准地找对应的漏洞。
3.4.1 识别方法
我一般从三个维度来判断:
- HTTP响应头:
Server、X-Powered-By、Set-Cookie等字段会泄露信息。 - 页面特征: 比如WordPress的
/wp-content/路径,或者ThinkPHP的ThinkPHP版本号在报错页面里。 - 特定文件: 比如
/favicon.ico的MD5值,可以用来识别CMS。
常用的指纹识别工具:
# WhatWeb(功能全面)
whatweb http://target.com
# Wappalyzer(浏览器插件,方便)
# 直接在浏览器里看
# 手动查看响应头
curl -I http://target.com
/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" 字样 | 触发报错 |
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
好了,这一章的内容就到这里。信息收集是渗透测试的基石,你花的时间越多,后面的路就越顺。下一章,我们会进入真正的漏洞挖掘环节——SQL注入。到时候我会分享一些我在实战中遇到的奇葩案例。