用途
本技能用于在获得授权的渗透测试中识别敏感数据暴露漏洞。它覆盖多个测试方向:客户端代码中的 API 密钥/凭证/令牌/机密泄露、API 响应中的个人身份信息(PII)与财务数据过度暴露、不安全的本地存储与缓存、未受保护的数据传输,以及版本控制系统中意外提交的机密。适用场景包括评估应用的数据保护控制,检查是否符合 GDPR、PCI DSS、HIPAA 等数据保护合规要求,以及评估处理 PII、财务数据或健康记录的 API。
前置条件
开展测试前需要:
- 授权:包含数据处理范围的书面渗透测试协议。
- Burp Suite Professional:用于拦截和分析响应中的敏感数据。
- trufflehog:机密扫描工具(pip install trufflehog)。
- gitleaks:Git 仓库机密扫描器(go install github.com/gitleaks/gitleaks/v8@latest)。
- curl/httpie:用于手动端点测试。
- 浏览器 DevTools:用于检查本地存储、会话存储与缓存数据。
- testssl.sh:TLS 配置测试工具。
工作流(六个步骤)
步骤 1:扫描客户端代码中的机密
搜索 JavaScript 文件、HTML 源码和其他客户端资源中暴露的机密。技能提供了下载并搜索 JS 文件、匹配常见机密模式(如 AIza、AKIA、sk-、ghp_、xox 等前缀)、检查 source map、搜索 HTML 源码、探测 .env 等配置文件是否可访问的示例命令。
步骤 2:分析 API 响应中的数据过度暴露
检查 API 端点是否返回超出必要范围的数据。需要关注的敏感字段包括 password、password_hash、password_salt、ssn、national_id、credit_card_number、card_cvv、api_key、secret_key、access_token、internal_id、ip_address、session_id、date_of_birth 等。技能还提示对比公开与已认证响应、检查错误响应是否泄露堆栈跟踪或数据库查询,以及测试搜索/自动补全接口是否返回完整用户记录。
步骤 3:测试数据传输安全
验证敏感数据在传输过程中是否加密。包括检查 TLS 配置(testssl.sh 或 curl)、检查是否存在 HTTP 非加密端点、混合内容、表单是否通过 HTTPS 提交、敏感数据是否出现在 URL 查询字符串中,以及 WebSocket 是否使用 ws:// 而非 wss://。
步骤 4:检查浏览器存储中的敏感数据
检查本地存储、会话存储、Cookie 与缓存响应。包括查看 Set-Cookie 及其安全属性、检查 localStorage/sessionStorage/IndexedDB/Cache Storage 中是否存储令牌或 PII、检查敏感表单是否禁用自动完成(autocomplete="off"),以及敏感页面是否设置 Cache-Control: no-store。
步骤 5:扫描 Git 仓库与源码中的机密
搜索版本控制中意外提交的机密。包括检查 .git 目录是否暴露、使用 git-dumper 下载后配合 trufflehog 和 gitleaks 扫描、在授权范围内扫描 GitHub/GitLab 仓库,以及检查 Docker 镜像层中的凭证。常见机密包括 AWS 访问密钥、数据库连接字符串、API 密钥、SSH 私钥、JWT 签名密钥、OAuth 客户端密钥、SMTP 凭证等。
步骤 6:测试数据脱敏与遮蔽
验证敏感数据是否被适当遮蔽。包括检查卡号是否仅显示后四位、SSN 是否被遮蔽、API 响应是否包含密码哈希、导出/下载功能是否返回未遮蔽数据、日志端点是否含明文敏感数据,以及错误消息是否泄露用户存在性等信息。
关键概念
- 敏感数据暴露:PII、凭证、财务数据或健康记录的意外泄露。
- 数据过度暴露:API 返回的字段超过客户端所需。
- 机密泄露:API 密钥、令牌或凭证暴露在客户端代码或日志中。
- 静态数据:存储于数据库、文件或备份中且未加密的敏感数据。
- 传输中数据:未经 TLS 加密在网络中传输的敏感数据。
- 数据遮蔽:用脱敏值替换敏感数据(如仅显示卡号后四位)。
- PII:可识别个人身份的信息。
- 信息泄露:响应中过多的错误消息、堆栈跟踪或调试信息。
工具与系统
Burp Suite Professional(响应分析与正则扫描)、trufflehog(跨 git 仓库、文件系统与云存储的机密检测)、gitleaks(Git 仓库硬编码机密扫描)、testssl.sh(TLS/SSL 配置评估)、git-dumper(下载暴露的 .git 目录)、SecretFinder(JS 文件 API 密钥与令牌分析)、Retire.js(检测存在已知漏洞的 JS 库)。
常见场景
- 场景 1:JS 打包文件中包含硬编码的 Google Maps API 密钥和 Stripe 公钥,且 Stripe 密钥权限过宽。
- 场景 2:/api/users 端点返回包含 bcrypt 密码哈希的完整用户对象,可用于离线破解。
- 场景 3:用户资料 API 返回未遮蔽的完整 SSN 和卡号,且未设置 Cache-Control: no-store,导致被浏览器和代理缓存。
- 场景 4:生产服务器上 .git 目录可访问,攻击者用 git-dumper 下载历史,发现早期提交中已被“移除”但仍留在历史里的数据库凭证。
输出格式
该技能给出评估报告模板,包含:目标、评估日期、OWASP 分类(A02:2021 加密失败);发现摘要表(发现项/严重性/数据类型);暴露机密表(机密类型/位置/风险);API 数据过度暴露表(端点/返回的多余字段);以及修复建议,例如移除客户端代码中的硬编码机密并改用后端代理、立即轮换所有暴露凭证、从生产 Web 根目录移除 .git、实施响应字段过滤、对所有 API 响应中的 SSN 与卡号做遮蔽、为敏感端点添加 Cache-Control: no-store、在所有端点启用 TLS 1.2+ 并将 HTTP 重定向到 HTTPS、在 CI/CD 流水线中引入机密扫描(trufflehog/gitleaks)。
限制
必须在获得书面授权的范围内使用,资料明确要求数据处理范围的渗透测试协议。资料未提供适用平台、收费、价格或效果方面的信息。