打开站点:
可以看到就一个SSO单点登录,然后简单打点测试下:
好家伙,明文传输都给修复了,没事 问题不大 我们去翻翻JS 看看加密代码是不是写在前端
运气很好,直接搜到了,那么直接把app.js 先格式化下代码
然后贴到本地代码阅读工具里直接研究就行,
"0627": function (e, t, n) {
;
n.d(t, "a", (function () {
return C
}));
n("d3b7"), n("25f0");
var o = n("6510"),
i = n.n(o),
a = i.a.enc.Utf8.parse("1234588888823456"),
r = i.a.enc.Utf8.parse("1234588888823456");
function C(e, t, n) {
var o = a,
C = r;
var s = i.a.enc.Utf8.parse(e),
c = i.a.AES.encrypt(s, o, {
iv: C,
mode: i.a.mode.CBC,
padding: i.a.pad.ZeroPadding
});
return i.a.enc.Base64.stringify(c.ciphertext)
}
这就是关键加密代码,可以看到是写在键值为0627的匿名函数里
然后是AES加密 , 那么去看看AES的加密规则
encrypt(code(明文), key(秘钥), {
iv: iv(偏移量),
mode: 模式,
padding: 填充方式
}
OK 拿上述代码对比函数里的 可以得知以下信息
密文是由AES加密而成 所需的 key和iv都是1234588888823456 用的CBC模式 填充方式为ZeroPadding 编码用的是Base64
Ps:(为了方便测试,首先需要把右键-另存当前页面,把前端保存到本地,然后改JS来一步步调试)
比如我在这
直接Ctrl+c ,Ctrl+v 把代码里的encrypt 改成 decrypt 然后通过console.log 来输出到控制台里
好,可以看到加密代码是对的,没有误差
那现在就直接通过github上的jsEncrypter项目 https://github.com/c0ny1/jsEncrypt
来对接Burp自动化Fuzz
先下载github的包 然后 Mvn package 把项目编译成插件 (记得给mvn挂上代理,因为本地如果没有编译环境时所需要的资源,Mvn会直接访问Apache中央库把所需资源下载到本地)
然后就是写PhantomJS脚本 如下:
var webserver = require('webserver');
server = webserver.create();
var host = '127.0.0.1';
var port = '1664';
// 加载实现加密算法的js脚本
var wasSuccessful = phantom.injectJs('aes.js') && phantom.injectJs('pad-zeropadding.js');
//所需Js文件 下载地址:https://codeload.github.com/sytelus/CryptoJS/zip/master
// 处理函数
function js_encrypt(payload){
/*********************************************************/
var AesKey = "1234588888823456";
var CBCIV = "1234588888823456";
var CBCOptions = {
iv: CryptoJS.enc.Utf8.parse(CBCIV),
mode:CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
}
var key = CryptoJS.enc.Utf8.parse(AesKey);
var secretData = CryptoJS.enc.Utf8.parse(payload);
var encrypted = CryptoJS.AES.encrypt(
secretData,
key,
CBCOptions
);
return encrypted.toString();
/*********************************************************/
}
if(wasSuccessful){
console.log("[*] load js successful");
console.log("[!] ^_^");
console.log("[*] jsEncrypterJS start!");
console.log("[+] address: http://"+host+":"+port);
}else{
console.log('[*] load js fail!');
}
var service = server.listen(host+':'+port,function(request, response){
try{
if(request.method == 'POST'){
var payload = request.post['payload'];
var encrypt_payload = js_encrypt(payload);
console.log('[+] ' + payload + ':' + encrypt_payload);
response.statusCode = 200;
response.write(encrypt_payload.toString());
response.close();
}else{
response.statusCode = 200;
response.write("^_^nrhello jsEncrypter!");
response.close();
}
}catch(e){
console.log('n-----------------Error Info--------------------')
var fullMessage = "Message: "+e.toString() + ':'+ e.line;
for (var p in e) {
fullMessage += "n" + p.toUpperCase() + ": " + e
;
}
console.log(fullMessage);
console.log('---------------------------------------------')
console.log('[*] phantomJS exit!')
phantom.exit();
}
});
然后把编译好的插件导入到burp中
并测试脚本
然后测试自动化Fuzz
成了。 剩下的操作就是常规化的渗透检测了,,
Ps:使用前记得取消掉自动把字符Url编码化
有啥问题的可以进群咨询哈~群号:585636019
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论