Chrome开发者工具(F12)分析前端加密(AES)实战 您所在的位置:网站首页 显示网页密码怎么设置的 Chrome开发者工具(F12)分析前端加密(AES)实战

Chrome开发者工具(F12)分析前端加密(AES)实战

2024-07-16 15:46| 来源: 网络整理| 查看: 265

背景: 平时在渗透测试过程中,经常会遇到前端提交的数据是经过加密的,用burp等工具截断后无法解密,不能进行fuzz或者爆破测试(不严谨,爆破好像也算FUZZ,能看懂就行了,大佬勿笑)。今天就带来一个实战案例,用谷歌浏览器分析(逆向)前端加密过程。以便编写脚本模拟加密进行相关测试任务。如下: 登录操作–burp抓包: 在这里插入图片描述 在这里插入图片描述 分析: 1、查找绑定事件: 既然是点“登录”后前端(JS)将加密数据发送到了后端,那么这个加密行为一定是绑定在“登录”按钮的“点击事件”上的。使用元素选择器选择“登录”按钮,查找出“登录”按钮绑定了两个点击事件。 在这里插入图片描述 2、确定“加密”事件: 找到了两个事件,怎么知道加密到底在哪个事件上呢?使用"Remove"先删除事件试试(注意,这步并不是必须的,具体环境可能不同。这里主要为了顺便演示下Remove功能)。 在这里插入图片描述 删除一个事件后继续进行登录操作,发现一切正常,数据照样加密并请求到了后端。说明加密行为的入口应该在第二个事件上。 在这里插入图片描述 3、分析加密过程 直接点击事件函数所在的JS,会自动进入Sources标签下,并定位到事件绑定的函数处。 在这里插入图片描述 在这里插入图片描述 简单分析下代码,发现它最终执行了SignIn()函数。使用“查找功能”找到SignIn()函数。 在这里插入图片描述 再简单分析下SignIn()函数,发现最终它执行的有效函数时login(),继续查找定位到login()函数。 在这里插入图片描述 分析下login()函数,它的功能其实就是通过一个回调函数判断登录是否成功了,如果看不太懂也没关系,在if上打断点,看下它的判断条件,发现是服务器返回的数据,这说明if的地方加密已经执行过了。 在这里插入图片描述 看看下面的代码,既然是加密,那一定是将明文传递进去,输出密文。那么我们再找明文,因为毕竟明文我们是已知的,很明显,明文的位置就在if的上面,selfInfo变量。找到了明文的变量,我们就继续找将明文传递进去的函数,很明显就是这个RongGuangFun.AjaxFun.GetAjaxNoValidate函数了。

function login() { var selfInfo = { username: escape($("#username").val()), password: escape($("#password").val()) , ParentModuleGuid: '' }; console.log(selfInfo); //这句是我为了测试手动添加的。 RongGuangFun.AjaxFun.GetAjaxNoValidate(selfInfo, WebApiUrl + "api/Login/UserLogService", function LoginLoad(data) { if (data.Flag) { if (data.IsEnabled === "1") { RongGuangFun.AjaxFun.GetAjaxNoValidate(null, WebApiUrl + "api/Login/GetAllDictionary", function LoginLoad(dicdata) { window.localStorage.setItem("UserInfo", JSON.stringify(data)); window.localStorage.setItem("Dictionary", JSON.stringify(dicdata)); alldic = window.localStorage.getItem("Dictionary"); window.location.href = "index.html"; }); } else { $(".input-val").val(''); refresh();//刷新验证码 // layer.msg('该账号已被禁用,请联系管理员!'); layer.msg(data.Msg); } } else { $(".input-val").val(''); refresh();//刷新验证码 // layer.msg('账号或密码错误,登录失败!'); layer.msg(data.Msg); } }); }

然而,RongGuangFun.AjaxFun.GetAjaxNoValidate这个函数在哪里呢?两种方法,都是在打断点的状态下,直接把鼠标指到函数上;或者在右边的全局变量里找可以找到。 在这里插入图片描述 定位到RongGuangFun.AjaxFun.GetAjaxNoValidate所在的JS文件,期盼已久的加密函数浮出水面。 在这里插入图片描述 在ajax请求之前打个断点,测试一下,果然,就是我们要的结果。 在这里插入图片描述 现在我们已经找到了加密函数,下一步自然是分析加密的方式了。在还未进入加密函数内部的地方打断点,进行测试。 在这里插入图片描述 点击“跳入函数中去”的按钮,跳到加密函数中。加密函数没有格式化比较难看,再点击格式化。得到我们最终想要的加密方式–AES。 在这里插入图片描述 将明文内容、IV、KEY、AES加密模式、字符集代入到在线AES进行测试,结果完全一致。至此,整个分析过程结束。 在这里插入图片描述 解密下试试,也没问题,得到明文。 在这里插入图片描述 结语: 个人见解: 1、前端使用加密是防不了暴力破解的,工作中经常遇到开发为了修复暴力破解的问题将用户名、密码加密了,其实是自欺欺人。前端无论是对称加密、非对称加密还是HASH甚至是自己开发的加密方式,理论上都是可以模拟的。 2、对称加密解决不了http的明文传输的问题,如上,拿到加密数据再分析前端的加密方式,就可以破解了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有