0x01 前言
某天在进行一个系统登录框渗透时,发现数据包内容加密了!
可以看到前端使用 JavaScript 对我们提交的手机号和验证码进行了加密处理,后端返回的数据也是经过加密的。
末尾可领取资源文件
0x02 解密JS
点击确定后发现停在了2370行,而且解密函数中e参数返回了一串16进制字符,看起来非常像密文
再打开burp查看数据包,果然发现这一串 16进制字符就是响应的密文,那么这个 s.doDecrypt(e.substr(2), i, o) 自然就是js的解密函数了
问题来了 s.doDecrypt(e.substr(2), i, o) 是从哪里来的呢?
可以发现这是采用了国密SM2加密算法,其实在查看js代码里函数都被混淆成 a、b、c、d这种无意义的函数名, 并且文件头里有 webpack的分发器,就知道这是经过webpack打包的项目了
0x03 webpack代码利用
想要使用其中的 s.doDecrypt(e.substr(2), i, o) 函数,不必将代码逆向成原始代码,直接调用webpack混淆过的代码就可了
首先将index.js下载到本地,建议在浏览器中格式化后再下载
调用其中函数可先在文件顶部创建 全局变量
var sign;
window = global
将 sign 赋值为所需使用的分发器(例如 sign = s),然后将当前的分发器代码改为自执行函数。如果其他 Js 文件中存在对分发器的引用,需要将这些分发器代码复制黏贴到分发器定义处。由于我们想使用 s 对象下的方法,因此只需在分发器定义处创建全局变量 sign = s,即可调用该对象下的方法。
但是直接调用 解密函数发现报错了
这是因为在调试过程中发现,函数跳转到了另外两个js文件中,其中存储的也是webpack分发器,将其中的代码删除第一行和最后一行,其余的都复制到我们下载的index.js分发器中
解密测试
从burp或者浏览器中复制一组数据,i 的值是不变的, r 是密文值
测试函数如图
在控制台中,中文乱码了,这是因为js 默认的atob函数不能解码中文,想要用js base64解码中文需要导入 base64.js 库,这里我就不导了
先不进行base64解码
这里我使用php的base64进行解码,可以看到成功解密了密文
能够成功进行数据包的加解密,就可以配合burp js插件进行账号密码爆破,或者其他接口的测试了
0x05 总结
webpack的解密还是比较少见到的,通过这次调试学习到了很多。喜欢的师傅可以点赞转发支持一下谢谢!
0x06 内部星球VIP介绍-V1.3更新啦!
如果你想学习更多渗透挖洞技术欢迎加入我们内部星球可获得内部工具字典和享受内部资源,包含网上一些付费工具。详情直接点击下方链接进入了解,需要加入的直接点击下方链接了解即可,觉得价格高的师傅可后台回复" 星球 "有优惠券名额有限先到先得!内部包含网上需付费的0day/1day漏洞库,后续资源会更丰富在加入还是低价!
免责声明
获取方法
回复“app" 获取 app渗透和app抓包教程
回复“渗透字典" 获取 一些字典已重新划分处理(需要内部专属字典可加入星球获取,好字典不对外公开,持续整理中!)
回复“书籍" 获取 网络安全相关经典书籍电子版pdf
最后必看
文章中的案例或工具仅面向合法授权的企业安全建设行为,如您需要测试内容的可用性,请自行搭建靶机环境,勿用于非法行为。如用于其他用途,由使用者承担全部法律及连带责任,与作者和本公众号无关。本项目所有收录的poc均为漏洞的理论判断,不存在漏洞利用过程,不会对目标发起真实攻击和漏洞利用。文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用。如您在使用本工具或阅读文章的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。本工具或文章或来源于网络,若有侵权请联系作者删除,请在24小时内删除,请勿用于商业行为,自行查验是否具有后门,切勿相信软件内的广告!
原文始发于微信公众号(渗透安全HackTwo):前端Js解密小技巧|JS逆向
原文始发于微信公众号(渗透安全HackTwo):前端Js解密小技巧|JS逆向
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论