渗透测试之信息收集:这些技巧决定了渗透成败

作者:浅木·先生


前言

做渗透测试久了,你会越来越认同一个观点:信息收集的质量直接决定渗透测试的成败。

同样的目标URL,不同人扫出来的结果完全不同——有人只能扫出后台登录页,有人却能通过旁站拿下同服务器的其他项目。有人对着主站无可奈何,有人通过子域名发现了测试环境直接弱口令进后台。

这不是工具的差距,而是信息收集思路和深度的差距。

本文系统性地梳理渗透测试信息收集的全部技巧,涵盖域名、端口、目录、指纹、社工等多个维度,帮你做到"打谁都有东西打"。


一、资产发现:从目标域名开始

1.1 域名基础信息收集

拿到目标URL后,第一步是查清楚这个域名的"底细":

# whois查询:注册人、注册邮箱、NS服务器、到期时间
whois target.com

# whois反查:同一个注册人还注册了哪些域名(扩大攻击面)
whois -h whois.verisign.com "=$ domain target.com"

# 真实IP判断:是否使用CDN/WAF
nslookup target.com
dig target.com
在线检测:https://www.ipaddresscenter.com/

# CDN检测:
# 如果多个地点ping出来的IP不同,说明有CDN,直接打CDN IP通常没意义

实战技巧: 如果目标用了CDN,可以尝试:

  • 通过子域名查真实IP(CDN一般只给主站配)
  • 通过邮件Spoofing查真实IP
  • 通过国外DNS服务器查询:dig @8.8.8.8 target.com

1.2 子域名探测

子域名是扩大攻击面的利器。主站防护再好,测试站往往漏洞一堆。

# 被动收集(快,不发请求到目标)
amass enum -passive -d target.com -o subdomains.txt
subfinder -d target.com -o subdomains.txt

# 主动爆破(全,需要自己搭建字典)
python3 sublist3r.py -d target.com -t 10 -o subdomains.txt
# 或者使用oneforall
python3 oneforall.py --domain target.com run

# 在线平台(免搭建)
https://dnsgrep.cn/
https://www.virustotal.com/
https://crt.sh/

真实案例: 某次给某大型企业做渗透测试,主站是www.company.com,扫描了几天没收获。后来通过子域名探测发现 dev.company.com(开发者测试平台),用的是Django框架,Debug模式没关,通过报错信息直接找到了数据库密码和管理员后台。

1.3 旁站与同IP查询

# 查同IP网站(旁站)
https://www.yougetsignal.com/ (输入IP查同服务器网站)
http://www.bypass.cn/sameip?domain=target.com

# Bing查旁站
bing search: ip:server_ip

核心思路: 一个服务器经常托管多个项目,旁站的安全投入往往比主站弱很多。拿下旁站 = 拿下同服务器主站的潜在入口。


二、端口探测:开放端口就是攻击面

2.1 高危端口快速定位

# nmap快速扫描常用高危端口
nmap -T4 -sV --open -p 21,22,23,25,80,443,445,1433,1521,3306,3389,5432,6379,8080,8443,27017 target.com

# 全端口扫描(需要更长时间)
nmap -T4 -sV -p 1-65535 --open target.com

# SYN半连接扫描(快,隐蔽)
nmap -sS -T4 -p 1-65535 target.com

2.2 常见高危端口与服务对应关系

端口服务风险利用方式
21FTP匿名访问、弱口令爆破/匿名登录,文件读写
22SSH弱口令爆破/密钥登录
23Telnet明文传输中间人窃取密码
445SMBMS17-010永恒之蓝,直接RCE
1433MSSQL弱口令爆破,xp_cmdshell提权
3306MySQL弱口令爆破,直接读写文件
3389RDP弱口令/CVE爆破,CVE-2019-0708
5432PostgreSQL弱口令爆破,UDF提权
6379Redis未授权写Webshell/计划任务
8080Tomcat/Glassfish弱口令/文件上传后台getshell
9200Elasticsearch未授权任意命令执行
27017MongoDB未授权直接连接读数据

2.3 端口服务版本识别

# 服务版本识别
nmap -sV -sC target.com -p 445,3389,8080

# 漏洞脚本扫描(根据版本匹配CVE)
nmap --script vuln target.com -p 445

三、Web指纹识别:知己知彼

3.1 中间件与CMS指纹

# whatweb:识别Web服务器、编程语言、CMS类型
whatweb -a 3 https://target.com

# Wappalyzer浏览器插件(被动识别)

# 手工判断技巧:
# - 报错页面(Tomcat / JBoss / Weblogic各有特色报错)
# - HTTP头(X-Powered-By / Server / Via)
# - HTML源码注释(WordPress会留wp-content路径)
# - URL路径特征(/wp-admin/ /admin/ /manage/)

3.2 指纹识别结果的应用

识别出中间件后,对应关系如下:

中间件高危漏洞常用入口
TomcatCVE-2020-1938(AJP文件包含)、弱口令后台/manager/html
WeblogicCVE-2014-4210(SSRF)、CVE-2017-3506(反序列化)/console
JBossCVE-2017-12149(反序列化)/invoker
Apache ShiroCVE-2016-4437(反序列化)Cookie rememberMe
SpringCVE-2018-1273(CVE-2022-22965)/function executor
Struts2S2-045/S2-057参数OGNL表达式

四、敏感目录与文件探测

4.1 目录扫描工具与使用

# dirsearch(Python,主流)
python3 dirsearch.py -u https://target.com -e php,html,js -t 20 -w /usr/share/wordlists/dirb/common.txt

# feroxbuster(Rust,快速,支持递归)
feroxbuster -u https://target.com -x php,html -t 20

# gobuster(支持DNS子域名爆破)
gobuster dir -u https://target.com -w /usr/share/wordlists/dirb/common.txt -x php,html

# 御剑目录扫描(Windows GUI,适合新手)

4.2 敏感文件检查清单

文件/目录风险等级说明
/robots.txt中爬虫规则,往往暴露敏感路径
/crossdomain.xml低Flash跨域策略配置错误
/sitemap.xml低网站结构信息泄露
/.git/高Git源码泄露,用git-dumper拉取
/.svn/高SVN源码泄露
/.DS_Store中Mac文件泄露目录结构
/backup/ /bak/高备份文件可直接下载
/uploads/高上传目录,可能有webshell
/phpmyadmin/高数据库管理入口,弱口令
/admin/ /manage/高后台管理入口
/api/ /v1/中API文档,可能有未授权接口
/swagger/ /apidoc/中API文档泄露接口信息

4.3 Git源码泄露利用

# 使用git-dumper下载源码
git-dumper https://target.com/.git/ /tmp/target_source

# 如果Git目录可写,可能直接通过git hooks拿shell
# 找到.git/hooks目录,写入后门

五、社工信息收集:人是最薄弱的环节

5.1 邮箱与人员信息

# hunter.io(查公司邮箱格式和组织架构)
https://hunter.io/
搜索:公司名 → 得到邮箱命名规则(first.last@company.com)

# 邮箱反查泄露密码
# 在 https://haveibeenpwned.com/ 查邮箱是否在泄露库中

# linkedin/脉脉查员工信息
# 常用ID、社群、真实姓名 → 生成密码字典

密码复用攻击: 统计显示超过60%的人在不同平台使用相同密码。拿到一个平台的密码,很可能就是另一个平台的入口。

5.2 密码字典构建

社工字典是针对特定目标量身定制的密码字典:

# 使用cupp生成社工字典
python3 cupp.py -i
# 输入目标姓名、生日、手机、宠物名、公司名等信息
# 自动生成针对性密码字典

# 常用社工密码规则:
# 公司名+年份(company123)
# 姓名+生日(lisi19900101)
# 姓名+手机号(zhangwei138xxxx)
# 键盘走位(1qaz@WSX)

5.3 钓鱼信息准备

社工的另一层应用是钓鱼攻击:

  • 邮件钓鱼: 通过hunter.io拿到邮箱格式后,伪造内部邮件发钓鱼链接
  • 水坑攻击: 发现员工常访问的第三方网站,在那里植入恶意代码
  • 短信钓鱼: 通过名字+手机号定向发钓鱼短信

注意: 社会工程学攻击在授权渗透测试中需要特别说明是否在测试范围内。


六、自动化信息收集框架

6.1 Oneforall集成化收集

# OneForAll,一站式资产收集
python3 oneforall.py --target target.com run

# 结果会保存在 results/target.com.csv
# 包含子域名、端口、旁站、邮箱等所有信息

6.2 Kunyu(伏羲)工具

# 视图空间测绘平台,自动化收集互联网资产
python3 konrun.py -k "company_name"
# 支持子域名、IP、端口、指纹、备案信息等

6.3 手动信息收集检查清单

完成信息收集后,建议整理成如下表格:

类别收集内容
域名信息真实IP、注册人、邮箱、到期时间
子域名列表(重点关注dev/test/staging环境)
旁站同IP网站(评估服务器共用风险)
端口高危端口及对应服务版本
指纹中间件、CMS、编程语言
目录敏感文件(.git、.svn、backup、admin)
社工邮箱格式、员工ID、密码规则

七、信息收集后的利用思路

7.1 根据指纹选择漏洞利用方向

识别结果优先测试漏洞
WordPress插件漏洞、主题漏洞、xmlrpc.php
ThinkPHPRoute路径、RCE漏洞
Struts2S2-045/S2-057
Apache Shiro反序列化
SpringCVE-2022-22965
Tomcat弱口令后台、war包部署
WeblogicSSRF + 反序列化利用链

7.2 根据端口选择横向方向

端口开放情况可利用路径
22开放SSH弱口令/密钥复用
445开放MS17-010横向
3389开放RDP爆破/CVE-2019-0708
3306开放MySQL弱口令写入文件getshell
6379开放Redis未授权写计划任务/SSH密钥

总结

信息收集不是"扫一扫"那么简单,它是一套系统化的目标侦察方法论:

  1. 资产发现:域名 → 子域名 → 旁站 → 同IP → 扩大攻击面
  2. 端口扫描:高频端口 → 版本识别 → 漏洞匹配
  3. 指纹识别:中间件 → CMS → 已知漏洞对应
  4. 目录探测:敏感文件 → 源码泄露 → 后台入口
  5. 社工收集:邮箱 → 人员 → 密码规则 → 密码复用

信息收集做得越细,后续漏洞利用就越顺利。下篇文章我会讲漏洞探测和利用的系统化思路,敬请期待。


关于作者

作者长期从事网络安全技术研究与实践,主要涵盖Web安全、渗透测试、内网渗透等领域。

如果你觉得这篇文章有帮助,欢迎收藏。需要进一步交流的同学,私信,专栏会持续更新。同时也有付费版的知识星球可供直接下载工具与源码,可以搜索 软件测试成长圈

更多推荐