当前位置:首页 > Web开发 > 正文

我们可以继续跟进

2024-03-31 Web开发

标签:

前端JS加密那些事 0x01前端根基编码/加密方法

前端信息枚举时,当通过Burp抓包发明参数颠末类似Base64、MD5等方法措置惩罚惩罚过的,可以直接通过Burp->Intruder->Payloads->PayloadProcessing的设置来进行枚举。这里还有一些其他的成果可以自行拓展(如:增加payload前缀)

技术图片

0x02自界说加密

如果遇到自界说加密的情况,就需要通过阅读js文件,找到加密函数。按照加密函数对参数值进行运算后再提交数据包。

寻找Encrypt()

寻找加密函数的要领有很多种,接下来我通过实例来讲讲我的要领,但愿有人能看大白吧。
就在刚刚遇到的一个登录页面,登录的数据包是这样的(如下图)。password参数是颠末措置惩罚惩罚后的数据,咋一看通过URL解码后拿去按base64解是乱码,这时就需要看js做了什么操纵了。

技术图片


技术图片

我们F12打开开发者工具,通过开发者工具左上角的元素选择工具,定位到登录按钮元素。然后在右侧的选项卡中选择EventListeners,检察绑定了登录按钮Click(点击)事件的js。

技术图片

一眼应该很明显能看到最后一个customerLogin.js,我们要的对象应该在这里面,点击它跟进进去。
跟进后我们简单阅读js,概略就了解了Burp抓的那一串数据是怎么来的了。通过UED.aes.getKey(16)获得Key后,使用UED.aes.encrypt(key,password)加密。我们可以继续跟进,搜索一下UED是个什么对象以及UED.aes.getKey()和UED.aes.encrypt()的界说。

技术图片

这里我们通过search in all files来找UED的界说。

技术图片


技术图片

跟进这个文件,我们就可以清晰的看到加解密的过程和getKey的感化了~

var UED = window.UED || {}; (function ($, window) { var App = { init: function() { this.cacheElements(); this.bindEvents(); }, cacheElements: function() { }, bindEvents: function() { }, /** * aes加密 * @param theKey 密钥 * @param pass 暗码(原文) */ encrypt: function(theKey,pass){ var key = CryptoJS.enc.Utf8.parse(theKey); var srcs = CryptoJS.enc.Utf8.parse(pass); var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return encrypted.toString(); }, /** * aes解密 * @param theKey 密钥 * @param pass 暗码(密文) */ decrypt: function(theKey,pass){ var key = CryptoJS.enc.Utf8.parse(theKey); var decrypt = CryptoJS.AES.decrypt(pass, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); }, /** * 生成密钥 * @param n 生成几多位的密钥(默认8位) */ getKey: function(n) { var chars = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']; if(n==null){ n = 8; } var res = ""; for(var i = 0; i < n ; i ++) { var id = Math.ceil(Math.random()*35); res += chars[id]; } return res; } } App.init(); UED.aes = App; })(jQuery,window);

这样下来我们就了解了整个过程:

getKey(16) //获取随机16位key

encrypt(key, password) //加密password

将key和password都发送给处事端

0x03 绕过前端加密

这里总结了几种绕过的方法:

如果加密算法对照简单的话,可以通过编程语言重写一下加密,再结构发送数据包。这样的毛病是,当加密算法较庞大,,或时间较告急时无法快速完成测试。

第二种与1有些类似,通过Python的PyExecJs模块加载JS加密函数。通过挪用此函数获得加密后数据,再结构发送数据包。下图是针对上面讲的案例写的脚本。

技术图片

第三种要领相对付前面的越发简单粗暴而且快捷。通过使用c0ny1师傅写的Burp插件jsEncrypter来完成此需求。
项目链接:jsEncrypter,使用的要领作者已经写的很清楚了,网上也有很多文章,这里就不赘述了。我们直接来看下效果吧~下图是针对上面讲的案例做的操纵,可以看到生成的密文处事器端告成解析了。

技术图片


技术图片

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31173.html