当前位置:首页 > 核心成员 2020年06月14日
安恒玄武盾也有拦截不了的漏洞--逻辑漏洞

安恒玄武盾也有拦截不了的漏洞--逻辑漏洞

因为大部分的扫描器是无法直接扫描出逻辑漏洞,所以玄武盾自然也就无法拦截逻辑漏洞


捕获.PNG




逻辑漏洞通常需要对JS框架进行分析,最终分析出逻辑的走向,才能判断如何发掘逻辑漏洞

上图为一个短信发送接口

这时候可以利用的逻辑可以分为很多种

一种是直接正常请求去获取用户参数

一种是输入错误的验证码,进行逻辑绕过

一种是通过逻辑触发XSS

还有一种是非正常的请求获取用户参数

思路可以是很多种,前提是利用的危害是什么


这时候利用response修改的包,玄武盾是根本无法拦截的



      if (wait == 0) {            obj.attr("disabled", false);                        obj.val("重新发送");                   } else {            obj.attr("disabled", true);            obj.val("重新发送(" + wait + ")");            wait--;            setTimeout(function() {                time(obj,wait)            },            1000)        }    }    function sendsn(obj,type,tid) {     time(obj,30);     var scget = new GetData(context+"/PassWordAction.SendMessage.act?type="+type+"&tid="+tid);  scget.OK(function(m){   if(m.flag != "00000"){    if(m.flag=="-1" && type==1){



这个一段短信判断的代码


从这里我们可以明确的发现,waitflag参数 分别控制重新发送和发送

但是我们在源代码,找了很久也没有发现新密码的验证,这时候,思路是回到第一步



//定义请求成功事件  get.OK(function(u){   if(u.code == '0000'){    window.location=u.redirect;   } else {    if(u.code == '9001') {     $("#tip1").text("帐号不存在!");    } else if(u.code == '9002') {     $("#tip2").text("验证码错误!");    } else if(u.code == '9003') {     $("#tip2").text("验证码已过期!");    } else if(u.code == '9004') {     $("#tip1").text("帐号不能为空!");    }    $("#verify").attr("src",context+"/VerifyServlet?id=accountver_verify&"+Math.random());   }     

 


这里只是简单定义了code回显的状态,实际上可以看到0000就为成功

反之就会出错,接着往下看

$("#verify").attr("src",context+"/VerifyServlet?id=accountver_verify&"+Math.random());

这里定义了一个verify取验证的随机方法

 

仔细分析是需要先触发发送事件

也就是这里

ekt/PassWordAction.SendMessage.act?type=1&tid=undefined&_=1591724167419

这段参数必须触发一次发送!


因为json调用,所以需要发送,获得一个get的json方法,接着才是

 

 接着才是POST的 json方法去修改

 


捕获111.PNG



捕获890.PNG



到了这一步也就意味着逻辑绕过成功了



精准覆盖各类 Web 应用攻

精准覆盖各类 Web 应用攻击