sql注入之AJAX(SQL Injection (AJAX/JSON/jQuery))
javascript
0x1
php
网上搜下没有关于ajax的sql注入文章,这里简单写一下抛砖引玉。java
原理本身百度,这里简单说下:ajax
经过在后台与服务器进行少许数据交换,AJAX 可使网页实现异步更新。这意味着能够在不从新加载整个网页的状况下,对网页的某部分进行实时更新。sql
0x2数据库
我这里用一个漏洞示例程序bWAPP来演示,先看下正常访问的状况:服务器
输入框输入a实时更新出查询结果,地址栏地址为http://192.168.1.102/bWAPP/sqli_10-1.php?search=a异步
从新载入这个url是没有任何查询结果的,由于没有通过页面中javascript的AJAX处理其实没有查询数据库,那么注入点天然不在这里函数
下面来寻找真正的注入点吧测试
查看网页源码,查询输入框的表单action会只想ajax的代码所在,找到ajax所在的javascript代码以下:
提取关键代码以下:
//输入框的表单name为title,此处获取并处理建立一个key:value键值对赋值给search变量,该键值对形式与GET和POST的data同样,例如title=a var search = {title: $("#title").val()}; //getJSON函数请自行百度查阅 //一、sqli_10-2.php即把数据提交到此文件,也就是说其实ajax查询数据是这个文件在处理 //二、search是存储的键值对,这里提交。正常查询时候是GET方法,那么这里也是GET方法,处理后的GET实际上是 //三、第三个参数是查询成功后处理要调用的函数,这里是格式化了输出,咱们忽略 $.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抓包修改,这很少说你们都会。
加 ' 测试注入漏洞,下面看下返回页面,报数据库错误:
后面的注入就不说了,这里简单sqlmap演示下结果: