python长房集团登陆j_password参数破解
个人申明:本人只为用于学习使用,对于参考适用于不法用途,和本人无关,如果对本公司造成不必要麻烦,请联系本人删除
抓包
通过上面我们可以看出提交了post表单
观察参数我们可以看出j_username是我们的用户名,这个不必多说,主要是j_password这个参数是怎么生成的,这个是我们今天的重点。
通过关键字搜索j_password
这里有一个很明显的desencrpt函数,这个就是我们常见的aes,和des加密方式。
desencrpt这个函数点进去,我们可以看到下面
通过上面,我们基本就知道加密的所在地了,现在废话不多说,我们可以简单的改写一下这个函数。
我们改写的目的,就是要找到里面的key,iv和security这三个参数
function desEncrypt(password) {
var keyObj = {};
keyObj = SECURITYKEY.get();
value = CryptoJS.AES.encrypt(password, CryptoJS.enc.Utf8.parse(keyObj.key), {
iv: CryptoJS.enc.Utf8.parse(keyObj.iv)
}).toString()
return keyObj.security + value
}
要找到这三个参数,只需要找到keyObj这个对象就行了,我们可以搜索SECURITYKEY就可以看到
从这里我们就可以找到这个下面的这个keyObj这个值,我们抠出来然后改写一下
keyObj = SECURITYKEY.get();
get: function(encodeType) { 这里传的参数要不是“”,要不是”des“
var str = SECURITYKEY._2(); 这里我们又需要找到SECURITYKEY._2()这个函数,但是我们观察这个函数,就是拿取getSessionId()这个东西跟cookie有关我们可以直接复制一个过来写死
if (encodeType == null || encodeType == 'aes') {
if (str.length < 32) {
str += "abcdefghijklmnopqrstuvwxyz1234567890"
}
str = str.toUpperCase();
var key = {};
key.key = str.substring(0, 16);
key.iv = str.substring(16, 32);
key.security = "\u4435\u5320\u4d35"
} else {
if (str.length < 16) {
str += "abcdefghijklmnopqrstuvwxyz"
}
str = str.toUpperCase();
var key = {};
key.key = SECURITYKEY.toHexString(str.substring(0, 8)); //改写成toHexString(str.substring(0, 8)); toHexString这个方法也在上面可以复制过来
key.iv = SECURITYKEY.toHexString(str.substring(8, 16)); //这里同理
key.security = "\u4445\u5320\u4d45"
}
return key
}
通过上面的分析,我们现在思路就已经很清楚了,哈哈,直接上最终的代码
var CryptoJS = require("crypto-js") //这里要导入模块,或者直接复制网站的CryptoJS这个函数,整体复制过来都行。
function toHexString(str) {
var temp = "";
for (i = 0; i < str.length; i++) {
temp += str.charCodeAt(i).toString(16)
}
return temp
}
function get(encodeType) {
var str = "CDAFDE400055E7263327948372"; //这里复制自己的getSessionId,我把我自己的也随便乱改了,为了安全起见,我不想去免费的饭。
if (encodeType == null || encodeType == 'aes') {
if (str.length < 32) {
str += "abcdefghijklmnopqrstuvwxyz1234567890"
}
str = str.toUpperCase();
var key = {};
key.key = str.substring(0, 16);
key.iv = str.substring(16, 32);
key.security = "\u4435\u5320\u4d35"
} else {
if (str.length < 16) {
str += "abcdefghijklmnopqrstuvwxyz"
}
str = str.toUpperCase();
var key = {};
key.key = toHexString(str.substring(0, 8));
key.iv = toHexString(str.substring(8, 16));
key.security = "\u4445\u5320\u4d45"
}
return key
}
//这个下面的是我的入口函数。
function desEncrypt(password) {
var keyObj = {};
keyObj = get(""); //这里也可以写成keyObj = get("des")根据网站实际情况
var value = "";
value = CryptoJS.AES.encrypt(password, CryptoJS.enc.Utf8.parse(keyObj.key), {
iv: CryptoJS.enc.Utf8.parse(keyObj.iv)
}).toString()
return keyObj.security + value
}
aa = desEncrypt("123456")
console.log(aa)
打印结果
䑅匠䵅WzsW1tO3tApl84RgGz1QKg==
或者是
䐵匠䴵B5O7q53FmXSlj0eBunRVPw==