JS的秘密-登录验证中aes加密的破解方法

admin 2020年8月30日23:41:46评论649 views字数 3910阅读13分2秒阅读模式

JS的秘密-登录验证中aes加密的破解方法

0x00 前言

最近在对某个客户系统进行测试时,偶然发现系统通过AES算法对用户名和密码进行了加密

众所周知,前端是使用js对用户名和密码进行的加密然后后端再对其进行解密,js就是JavaScript语言,可以说是目前互联网上最流行的脚本语言。js的用途之广也会带了一些问题,js泄露敏感信息,例如后台路径、管理员信息、手机号、邮箱等等。相信很多人在测试过程中碰到登录界面第一反应是爆破,没有加密的还好,如果碰到了AES或者DES加密就很头疼。今天我们的主题就是通过js获取其中的加密算法并且逐渐实现自动化。

0x01 常见的加密方式

1、线性散列算法MD5 SHA1。
2、对称性加密算法 AES DES。
3、非对称性加密算法 RSA。

在加密方式上一般选择前两种的比较多,很少有使用非对称加密,所以我们一般遇到的加密方式为前两种。

0x02 寻找加密算法

在测试过程中,查看源码时其发现加密算法为AES,如下图:

JS的秘密-登录验证中aes加密的破解方法

不单单是知道了其加密算法为AES,还发现了加密用的密码和偏移量,这样我们就可以自己进行加密。

0x03 加密插件

到这里第一想法是用python写个脚本对字典进行加密然后使用burp suite进行爆破,但是就在这个时候我看到了 c0ny1 大佬的加密传输爆破插件jsEncrypter,链接在最下方。

这里小伙伴们可以自行下载编译,然后把插件加载到burp suite中,如下图:

JS的秘密-登录验证中aes加密的破解方法

0x04 增加AES

这里加载成功后,使用phantomjs.exe运行然后连接就可实现快速加密,但是美中不足的是c0ny1 大佬并没有写AES的加密算法所以这里需要自己动手进行操作,这里c0ny1 大佬给了我们一个固定的模板

/** * author: c0ny1 * date: 2017-12-16 * last update: 2020-03-03 */var fs = require('fs');var webserver = require('webserver');server = webserver.create();
var logfile = 'jsEncrypter.log';var host = '127.0.0.1';var port = '1664';
/* 1.在这引入实现加密所有js文件,注意引入顺序和网页一致 *///var wasSuccessful = phantom.injectJs('crypto-js.js');/* 引入实现加密的js文件*/
// loadScript("script-2.js");// loadScript("script-n.js");/**********************************************/
function loadScript(scriptName) { var isSuccess = phantom.injectJs(scriptName); if(isSuccess){ console.log("[*] load " + scriptName + " successful") }else{ console.log("[!] load " + scriptName + " fail") console.log("[*] phantomjs server exit"); phantom.exit(); }}
// var key = CryptoJS.enc.Utf8.parse("PBLUREBUWNXCXHRQ"); //16位// var iv = CryptoJS.enc.Utf8.parse("1234567812345678");function jsEncrypt(burp_payload){ var new_payload; /* 2.在这里编写调用加密函数进行加密的代码,并把结果赋值给new_payload */ // 编辑 加密函数的位置 /*********************************************************/ return new_payload;}


这里展示一小部分

其中主要的内容在于加密函数的代码,和引入加密的js文件。而且我们上面在js文件中找到了AES的密码和偏移量所以我们可以直接进行修改

var wasSuccessful = phantom.injectJs('crypto-js.js');


引用的加密文件这里是通用的(从sha512加密的文件中借用一下"crypto-js.js")。


function jsEncrypt(burp_payload){` `var new_payload;` `/* 2.在这里编写调用加密函数进行加密的代码,并把结果赋值给new_payload */` `// 编辑 加密函数的位置` `const key = CryptoJS.enc.Utf8.parse("ihaierForTodoKey"); //16位` `const iv = CryptoJS.enc.Utf8.parse("ihaierForTodo_Iv");` `const srcs = CryptoJS.enc.Utf8.parse(burp_payload);` `encrypted = CryptoJS.AES.encrypt(srcs, key, {` `iv: iv,` `mode: CryptoJS.mode.CBC,` `padding: CryptoJS.pad.Pkcs7` `});`
new_payload =decodeURIComponent(CryptoJS.enc.Base64.stringify(encrypted.ciphertext)); /*********************************************************/ return new_payload;
`}`

这里多加了base64加密,需要hex的话可以去掉base64。

当然其他的加密算法通用,如下:

base 64:

var wasSuccessful = phantom.injectJs('base64.js');/*引入实现加密的js文件*/
// 处理函数function js_encrypt(payload){ var newpayload; /**********在这里编写调用加密函数进行加密的代码************/ var b = new Base64(); newpayload = b.encode(payload); /**********************************************************/ return newpayload;}

DES:

var wasSuccessful = phantom.injectJs('des.js');/*引入实现加密的js文件*/
// 处理函数function js_encrypt(payload){ var newpayload; /**********在这里编写调用加密函数进行加密的代码************/ //var b = new Base64(); newpayload = strEnc(payload,"key","para0","para1"); /**********************************************************/ return newpayload;}

sha512:

var wasSuccessful = phantom.injectJs('crypto-js.js');/*引入实现加密的js文件*/
// 处理函数function js_encrypt(payload){ var newpayload; /**********在这里编写调用加密函数进行加密的代码************/ newpayload = CryptoJS.SHA512(payload); /**********************************************************/ return newpayload;}

0x05 加密测试

然后进行测试,效果如下:

JS的秘密-登录验证中aes加密的破解方法
成功进行加密。

当然在爆破的过程中我们还可以采用更有效率方法,在使用phantomjs.exe运行js且确保burp suite和它连接上时,我们可以选择intruder模块中的加密方式为Invoke Burp extension(插件外援),如下图:

JS的秘密-登录验证中aes加密的破解方法
0x06 自动化加密

然后进行爆破。如下图:

JS的秘密-登录验证中aes加密的破解方法

最终实现全自动化。

0x07 结语

AES的加密一共有五种模式分别为CBC、ECB、CFB、OFB、CTR,本次js中AES的加密的工作模式为CBC,其他的工作模式也可用相同方式进行解密。如果有小伙伴们遇到类似情况可以去翻一翻JS说不定有意想不到的惊喜,细心点总会有收获。最后文中所有工具和插件都已打包,关注公众号回复“AES”获取下载地址。

0x08 参考链接

https://github.com/c0ny1/jsEncrypter


E


N


D








Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。

JS的秘密-登录验证中aes加密的破解方法


JS的秘密-登录验证中aes加密的破解方法我知道你在看

JS的秘密-登录验证中aes加密的破解方法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年8月30日23:41:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JS的秘密-登录验证中aes加密的破解方法http://cn-sec.com/archives/109624.html

发表评论

匿名网友 填写信息