web渗透实战 | js.map文件泄露导致的通杀漏洞

一.简介

js.map 文件是 JavaScript 的 Source Map 文件,用于存储压缩代码与源代码之间的映射关系。它的主要作用是帮助开发者在调试时,将压缩后的代码还原为可读的源代码,从而快速定位问题。

平时渗透过程中,会遇到很多的 webpack 打包的站点,webpack 加载的 js 大部分都是变量名混淆的,渗透测试者不好直接查看不同的接口和调试网页。

Webpack 如何导致 Vue 源码泄露?

Source Map(.map 文件)泄露原始代码

  • • 问题 :

    Webpack 默认生成 Source Map(.map 文件) ,用于调试压缩后的代码。如果 **.map** 文件被部署到线上,攻击者可以借助工具(如 **reverse-sourcemap**)还原出完整的原始代码。

示例 :打包后的 **app.js** 附带 **app.js.map**,攻击者可以:

复制代码
bashreverse-sourcemap --output-dir ./stolen_src ./dist/app.js.map

直接还原出 Vue 组件、API 接口、加密逻辑等。

未压缩/未混淆的代码

  • • 问题 :

    如果 Webpack 未启用代码压缩(如 **TerserPlugin**)或混淆(如 **uglifyjs**),打包后的代码可能仍然保留 可读的变量名、注释、甚至敏感信息。

示例:代码里有:

复制代码
jsconst API_KEY = "sk_live_123456"; // Stripe 生产环境密钥

攻击者可以直接在 **bundle.js** 里搜索关键词(如 **API_KEY**、**password**、**secret**)找到敏感数据。

未正确设置 Webpack 的 **mode: 'production'**

  • • 问题 :

    如果 Webpack 配置未指定 **mode: 'production'**,可能会导致:

  • • 未启用代码压缩优化

  • • 包含 开发环境调试代码 (如 Vue 的 **devtools** 警告)

  • • 暴露 未使用的代码路径(如测试接口、未启用的功能)

第三方依赖泄露

  • • 问题 :

    如果项目中使用了未正确处理的第三方库(如某些 npm 包可能包含敏感信息),它们也会被打包进 **bundle.js**。

  • • 示例 :

    某些库可能在代码里硬编码测试环境的数据库密码、内部 API 地址等。

二.工具

1. reverse-sourcemap

reverse-sourcemap 是一个工具,用于从 .map 文件中逆向还原 JavaScript 或 CSS 的源码。

1.1. 安装:

    1. 需要先 安装 Node.js 和 npm。(我没写,自己网上找)
    1. 使用以下命令全局安装 reverse-sourcemap:

    npm install --global reverse-sourcemap

安装完成后,可以通过以下命令检查是否成功:

复制代码
reverse-sourcemap -h

1.2. 工具使用

在终端中运行以下命令,将源码输出到指定目录:

复制代码
reverse-sourcemap --output-dir sourceCode example.js.map

现在就还原出来了。

如果需要递归处理多个 .map 文件,可以添加 -r 参数:

复制代码
reverse-sourcemap -r --output-dir sourceCode

2. SourceDetector(插件)

2.1. 简介

SourceDetector是一个自动发现.map文件,并帮你下载到本地的一个chrome extension。

2.2. 项目地址

复制代码
https://github.com/LuckyZmj/SourceDetector-dist

2.3. 使用

下载 zip 包之后然后解压,谷歌浏览器添加扩展程序(注意是添加文件中的dist文件夹)

之后你在浏览任何网页时,该插件将自动检测是否有.map文件。其会自动按网站分组显示源码文件,并可点击下载全部或部分源码文件。

三.实战复现

访问到一个站点,:

复制代码
http://oa.xxxxx.com:2345/login?redirect=%2F

登录口,常规手法无效,无突破。

发现.js.map 文件,反编译发现大量接口:

审计 js 发现好几个接口未授权,但是没什么有价值东西,还是不能突破登录口,于是提指纹找相同系统,运气很好,找到一个测试站点:

复制代码
http://xx.xx.xx.xx:7777/ 

使用超管账号登录查看 bp 流量:

发现一个接口通过 token 返回了管理员的账号和密码:

复制代码
/xx/xx/getInfoByToken?token=eyJxx.xx.xx

突发奇想将当前系统的接口以及 token 信息带到不同网站去尝试:

结果也返回了当前系统的管理员信息,解密 md5 值:

成功进入系统:

最后提取指纹看看资产多少:

申

相关推荐
时间售卖铺43 分钟前
Chrony与SSH实战:精准时间同步与安全远程登录
运维·安全·云原生·ssh
QXWZ_IA1 小时前
管道GIS测绘如何实现自动化成图:三种成图方式怎么选
运维·人工智能·安全·自动化
Yuzhiyuxia19 小时前
【AI Agent面试系列】AI Agent可观测、评测、安全相关的知识点
人工智能·安全·面试
李纲明21 小时前
微信小程序 getSystemInfo 提示已废弃、屏幕高度算错胶囊还对不齐?getWindowInfo 和 getDeviceInfo 怎么接才稳
javascript·微信小程序·小程序·小程序开发·devdiy
QXWZ_IA1 天前
测绘单位采购RTK:设备价格、账号年费、售后,用时间轴分权重
网络·人工智能·安全
dreams_dream1 天前
微信小程序-使用npm包
微信小程序·小程序·npm
IT大白鼠1 天前
GitLab 未认证 RCE 应急实战CVE-2026-97229(CVSS 10.0)
网络·安全·gitlab
进击的荆棘1 天前
Linux系统——线程同步与互斥之线程池和安全
linux·运维·服务器·安全·单例模式·线程
KCENN1 天前
安全地毯压敏传感防护在工业流水线与机器人作业区的耐腐蚀材质及紧急停机机制
安全
北城笑笑1 天前
Vue 109 ,从零搭建 Vue3 + Electron 工程:生态、安全桥接与打包选型( Vue + Electron )
前端·javascript·vue.js·安全·electron·vue