前言
前端的数据加密是对用户的输入的一个常见的加密方法 还有的就是防止我们的sql注入 如 id=MQ== 这个其实解密出来就是 id = 1 所以注入的思路就是 把 1和payload 一起加密然后 再进行注入
客户端的加密 => 数据加密传输 => 服务端解密 => 服务端的处理
传输的数据
1 加密 xxx payload xxx payload 解密 (解码不出来只能 把payload 进行加密 才能进行执行) 1
直接进行注入
这样就可以进行注入了 后端解密出来还是 我们相应的代码
CryptoJS库加密
<script src="./crypto.js">//引入加密库//使用库内函数进行加密</script>// base64加密<script>var str = "xiaodisec";var base64 = btoa(str); //btoa是原生态的console.log(base64);</script>
//MD5加密var md5str=CryptoJS.MD5(base64str).toString();console.log(md5str);//SHA1加密var shastr = CryptoJS.SHA1(str).toString(); // 注意:1是数字1console.log(shastr)//HMAC加密var key = 'key';var hash = CryptoJS.HmacSHA256(key, str);var HMACstr = CryptoJS.enc.Hex.stringify(hash);console.log(HMACstr);// 使用AES进行加密 //模式是ECB的时候是不需要key的var aseKey = "aeskey" // 定制秘钥,长度必须为:8/16/32位, 长度不一致也没问题// 加密 DES/AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DESvar aesstr = CryptoJS.AES.encrypt(str, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=加密内容{mode: CryptoJS.mode.ECB,// 为AES的工作方式padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符}).toString(); // toString=转字符串类型console.log(aesstr); // 在弹窗中打印字符串// 使用DES进行加密var deskey = "deskey" // 定制秘钥,长度必须为:8/16/32位, 长度不一致也没问题// 需要加密的内容// 加密 DES/AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DESvar desstr = CryptoJS.DES.encrypt(str, CryptoJS.enc.Utf8.parse(deskey), // 参数1=密钥, 参数2=加密内容{mode: CryptoJS.mode.ECB, // 为DES的工作方式padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符}).toString(); // toString=转字符串类型console.log(desstr); // 控制台打印 CDVNwmEwDRM
RSA加密 需要重新导入一个库
//RSA 加密 这个需要公钥和私钥 var PUBLIC_KEY = "";var PRIVATE_KEY = "";//公钥加密var encrypt = new JSEncrypt(); //实例化加密对象encrypt.setPublicKey(PUBLIC_KEY); //设置公钥var encrypted = encrypt.encrypt(str); //对指定数据进行加密console.log(encrypted);//私钥解密var decrypt = new JSEncrypt(); // 创建解密对象decrypt.setPrivateKey(PRIVATE_KEY); //设置私钥var uncrypted = decrypt.decrypt(encrypted); //解密 'xiaodisec'console.log(uncrypted);
好用的解密网站 : 在线AES加密解密、AES在线加密解密、AES encryption and decryption--查错网
黑盒情况下寻找web的加密算法
第一个演示是自己写的这个
思路 : 找到前端的加密逻辑然后 再截取加密的方法 使用前端的加密方法进行加密 这个就是和他相同的逻辑
前端就是一个登录页面
<script src="https://unpkg.com/axios/dist/axios.min.js "></script><script src="crypto-js.js"></script><script>$('button').click(function() {var str = $('#password').val();var key = "aeskey";var aesstr = CryptoJS.AES.encrypt(str, CryptoJS.enc.Utf8.parse(key), // 参数1=密钥, 参数2=加密内容{mode: CryptoJS.mode.ECB, // 为AES的工作方式padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符}).toString();axios({method: "POST ",url: "login.php ",data: {user: $('#user').val(),password: aesstr}}).success(function(res) {// console.log("登录成功 ");if (res['infocode'] == 1) {alert("登录成功 ");Location("houtai.html")}})}); // 点击按钮触发事件</script>
这个时候我们如果想要进行弱口令爆破 就得找到加密逻辑
先找到加密逻辑的路径 : 当前的路径 就是 login.html
找到加密逻辑 复制一下
把空格删除掉sec 加密:lGqGMg7PmMYqT/aQHPI0gg==
怎么找key 就看前端有没有泄露