通过对请求进行抓包,进行两次请求,负载中发现有以下参数:
通过对比发现password是加密的,captcha、execution两个参数在变化,其中captcha是验证码的英文,观察发现captcha的确是验证码;通过全局关键字搜索关键字execution,发现如下:
<input type="hidden" name="execution" value="c535ae11-9adc-4986-bc8e-cddf14d2c3">
<input type="hidden">
是一个 HTML 元素,它通常被用于在表单中存储隐藏的数据。这个元素不会在页面上显示出来,但可以用于在提交表单时传递额外的数据。
再对password进行全局搜索,很容易便发现其加密位置,该加密采取了AES加密,加密实现中使用了 CBC 和 PKCS7 模式进行填充,增强其随机性与安全性,最后使用CryptoJS.AES.encrypt进行加密,最后为了保证数据传输的安全与完整,使用了encodeURLComponent进行编码,最后得出加密的密码;但是其解密方法的位置未进行解码,无法对密文进行正确输出。代码如下:
// 此仅属于方法分享,未给出密钥等,无法运行
var key = CryptoJS.enc.Utf8.parse();
var iv = CryptoJS.enc.Utf8.parse();
function encrypt(plaintext) {
var encrypted = CryptoJS.AES.encrypt(plaintext, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var edpwd = encodeURIComponent(encrypted.toString());
return edpwd;
}// 加密
function decrypt(ciphertext) {
var decodedCiphertext = decodeURIComponent(ciphertext);
var decrypted = CryptoJS.AES.decrypt(ciphertext, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var plaintext = decrypted.toString(CryptoJS.enc.Utf8);
return plaintext;
}// 解密
function checkForm() {
var password = "123456";
var encryptPwd = encrypt(password);
console.log("加密后的密码:"+encryptPwd);
var pWD = decrypt(encryptPwd);
console.log("解密后的密码:"+pWD);
return true;
}