freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

javascript前端审计:博彩网站后台js加密解密分析
2023-10-24 18:11:47

概述

我们进入了一个赌博平台,发现他需要下载app使用,我们想找入口点进行渗透、爆破,就先需要从app下载开始。

下载安装app后,发现他的平台都做了安全防护,所以对app进行渗透测试,并没有找到任何可以利用的漏洞。

一番信息搜集后,找到了他的后台页面。

1698136822_653782f60ca43cb877063.png!small?1698136824571

1698137140_6537843445f1ee27bcff1.png!small?1698137141232

1698137218_653784822d9aedd15245a.png!small?1698137219533


js分析

找到后台页面后,尝试了各种组合拳,像sql、万能密钥、log4j2等尝试无效后,就想到了密码爆破,但爆破的时候,发现进行了前端加密,这就需要先解密他的前端js代码,再去生成字典,才能够进行爆破了。

尝试使用admin  admin进行登录,抓包查看,是密文

1698137702_65378666935581939e87e.png!small?1698137703495

加密后的admin密文是:9RDmzgbdrAZ9Oqi1qgz4Uw==

进入浏览器,查看当前的js信息。

1698137774_653786ae0d9aac4600ec4.png!small?1698137775279

可以看到的是,他存在几个加密文件,其中关键的部分是:

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

1698140569_65379199bf53603a139ae.png!small?1698140570230

core.js

1698140641_653791e1462fef117ffb6.png!small?1698140641727

aes.js

1698140731_6537923b0e52442f39292.png!small?1698140731536

它的加密方式其实一点也不复杂,仔细看源代码,就能够获取到密钥的

解密密文:9RDmzgbdrAZ9Oqi1qgz4Uw==  得到如图结果

1698140312_65379098ee5ad60295945.png!small?1698140313303


好,既然已经解密,那么接下来就可以生成字典进行批量爆破了。

1698141373_653794bd125ca29382ea4.png!small?1698141373595

于是就爆破出账号密码了,登录后进行google二次验证。

由于经验有限,一些博彩站的安全防护也比较高,因此登录后台以后,止步于google的二次验证了

1698141570_653795829346fdc677a2b.png!small?1698141571356


# web安全 # 境外博彩网站 # JS加密算法
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录