前端打包编译时代来临对漏洞挖掘的影响

一、什么是webpack

webpack用于编译JavaScript模块。关注javascript技术的同学一定知道,在CommonJS和ES6中,为了支持模块化,而引入了export/require/import这类东西,模块化可以降低开发的复杂度,用于支撑前端的复杂功能,但是模块化后,也带来了许多问题,比如老版本的浏览器不支持ES6/JSX语法,开发和线上不能保持一致,这就为WebPack类的自动化代码转换工具的出现提供了需求。

WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。按照官网的说法,webpack可以打包一切资源/图片/样式/依赖等等,webpack默认只支持js模块打包,对于其他文件就需要用loader解析器,比如在vue中,直观的效果就是使用webpack可以将使用的vue,css,图片等打包成一个js。

二、在漏洞挖掘过程中分析前端代码的重要性

随着前后端分离架构的大众化 ,越来越多的开发团队采用这种开发模式。前后端的交互越来越多是通过API完成,而不再依赖页面刷新,众多的后端的框架也把自己定位成一个API框架,如thinkphp5等。通过分析前端js代码,找到前后端交互的接口,对接口进行测试变得越来越重要,比如在某些没权限的场景下,我们无法完整显示页面,可以通过分析前端js中的ajax接口进行测试。

这里我就拿几个案例说说:

  • 某次挖漏洞过程中,登陆后显示账号没有权限,页面显示403 forbiden,f12 sources 发现前端使用VUE框架,分析源码对一ajax接口进行测试发现存在越权。
  • 某次挖漏洞过程中,通过分析前端js代码,发现存在一段代码,代码逻辑是在debugMode下,会setCookie,尝试使用该Cookie,成功进入后台并且是管理员权限。

三、VUE/REACT开发场景

在VUE/REACT开发场景下 ,前端开发会引入如模块化等诸多新特性,前端开发不再是几个简单的js文件,开发完成后会通过webpack等打包工具打包生成部署使用的js文件,但是如果我们直接分析该编译的js,很难看懂。比如我这个demo:

https://blog.donot.me/assets/demo/index.html,页面下的app.bundle.js反正我是看不懂写的是啥,这个js文件就是webpack打包后的结果,但是由于我是开启了source-map调试模式,如果你是用chrome浏览器打开的,打开devtools-sources,应该可以看到一个webpack://,这个就是chrome对source-map调试的支持,点开src目录下就可以看到js代码源文件。

四、webpack的几种调试模式

webpack目前支持很多种调试模式,每种模式的区别是编译后的代码和源码的映射方式不同,具体的体现是源码通过什么方式呈现,有的模式会生产一个.map文件,有的模式会通过注释,有的模式会使用DataUrl的方式。

webpack不仅支持这8种,而且它们还是可以任意组合上面的eval、inline、hidden关键字,就如文档所说,你可以设置souremap选项为cheap-module-inline-source-map。这里为啥要搞这么多模式我也不懂,nodejs作者也表示自己看不懂,但是作为一个研究安全问题的同学来说,我可以不关心具体使用了哪种模式,任何一种开启了source-map的情况下,chrome开发者工具会帮我们处理好,而我们只需要通过开发者工具下的webpack://查看即可。

五、前端也需要逆向工程

上面提到,在开启了source-map的情况下,可以直接分析原始代码,那如果没有开启,该怎么处理呢,除了webpack打包工具外,相信你还听过WebAssembly,WebAssembly是一个主要为了解决js的性能问题而诞生的,其运作方式与java类似,将高级语言编译成字节码然后在WebAssembly虚拟机中运行,支持编译成WebAssembly字节码的语言有AssemblyScript/C/C++/Rust/Golang等,有了WebAssembly,我们的浏览器将会同时加载和运行两种类型的代码——JavaScript和WebAssembly,这两种代码可以通过WebAssembly所提供的js api实现互相调用,可以认为WebAssembly模块是一个“高性能的JS函数” ,比如大家可能遇到需要在前端进行md5等加密签名功能的实现,就很适合使用WebAssembly来完成,这里很重要的问题是WebAssembly不是用来取代Javascript的。这里有一个简单的demo可以感受一下WebAssembly代码结构是什么样的WebAssembly_test_demo:

WebAssembly is designed to maintain the versionless, feature-tested, and backwards-compatible nature of the web. WebAssembly modules will be able to call into and out of the JavaScript context and access browser functionality through the same Web APIs accessible from JavaScript. WebAssembly also supports non-web embeddings.

回到本节的主题,当前端使用Webpack打包,还很不幸未开启Source-map的情况下,以及WebAssembly场景下,当我们需要深入分析代码时,需要使用反编译工具,针对webpack打包,笔者发现了一个反编译工具,

https://www.npmjs.com/package/debundle,但是经过测试,反编译webpack打包的项目效果并不好,笔者并未成功反编译成功自己的demo项目,目前在这方面开源工具还是比较缺少的状态。如果有同学使用该工具比较成功的反编译了webpack打包项目欢迎交流。针对WebAssembly有比较成熟的工具包WABT工具包用于反编译,除了该工具包外,也有使用IDA插件进行反编译的方法FLARE脚本系列:使用idawasm IDA Pro插件逆向WebAssembly(Wasm)模块,由于 篇幅和主题限制,本文不再具体介绍这些工具的使用,感兴趣的读者可以自行尝试。

六、总结

随着前端开发的不断演进,越来越多的开发技术/开发框架诞生,了解他才能更好的去hack it。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/146695.html<

(0)
管理的头像管理
上一篇2025-03-11 05:16
下一篇 2025-03-11 05:18

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注