概述
我们进入了一个赌博平台,发现他需要下载app使用,我们想找入口点进行渗透、爆破,就先需要从app下载开始。
下载安装app后,发现他的平台都做了安全防护,所以对app进行渗透测试,并没有找到任何可以利用的漏洞。
一番信息搜集后,找到了他的后台页面。
js分析
找到后台页面后,尝试了各种组合拳,像sql、万能密钥、log4j2等尝试无效后,就想到了密码爆破,但爆破的时候,发现进行了前端加密,这就需要先解密他的前端js代码,再去生成字典,才能够进行爆破了。
尝试使用admin admin进行登录,抓包查看,是密文
加密后的admin密文是:9RDmzgbdrAZ9Oqi1qgz4Uw==
进入浏览器,查看当前的js信息。
可以看到的是,他存在几个加密文件,其中关键的部分是:
function check() {
var code = 'letu@levle';
var yname = $("#yname").val();
if (yname == '') {
alert("用户名不能为空");
return false;
} else {
var newName = secret(yname, code, false);
$("#xname").val(newName);
}var ypassword = $("#ypassword").val();
if (ypassword == '') {
alert("密码不能为空");
return false;
} else {
var newPassword = secret(ypassword, code, false);
$("#xpassword").val(newPassword);
}
} function secret(string, code, operation) {
code = CryptoJS.MD5(code).toString();
var iv = CryptoJS.enc.Utf8.parse(code.substring(0, 16));
var key = CryptoJS.enc.Utf8.parse(code.substring(16));
if (operation) {
return CryptoJS.AES.decrypt(string, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
}
return CryptoJS.AES.encrypt(string, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString();
}
从js中可以看出,他最先调用check()函数来对提交的表单内容进行检查,#yname和#ypassword是用于传参的密码,如果检查通过,则调用secret()函数来进行加密。
在secret()函数中,CryptoJS.MD5(code).toString()函数就是加密的密钥,它使用的加密方式是aes,直接解密函数,可以获取它的偏移量是:ace43e65106a77f6,密钥:f3991777154f4bd0,采用base64编码。
加密方式可以在以下javascript代码中进行查看
md5.js
core.js
aes.js
它的加密方式其实一点也不复杂,仔细看源代码,就能够获取到密钥的
解密密文:9RDmzgbdrAZ9Oqi1qgz4Uw== 得到如图结果
好,既然已经解密,那么接下来就可以生成字典进行批量爆破了。
于是就爆破出账号密码了,登录后进行google二次验证。
由于经验有限,一些博彩站的安全防护也比较高,因此登录后台以后,止步于google的二次验证了