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演示下結果: