sql注入之AJAX(SQL Injection (AJAX/JSON/jQuery))

sql注入之AJAX(SQL Injection (AJAX/JSON/jQuery))

    0x1   

网上搜下没有关于ajax的sql注入文章,这里简单写一下抛砖引玉。

原理自己百度,这里简单说下:

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行实时更新。

    0x2

我这里用一个漏洞示例程序bWAPP来演示,先看下正常访问的情况:

输入框输入a实时更新出查询结果,地址栏地址为http://192.168.1.102/bWAPP/sqli_10-1.php?search=a

重新载入这个url是没有任何查询结果的,因为没有经过页面中javascript的AJAX处理其实没有查询数据库,那么注入点自然不在这里

下面来寻找真正的注入点吧

查看网页源码,查询输入框的表单action会只想ajax的代码所在,找到ajax所在的javascript代码如下:

sql注入之AJAX(SQL Injection (AJAX/JSON/jQuery))_第1张图片

提取关键代码如下:

//输入框的表单name为title,此处获取并处理创建一个key:value键值对赋值给search变量,该键值对形式与GET和POST的data一样,例如title=a
var search = {title: $("#title").val()};
//getJSON函数请自行百度查阅
//1、sqli_10-2.php即把数据提交到此文件,也就是说其实ajax查询数据是这个文件在处理
//2、search是存储的键值对,这里提交。正常查询时候是GET方法,那么这里也是GET方法,处理后的GET其实是 
//3、第三个参数是查询成功后处理要调用的函数,这里是格式化了输出,我们忽略
$.getJSON("sqli_10-2.php", search, function(data){
//后面的代码是格式化处理查询结果的,我们不用关注
}

    0x3

理论完了,注入点就很明了了

但是直接地址栏提交http://192.168.1.102/bWAPP/sqli_10-2.php?title=a 是不行的

好像是这里要验证Referer是http://192.168.1.102/bWAPP/sqli_10-1.php?search=a

那我们用brupsuite抓包修改,这不多说大家都会。

sql注入之AJAX(SQL Injection (AJAX/JSON/jQuery))_第2张图片

加 ' 测试注入漏洞,下面看下返回页面,报数据库错误:

sql注入之AJAX(SQL Injection (AJAX/JSON/jQuery))_第3张图片

后面的注入就不说了,这里简单sqlmap演示下结果:

sql注入之AJAX(SQL Injection (AJAX/JSON/jQuery))_第4张图片

sql注入之AJAX(SQL Injection (AJAX/JSON/jQuery))_第5张图片


你可能感兴趣的:(Ajax,sql注入)