最近在公众号发现有小伙伴在使用nodejs调用加密脚本对密码进行加密暴力破解。于是打算给Burp插件jsEncrypter添加nodejs
版本的server脚本。目前已经更新该脚本到项目中,感兴趣的小伙伴可以去试试效果。
Node.js版server脚本代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
var http = require('http'); var querystring = require('querystring');
var host = '127.0.0.1'; var port = '1664';
require('./sha384.js');
function js_encrypt(payload){ var newpayload; var pwdhash=CryptoJS.SHA384(payload); newpayload = pwdhash.toString(); return newpayload; }
var server = http.createServer(function(request,response){
if(request.method === 'POST'){ var postData = ''; request.on('data',function(params){ postData += params; }); request.on('end',function(){ var dataString = postData.toString(); var dataObj = querystring.parse(dataString); var payload = dataObj.payload; var encrypt_payload = js_encrypt(payload); console.log('[+] ' + payload + ':' + encrypt_payload); response.statusCode = 200; response.write(encrypt_payload); response.end(); }); }else{ response.statusCode = 200; response.write("^_^\n\rhello jsEncrypter!"); response.end(); } });
server.listen(port, host, function () { console.log("[!] ^_^"); console.log("[*] nodejs server start!"); console.log("[+] address: http://"+host+":"+port); });
|
nodejs版server脚本使用
nodejs版本的server脚本和phantomjs版本基本一样,不过nodejs版本的使用需要多一个步骤。下面我们搭建起jsEncrypter项目自带的实验环境,并通过演示md5加密传输来说明脚本如何使用。
1.修改调用需要调用的加密脚本
在加密脚本的末尾加入两行代码。代码格式如下:
1 2
| global.function = function //将需要调用的函数或对象编程全局 exports.function = function //使用export来暴露接口,不然nodejs无法找到我们的加密方法
|
我们查看例子中的页面源码,可知前端引入md5.js
实现对数据的加密,所以我们把md5.js保存到本地。然后再看看前端调用加密函数的代码是什么?
所以我们在md5.js
结尾加入这两行代码。
2.编写调用脚本
在nodejs_server.js中引入加密脚本,并在js_encrypt方法中编写调用加密函数进行加密。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| ...... ...... ...... require('./md5.js');
function js_encrypt(payload){ var newpayload; newpayload = hex_md5(payload); return newpayload; } ...... ...... ......
|
3.执行脚本
最后补充一点,测试环境中sha384
加密例子有点特殊。sha384前端调用加密函数的代码为
1
| en_password = CryptoJS.SHA384(password);
|
所以在sha384.js
结尾应加入这两行代码
1 2
| global.CryptoJS = CryptoJS; exports.CryptoJS = CryptoJS;
|
而不是
1 2
| global.CryptoJS = SHA384; exports.CryptoJS = SHA384;
|
总结
nodejs版本的server在使用过程需要修改原加密脚本,比phantomjs版本号稍微繁琐一点。大家看自己的习惯吧,萝卜青菜各有所爱!