一种针对Webpack等前端打包工具构建的网站的自动化测试思路(附开源项目) 作者: Hack Inn 时间: November 24, 2020 分类: 技术分享 访问: 30,129 次 ![banner](https://data.hackinn.com/photo/xcxstwm/banner.png) > 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 > 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。 作者:Poc Sir 全文共分为六个片段,首发于“雷神众测”公众号具有原创声明。本文全长1.3万余字,预计阅读时间30分钟,请做好准备。 > 开源项目名称:**Packer Fuzzer** 版本号:V1.1 > > 地址:https://github.com/rtcatc/Packer-Fuzzer ### 0x01 前言&初衷 半年之前当疫情第一次席卷全球之时,法国也选择了封城,早已自我封闭许久的作者自然也延长了自己的“闭关”时间。我独坐小屋之中早已日夜颠倒、昼夜不分,如今回想起来已经没有了对那时窗外景色的记忆,一切都是灰蒙蒙的。压抑、惧怕、无奈笼罩着一切,唯有坐在电脑之前成功渗透一个个网站才能让身在异国他乡的我有所开心。走到电脑桌前,打开网站:又是一个Webpack的站,熟练地单击右键,点击“审查元素”调出开发者工具,来到“资源文件”一栏。找到对应的JS文件,点击一键格式化按钮,然后快速的看起上万行的JS脚本,从中寻找出最有用的信息。或许是我早已习惯了吧,JS行数虽多但也不影响整体测试的效率,虽然有过不止一次想写工具的想法,但可能是因为“懒”吧,自己拒绝了自己,觉得就这样挺好。 随后在一次和我徒弟的聊天之中,我发现虽然自己渗透测试这些站很快速,但是对一些新人来说如此庞大的内容还是十分不友好的,并且如果将时间浪费在这些可由工具代替的信息搜集环节上周而复始的劳做岂不是太无聊了,那么说做就做吧!老话说:前人栽树、后人乘凉,在互联网“白嫖”了如此之久的我也是应该回馈于互联网,回馈各位亲爱的读者朋友们了。笔者自愧,这是我第一次带领自己的小伙伴们开发扫描类工具,与其他扫描器不同,打包器的解析是未曾有前人系统化做过的,目前的第一版本必然是不完美的,若有不足之处还望前辈您赐教。Poc-Sir代表开发团队谢谢各位的耐心阅读,您们所提的任何疑问都将会是价值连城的! 可能是最近两年吧,国内越来越多的站开始用起了前端打包工具,它一下子火了。这是一类很好玩的工具,它将开发者所需要的全部资源都打包在了一起,后期只要按需调用即可,节省了不少开发时间;与此同时这还是一类让我们这些“搞安全”的人忍不住偷笑的工具,正是因为他将所有的资源都打包在了一起,我们便可以不费吹灰之力拿到整个站的全部资源文件,包括所有的API。举一个不太恰当的例子,开发A写了一个未授权访问的API,安全研究员B“含着泪”把这个漏洞提交了上去赚了3000块钱。API不拿何以拿SHELL,当我们拿到一个目标,若能快速提取出API及其对应的参数并加以模糊测试,那真是太顺心了,而如此美好的事儿得益于前端打包工具的流行不再是一个白日梦了。 Packer Fuzzer工具目前支持自动化提取JS资源文件并利用现成规则和暴力提取模式提取其中的API及对应参数,在提取完成之后支持对:未授权访问、敏感信息泄露、CORS、SQL注入、水平越权、弱口令、任意文件上传七大漏洞进行模糊高效的快速检测。在扫描结束之后,本工具还支持自动生成扫描报告,您可以选择便于分析的HTML版本以及较为正规的doc、pdf、txt版本。而且您完全不用担心因为国际化带来的语言问题,本工具附带五大主流语言语言包(包括报告模板):简体中文、法语、西班牙语、英语、日语(根据翻译准确度排序),由我们非常~~不~~专业的团队翻译。然而由于时间、实例及其他因素限制,目前第一版工具只对Webpack打包器的规则做了优化,其他打包器规则敬请期待! 也希望读者朋友们在遇上不一样的例子时,能为我们提供新的规则;在遇上新的报错时,能及时反馈给我们,这也是我们开源的目的。我们是渺小的,我们只不过是为大家规划了一个框架,真正能让此工具完美还得靠各位前辈们的帮助,Poc-Sir再次代表小伙伴们谢谢各位的支持! ![demo-terminal.png](https://data.hackinn.com/photo/PF-A/demo-terminal.png) ### 0x02 JS文件提取 #### 0X021 主要JS提取 前端打包工具的成果都将在网站上以JS文件的形式呈现,故要想解析此类网站要做的第一步便是提取此站所有相关的JS文件。可能初入安全不久的读者朋友们对此类打包工具不太了解,您可以打开雷神众测的官网(https://www.bountyteam.com),并查看其源代码,您便可以看到类似如下简化之后的内容,这是一个非常标准的Webpack站点: ```html 雷神众测 We're sorry but dasbounty doesn't work properly without JavaScript enabled. Please enable it to continue. ``` 前端打包工具所生成的是一个纯JS的网站 —— 源码之中并无多余的HTML内容,所有的前端内容都依赖于浏览器对JS文件的解析,并且此类网站之中通常存在一行`noscript`提示告诉没有启用JS的访问者启用JS功能才能正常浏览网站。并且Webpack所生成的js有他的命名规律(并非全部如此),一般都为`xxx.随机字母数字.js`的两段式,且每一个JS文件具体内容均以`webpackJsonp`开头。 Packer Fuzzer工具首先调用`lib/ParseJs.py.py`文件来处理用户输入的目标站点网页中html所嵌入的最基础JS文件,首先在第47行处程序会将所有的HTML注释内容全部去掉``,这是因为本模块将在随后使用`bs4`库来对所获取到的网页元素解析,而在某些JS文件被注释时是无法被正常解析。随后自49行开始程序将会遍历当前HTML中的所有`