通杀漏洞挖掘实战 | js.map文件泄露导致的通杀漏洞
字数 1560 2025-08-18 11:38:56
JS.map文件泄露导致的通杀漏洞挖掘实战
一、JS.map文件简介
JavaScript的Source Map文件(.map)是用于存储压缩代码与源代码之间映射关系的文件,主要作用是在调试时将压缩后的代码还原为可读的源代码,帮助开发者快速定位问题。
二、Webpack打包导致源码泄露的几种方式
1. Source Map(.map)文件泄露原始代码
问题:Webpack默认生成Source Map(.map)文件,如果这些文件被部署到线上环境,攻击者可以使用工具还原出完整原始代码。
示例:
reverse-sourcemap --output-dir ./stolen_src ./dist/app.js.map
通过此命令可还原出Vue组件、API接口、加密逻辑等敏感信息。
2. 未压缩/未混淆的代码
问题:如果Webpack未启用代码压缩(TerserPlugin)或混淆(uglifyjs),打包后的代码可能保留:
- 可读的变量名
- 注释
- 敏感信息
示例:
const API_KEY = "sk_live_123456"; // Stripe生产环境密钥
3. 未正确设置Webpack的mode: 'production'
问题:如果Webpack配置未指定mode: 'production',可能导致:
- 未启用代码压缩优化
- 包含开发环境调试代码(如Vue的devtools警告)
- 暴露未使用的代码路径(如测试接口、未启用的功能)
4. 第三方依赖泄露
问题:项目中使用的第三方库可能包含敏感信息,它们会被打包进bundle.js。
示例:某些库可能在代码中硬编码测试环境的数据库密码、内部API地址等。
三、利用工具
1. reverse-sourcemap
1.1 安装
- 安装Node.js和npm
- 全局安装reverse-sourcemap:
npm install --global reverse-sourcemap
- 验证安装:
reverse-sourcemap -h
1.2 使用
基本命令:
reverse-sourcemap --output-dir sourceCode example.js.map
递归处理多个.map文件:
reverse-sourcemap -r --output-dir sourceCode
2. SourceDetector(Chrome插件)
2.1 简介
自动发现.map文件并下载到本地的Chrome扩展程序。
2.2 项目地址
https://github.com/LuckyZmj/SourceDetector-dist
2.3 使用
- 下载zip包并解压
- 在Chrome浏览器中添加扩展程序(选择解压后的dist文件夹)
- 浏览网页时,插件会自动检测.map文件并按网站分组显示
- 可点击下载全部或部分源码文件
四、实战复现步骤
- 发现目标:访问目标站点(如http://oa.xxxxx.com:2345/login)
- 常规测试:尝试常规渗透手法无效
- 发现.map文件:找到.js.map文件
- 反编译源码:使用reverse-sourcemap工具反编译发现大量接口
- 源码审计:审计JS代码发现未授权接口
- 指纹识别:提取系统指纹寻找相同系统
- 找到测试站点:发现测试站点(如http://xx.xx.xx.xx:7777/)
- 获取管理员凭证:通过测试站点获取管理员token和接口
- 横向测试:将接口和token信息带到不同网站尝试
- 成功入侵:解密返回的MD5值,成功进入系统
- 资产探测:提取指纹探测相关资产数量
五、防御措施
- 生产环境禁用Source Map:确保.map文件不被部署到生产环境
- 启用代码压缩和混淆:使用TerserPlugin或uglifyjs等工具
- 正确设置Webpack模式:确保配置中包含
mode: 'production' - 审查第三方依赖:检查项目中使用的第三方库是否包含敏感信息
- 敏感信息保护:避免在代码中硬编码API密钥、密码等敏感信息
- 访问控制:对敏感接口实施严格的访问控制
六、总结
JS.map文件泄露可能导致严重的安全问题,攻击者可以通过反编译获取系统完整源代码,进而发现未授权接口、敏感信息等。通过本文介绍的工具和方法,安全人员可以有效地检测和利用这类漏洞,同时也提醒开发者在部署时注意相关安全配置。