最近进行渗透测试时,时常遇到xray扫出sourcemap文件,每次扫到都要百度,因此做个笔记。
漏洞原理
在日常测试时,经常会遇到以js.map为后缀的文件
这是jQuery中的一个新功能,支持Source Map
非常多Webpack打包的站点都会存在js.map文件.
通过sourcemap可还原前端代码找到API,间接性获取未授权访问漏洞
什么是Source map
简单说,Source map就是一个信息文件,里面储存着位置信息。转换后的代码的每一个位置,所对应的转换前的位置。
有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,这无疑给开发者带来了很大方便。
漏洞复现
使用xray扫到 dirscan/sourcemap/default 漏洞。
直接访问链接可下在sourcemap文件,利用该文件还原源代码需使用reverse-sourcemap工具。
先安装:nodejs,
下载地址:https://nodejs.org/zh-cn/download/
选择适合自己操作系统的版本:
双击下载后的文件,一路点击 next即可成功安装
安装完nodejs后,控制台输入:
npm -v
即可查看安装的版本。
然后安装 reverse-sourcemap
npm install --global reverse-sourcemap
安装完成(PS:我电脑中已经有reverse-sourcemap,所以大家如果为初次安装看到信息可能跟我不一样)。
安装完成后,将其加入环境变量
检查是否安装成功:
reverse-sourcemap -h
安装成功
还原map文件
reverse-sourcemap -v ****.js.map -o output
map文件会还原到 output文件
同时还可以通过浏览器,开发者模式-source模块查看前端源代码
解压后,文件目录代表的意义:
重点看config和src 文件夹
config 文件夹
代表含义:通常用于存放项目的配置文件,这些配置文件可以是各种格式,如 JSON、XML、YAML 等,用于配置项目的运行参数、环境变量、数据库连接信息、第三方服务的密钥等.
敏感信息分析:此文件夹极有可能包含敏感信息,比如数据库的用户名、密码、连接地址等信息,若被泄露,攻击者可直接访问数据库,窃取或篡改数据;还可能包含第三方 API 的密钥,如支付平台、云服务等的密钥,一旦泄露会导致相关服务被滥用,造成经济损失或数据泄露等严重后果.
node_modules 文件夹
代表含义:是 Node.js 项目中用于存放所有依赖包的文件夹。当使用 npm 或 yarn 等包管理工具安装项目所需的依赖时,这些依赖包会被下载并解压到该文件夹中。这些依赖包可以是各种开源的库、框架、工具等,用于帮助开发者快速构建项目,实现各种功能.
敏感信息分析:一般情况下,正常安装的依赖包本身不会包含敏感信息。但是,如果在安装过程中,不小心将一些包含敏感信息的文件或配置添加到了依赖包中,或者依赖包本身存在安全漏洞,被攻击者植入了恶意代码或窃取信息的逻辑,那么就可能导致敏感信息泄露。例如,一个被篡改的依赖包可能会在项目运行时偷偷将项目中的数据发送到攻击者的服务器.
src 文件夹
代表含义:是项目的源代码文件夹,用于存放开发者编写的所有源代码文件,包括 JavaScript、CSS、HTML 等各种类型的文件,这些文件构成了项目的核心逻辑和功能.
敏感信息分析:该文件夹中可能包含敏感信息,比如在源代码中可能硬编码了一些用户的登录凭证、访问令牌等信息,用于测试或临时目的,但如果在生产环境中未及时移除,就会存在安全风险;还可能包含一些内部使用的算法、加密密钥等,如果泄露可能导致相关加密机制被破解,数据安全性受到威胁 。
漏洞修复
临时的解决方法就是删除代码目录下的.map文件;
永久的解决方法就是在build的时候禁用产生map文件的功能;
在scripts/build下的build.js 文件中添加如下配置:
process.env.GENERATE_SOURCEMAP = ‘false’;
重新build就不会再产生sourcemap文件了
参考链接:https://cloud.tencent.com/developer/article/1981398