渗透测试之信息收集:从零到一的实战资产测绘指南 1. 信息收集渗透测试的基石第一次接触渗透测试时我总想着直接上工具找漏洞结果碰了一鼻子灰。后来才明白信息收集就像打仗前的侦察工作没摸清敌情就冲锋纯粹是送人头。记得有次对某企业做授权测试花了两周时间做信息收集最后只用一天就通过一个不起眼的子站拿下了整个内网。信息收集的核心目标是绘制完整的数字资产地图。这就像拼图游戏我们收集的每一块信息都是拼图的一角。当拼图完成度达到80%以上攻击路径就会自然浮现。实际操作中我会把收集到的信息分为三类基础设施类IP段、域名、服务器信息、网络拓扑应用系统类Web应用、移动端、API接口、后台管理系统人员组织类员工邮箱、社交账号、技术栈偏好2. 被动信息收集无接触侦察2.1 网络空间搜索引擎实战FOFA、Shodan、ZoomEye这类工具就像互联网的CT扫描仪。我常用的FOFA搜索语法组合# 搜索指定域名的所有资产 domainexample.com # 查找使用ThinkPHP的站点 appThinkPHP # 定位特定IP段的MySQL服务 ip192.168.1.0/24 port3306最近一次项目中通过title内部管理系统 regionBeijing这个搜索组合直接找到了客户未公开的测试环境里面还有全套的测试账号。2.2 证书透明度日志挖掘crt.sh这个宝藏网站很多人不会用。通过查询SSL证书我发现某金融公司竟然有30多个未在DNS记录的子域名。具体操作import requests def query_cert(domain): url fhttps://crt.sh/?q%.{domain}outputjson res requests.get(url).json() return {item[name_value] for item in res} print(query_cert(bank.com)) # 返回所有关联子域2.3 GitHub敏感信息挖掘开发者经常不小心上传配置文件我用这个组合拳屡试不爽# 搜索数据库配置 site:github.com spring.datasource.password AND example.com # 找API密钥 filename:.env AWS_ACCESS_KEY_ID # 查内部文档 extension:pdf 内部使用 AND 机密曾发现某厂商工程师把生产环境Redis密码写在issue里直接导致整个用户数据库泄露。3. 主动信息收集精准扫描策略3.1 子域名爆破的科学方法纯字典爆破早就过时了我现在用混合策略先用证书透明度日志获取已知子域用AI生成基于企业名的候选列表如hr、oa、crm等前缀最后用SecLists的字典查漏补缺python3 subfinder.py -d example.com -o subs.txt assetfinder --subs-only example.com | tee -a subs.txt3.2 智能端口扫描方案Nmap的黄金组合参数nmap -sS -Pn -n -T4 --min-rate 1000 \ --max-retries 1 --open -p- \ --script discovery,vuln -oA full_scan 192.168.1.1对于云环境我会特别关注2878Kubernetes API2379ETCD9092Kafka9200Elasticsearch3.3 Web指纹识别的进阶技巧传统指纹识别经常误判我的解决方案是多重验证首先用Wappalyzer插件快速筛查然后检查HTTP头中的X-Powered-By最后分析特定路径的静态资源特征比如识别Vue.js应用// 检查是否存在/vue-router/路由 // 查看/js/app.[hash].js文件结构 // 检测__webpack_require__特征4. 资产关联分析绘制攻击地图4.1 构建资产关系图谱用Maltego可以可视化资产关系但命令行党更喜欢这个import networkx as nx G nx.Graph() G.add_node(主站, typeweb) G.add_node(子站A, typeweb) G.add_edge(主站, 子站A, relation同IP)4.2 风险暴露面评估模型我给每个资产打分会考虑暴露程度0-10分漏洞严重性CVSS评分数据敏感性1-5级攻击路径复杂度风险值 (暴露分 × 0.3) (CVSS × 0.4) (敏感级 × 0.2) - (复杂度 × 0.1)4.3 自动化工具链搭建我的自动化流程长这样graph LR A[子域名收集] -- B[端口扫描] B -- C[服务识别] C -- D[漏洞扫描] D -- E[报告生成]实际用的是这个Shell脚本#!/bin/bash domain$1 # 信息收集阶段 subfinder -d $domain -o subs.txt httpx -l subs.txt -o urls.txt nmap -iL ips.txt -oA scans # 分析阶段 python3 analyzer.py urls.txt scans.xml5. 特殊场景应对策略5.1 云环境下的资产测绘云厂商的API经常暴露惊喜# AWS资产枚举 aws ec2 describe-instances --query Reservations[*].Instances[*].PublicIpAddress # Azure资源扫描 az resource list --query [].{Name:name, Type:type, Location:location}5.2 移动端资产发现不要忽视移动端反编译APK找API域名抓包分析网络请求检查Firebase配置// 典型的API端点泄露 public static final String API_HOST https://dev-api.example.com;5.3 隐藏接口挖掘技巧通过JS文件找隐藏接口fetch(/admin/api/v1/users).then(...) // 发现未授权接口用Chrome开发者工具的Search in files功能搜索关键词apiadmininternaldebug6. 防御视角的思考做了这么多年渗透我总结出企业资产管理的三大痛点影子资产离职员工创建的未回收资源僵尸系统下线不彻底的遗留系统配置漂移测试环境意外暴露建议企业建立资产DNA库定期自动化测绘人工复核关键系统建立变更审批流程最后提醒新手信息收集不是目的而是手段。我曾见过有人收集了200G数据却找不到突破口关键是要带着攻击思维去分析数据找出那条隐藏的攻击路径。记住最好的漏洞往往藏在最不起眼的角落里。