通杀漏洞挖掘实战 | 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 安装

  1. 安装Node.js和npm
  2. 全局安装reverse-sourcemap:
npm install --global reverse-sourcemap
  1. 验证安装:
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 使用

  1. 下载zip包并解压
  2. 在Chrome浏览器中添加扩展程序(选择解压后的dist文件夹)
  3. 浏览网页时,插件会自动检测.map文件并按网站分组显示
  4. 可点击下载全部或部分源码文件

四、实战复现步骤

  1. 发现目标:访问目标站点(如http://oa.xxxxx.com:2345/login)
  2. 常规测试:尝试常规渗透手法无效
  3. 发现.map文件:找到.js.map文件
  4. 反编译源码:使用reverse-sourcemap工具反编译发现大量接口
  5. 源码审计:审计JS代码发现未授权接口
  6. 指纹识别:提取系统指纹寻找相同系统
  7. 找到测试站点:发现测试站点(如http://xx.xx.xx.xx:7777/)
  8. 获取管理员凭证:通过测试站点获取管理员token和接口
  9. 横向测试:将接口和token信息带到不同网站尝试
  10. 成功入侵:解密返回的MD5值,成功进入系统
  11. 资产探测:提取指纹探测相关资产数量

五、防御措施

  1. 生产环境禁用Source Map:确保.map文件不被部署到生产环境
  2. 启用代码压缩和混淆:使用TerserPlugin或uglifyjs等工具
  3. 正确设置Webpack模式:确保配置中包含mode: 'production'
  4. 审查第三方依赖:检查项目中使用的第三方库是否包含敏感信息
  5. 敏感信息保护:避免在代码中硬编码API密钥、密码等敏感信息
  6. 访问控制:对敏感接口实施严格的访问控制

六、总结

JS.map文件泄露可能导致严重的安全问题,攻击者可以通过反编译获取系统完整源代码,进而发现未授权接口、敏感信息等。通过本文介绍的工具和方法,安全人员可以有效地检测和利用这类漏洞,同时也提醒开发者在部署时注意相关安全配置。

JS.map文件泄露导致的通杀漏洞挖掘实战 一、JS.map文件简介 JavaScript的Source Map文件(.map)是用于存储压缩代码与源代码之间映射关系的文件,主要作用是在调试时将压缩后的代码还原为可读的源代码,帮助开发者快速定位问题。 二、Webpack打包导致源码泄露的几种方式 1. Source Map(.map)文件泄露原始代码 问题 :Webpack默认生成Source Map(.map)文件,如果这些文件被部署到线上环境,攻击者可以使用工具还原出完整原始代码。 示例 : 通过此命令可还原出Vue组件、API接口、加密逻辑等敏感信息。 2. 未压缩/未混淆的代码 问题 :如果Webpack未启用代码压缩(TerserPlugin)或混淆(uglifyjs),打包后的代码可能保留: 可读的变量名 注释 敏感信息 示例 : 3. 未正确设置Webpack的mode: 'production' 问题 :如果Webpack配置未指定 mode: 'production' ,可能导致: 未启用代码压缩优化 包含开发环境调试代码(如Vue的devtools警告) 暴露未使用的代码路径(如测试接口、未启用的功能) 4. 第三方依赖泄露 问题 :项目中使用的第三方库可能包含敏感信息,它们会被打包进bundle.js。 示例 :某些库可能在代码中硬编码测试环境的数据库密码、内部API地址等。 三、利用工具 1. reverse-sourcemap 1.1 安装 安装Node.js和npm 全局安装reverse-sourcemap: 验证安装: 1.2 使用 基本命令: 递归处理多个.map文件: 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文件泄露可能导致严重的安全问题,攻击者可以通过反编译获取系统完整源代码,进而发现未授权接口、敏感信息等。通过本文介绍的工具和方法,安全人员可以有效地检测和利用这类漏洞,同时也提醒开发者在部署时注意相关安全配置。