前言 

前端的数据加密是对用户的输入的一个常见的加密方法   还有的就是防止我们的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是数字1
  console.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.DES
  var 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.DES
  var 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   就看前端有没有泄露

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐