1. 信息搜集在渗透测试中的核心地位
第一次完整接手Web渗透测试项目时,我花了整整三天时间在信息搜集阶段。当时客户只给了一个主域名,要求全面评估其安全性。直到项目交付前一天才发现某个子域存在未授权访问漏洞——而这个子域是通过Google dorking在最后时刻才挖出来的。这次经历让我深刻认识到:信息搜集的质量直接决定渗透测试的成败。
如果把渗透测试比作一场战役,信息搜集就是战前侦察。侦察兵获取的情报越详细,指挥官就越能精准部署兵力。同样,渗透测试人员掌握的目标信息越全面,就越容易发现薄弱环节。一个完整的Web渗透测试信息搜集应当覆盖以下维度:域名系统、网络架构、服务器配置、应用框架、敏感数据、人员信息等。
2. 基础信息搜集方法论
2.1 域名资产发现
域名是Web渗透的起点,但往往不是终点。成熟的攻击者会通过以下手段扩展攻击面:
-
子域名枚举:
- 使用subfinder + amass组合扫描:
subfinder -d example.com | amass enum -brute -d example.com - 推荐字典:
commonspeak2项目提供的子域名词表 - 特别注意:
dev.、test.、staging.等环境子域常存在弱密码
- 使用subfinder + amass组合扫描:
-
DNS历史记录查询:
- SecurityTrails的API可获取域名解析历史
- 通过
dnsdumpster.com查看DNS关联信息 - 常见发现:被遗忘的旧解析记录指向测试服务器
-
证书透明度日志:
- 使用crt.sh查询所有关联证书
- 典型案例:某电商网站通过证书发现未公开的
api-internal.example.com
注意:子域名爆破时建议控制请求频率(<50QPS),避免触发WAF封禁
2.2 服务器指纹识别
识别服务器类型和版本是后续漏洞利用的基础:
bash复制# Nmap基础扫描
nmap -sV -O -T4 -p1-65535 target.com
# 针对性服务探测
whatweb -a3 https://target.com
常见指纹特征:
- Nginx默认报头带
Server: nginx/1.18.0 - Tomcat管理页面有
/manager/html路径 - IIS 10.0的X-Powered-By头包含
ASP.NET
2.3 目录与文件扫描
使用定制化字典能显著提高扫描效率:
-
敏感目录:
/backup/、/admin/、/tmp//phpinfo.php、/test.php
-
配置文件:
.env(常含数据库凭证)web.config.bak(ASP.NET配置备份)
-
版本控制:
/.git/目录泄露/.svn/entries文件
推荐工具组合:
bash复制gobuster dir -u https://target.com -w custom_wordlist.txt -x php,aspx,jsp
3. 高级信息搜集技巧
3.1 云环境资产发现
现代Web应用多部署在云平台,需要特殊侦察手段:
-
AWS S3桶枚举:
python复制import boto3 s3 = boto3.resource('s3') for bucket in s3.buckets.all(): if 'target' in bucket.name: print(bucket.name) -
Azure Blob存储检测:
- 尝试访问
https://{name}.blob.core.windows.net - 使用MicroBurst工具集进行扫描
- 尝试访问
-
Google Cloud资产发现:
- 通过
storage.googleapis.com探测公开存储桶 - 检查
appspot.com子域
- 通过
3.2 员工信息搜集
社会工程学攻击往往始于公开信息:
-
LinkedIn挖掘:
- 公司页面的"员工"栏目
- 职位信息中的技术栈关键词
-
GitHub代码审查:
- 搜索
@company.com的commit记录 - 检查
.gitconfig文件中的邮箱
- 搜索
-
密码泄露查询:
- Have I Been Pwned API
- DeHashed付费数据库
4. 自动化信息搜集框架
4.1 推荐工具链
mermaid复制graph TD
A[主域名] --> B(Subfinder)
A --> C(Amass)
B --> D[子域名列表]
C --> D
D --> E(httpx)
E --> F[存活Web服务]
F --> G(Nuclei)
G --> H[漏洞报告]
实际应替换为文字描述:
- 使用Subfinder和Amass进行子域名枚举
- 通过httpx验证HTTP服务存活状态
- 用Nuclei进行基础漏洞扫描
- 将结果导入SpiderFoot进行关联分析
4.2 自研脚本示例
python复制import os
from subprocess import run
def domain_recon(domain):
# 子域名扫描
run(f"subfinder -d {domain} -o subs.txt", shell=True)
# HTTP服务探测
run(f"httpx -l subs.txt -status-code -title -tech-detect -o web.txt", shell=True)
# 目录爆破
with open('web.txt') as f:
for url in f.readlines():
run(f"gobuster dir -u {url.strip()} -w wordlist.txt", shell=True)
if __name__ == '__main__':
domain_recon('example.com')
5. 信息整理与分析
5.1 资产矩阵构建
将搜集到的信息整理为结构化表格:
| 类型 | 地址 | 技术栈 | 敏感发现 | 风险等级 |
|---|---|---|---|---|
| 主站 | https://example.com | Nginx+PHP | phpinfo.php | 中 |
| 后台系统 | https://admin.example.com | Tomcat | 弱密码admin:admin | 高 |
| 测试环境 | http://test.example.com | Django | DEBUG=True | 严重 |
5.2 攻击路径绘制
基于信息绘制可能的攻击路线:
- 通过测试环境的DEBUG模式获取shell
- 利用内网凭证访问后台系统
- 从Tomcat服务器横向移动到数据库
6. 法律合规与注意事项
-
授权范围确认:
- 明确测试域名/IP白名单
- 获取书面渗透测试授权书
-
扫描行为控制:
- 避免使用--top-ports 1000等激进扫描
- 商业项目建议在凌晨执行扫描
-
数据保密协议:
- 敏感信息加密存储
- 项目结束后彻底删除原始数据
重要:未经授权的信息搜集可能违反《计算机信息系统安全保护条例》
7. 实战经验分享
在最近一次金融行业渗透测试中,我们通过以下信息搜集链条发现严重漏洞:
- 证书透明度日志发现未被收录的
vpn.corp.example.com - 该子域使用Jira服务且未配置双因素认证
- 通过默认账号
jiraadmin:jiraadmin登录 - 在Jira问题中发现数据库连接字符串
这个案例告诉我们:永远不要忽视任何一条信息线索。建议建立标准化检查表(如下),确保没有遗漏:
- [ ] WHOIS信息与备案查询
- [ ] 子域名爆破与DNS记录检查
- [ ] 云存储桶与特殊服务探测
- [ ] GitHub等代码仓库搜索
- [ ] 员工邮箱格式分析与收集
最后记住:信息搜集不是一次性的工作,而应该贯穿整个渗透测试过程。新的发现可能会彻底改变攻击策略。保持好奇心,像攻击者一样思考,才能发现那些被忽视的安全盲点。