渗透测试资产收集:系统化方法与实战策略

一、资产收集在渗透测试中的核心价值

资产收集是渗透测试的”地基工程”,其质量直接影响后续漏洞挖掘的深度与广度。据某安全研究机构统计,60%的渗透测试突破口源于未被充分发现的边缘资产,如测试环境接口、历史版本应用、未授权云服务等。完整的资产收集需实现三个目标:

  1. 资产全景可视化:构建包含IP、域名、端口、服务、组件的资产清单
  2. 暴露面精准定位:识别可被外部访问的攻击入口点
  3. 业务逻辑关联:建立资产与业务系统的映射关系

二、网络层资产收集方法论

2.1 被动信息收集技术

通过非侵入式手段获取目标组织的基础信息:

  • WHOIS查询:获取域名注册信息、DNS服务器、注册人联系方式(示例命令:whois example.com
  • DNS枚举
    1. # 子域名爆破(使用某常见CLI工具)
    2. dnsrecon -d example.com -t subdomains
    3. # 历史DNS记录查询
    4. dig +trace example.com
  • CDN探测:通过HTTP头(X-Cache-Lookup)、TTL值差异、IP地理位置分析识别CDN节点
  • 证书透明度日志:查询crt.sh等公开日志获取关联域名

2.2 主动扫描技术

采用渐进式扫描策略平衡效率与隐蔽性:

  1. 端口扫描
    • 基础扫描:nmap -sS -p 1-10000 example.com
    • 全端口扫描:结合masscan进行快速初步探测
  2. 服务识别
    • 版本检测:nmap -sV --version-intensity 9 example.com
    • 指纹库匹配:结合自定义YARA规则识别非标准服务
  3. 网络拓扑映射
    • 路由追踪:traceroute -I example.com
    • ASN信息查询:通过whois -h whois.radb.net -- '-i origin AS12345'获取网络自治域信息

三、应用层资产深度挖掘

3.1 Web应用发现

  • 爬虫技术

    1. # 简易爬虫示例(需遵守robots.txt)
    2. import requests
    3. from bs4 import BeautifulSoup
    4. def crawl(url):
    5. response = requests.get(url)
    6. soup = BeautifulSoup(response.text, 'html.parser')
    7. for link in soup.find_all('a'):
    8. print(link.get('href'))
  • 目录爆破:使用dirsearch等工具结合自定义字典(建议包含常见管理后台路径如/admin.php/wp-login.php
  • JS文件分析:通过正则表达式提取API端点:
    1. // 示例:从JS中提取API路径
    2. const apiPatterns = [/api\/\w+/g, /\/v\d+\/\w+/g];

3.2 移动应用逆向

  • APK分析
    • 使用jadx反编译获取后端API地址
    • 解析AndroidManifest.xml获取深链接(Deep Link)
  • iOS分析
    • 通过otool查看动态库依赖
    • 使用frida-trace动态跟踪网络请求

3.3 API资产发现

  • 流量镜像分析:在测试环境部署流量捕获工具(如tcpdump
  • Swagger接口探测:通过/v2/api-docs等常见路径获取API文档
  • GraphQL接口识别:发送{__schema{types{name}}}查询检测GraphQL端点

四、数据资产价值评估

4.1 敏感数据暴露面

  • Git泄露检测
    1. # 使用某常见CLI工具搜索.git目录
    2. git-hound --urls https://example.com --threads 10
  • 备份文件扫描:搜索.bak.swp.db.bak等扩展名
  • 配置文件泄露:检测config.phpdatabase.yml等常见配置文件

4.2 云环境资产发现

  • 对象存储扫描
    • 枚举常见存储服务路径(如/s3//oss/
    • 检测未授权访问的Bucket(通过HEAD请求验证权限)
  • 容器环境探测
    • 识别Kubernetes API Server(默认端口6443)
    • 检测Docker Remote API(默认端口2375)

五、自动化资产收集框架

5.1 工具链整合方案

推荐组合使用以下工具构建自动化流水线:

  1. 信息收集层Sublist3r + Amass + Shodan API
  2. 扫描层Nmap + Masscan + ZAP
  3. 分析层Maltego + BloodHound(针对AD环境)
  4. 存储层Elasticsearch + Kibana构建资产知识库

5.2 持续监控机制

建立资产变更检测流程:

  1. graph TD
  2. A[初始资产收集] --> B[定期扫描]
  3. B --> C{资产变更?}
  4. C -->|是| D[更新资产库]
  5. C -->|否| E[保持现状]
  6. D --> F[触发重新测试]

六、合规与伦理考量

  1. 授权范围确认:严格限定在测试授权书明确的IP范围内
  2. 速率限制:对目标系统实施合理的请求间隔(建议≥1秒/请求)
  3. 数据脱敏:收集到的敏感信息(如API密钥)需立即加密存储
  4. 报告规范:资产清单需区分公开信息与内部信息

七、实战案例分析

某金融企业渗透测试中,通过以下步骤发现隐藏资产:

  1. 通过证书透明度日志获取已废弃的dev.example.com域名
  2. 对该域名进行历史DNS查询,发现1年前使用的IP段
  3. 对该IP段进行端口扫描,发现未在文档中记录的Jenkins服务(端口8080)
  4. 利用Jenkins未授权访问漏洞获取内部SVN仓库地址
  5. 在SVN历史提交中发现数据库配置文件,包含生产环境凭证

该案例表明,系统化的资产收集能发现传统测试方法遗漏的攻击路径,显著提升渗透测试价值。安全团队应将资产收集作为持续进行的过程,而非一次性任务,通过建立自动化机制实现资产信息的动态更新与风险预警。