在sql注入中,每每會用到截取字符串的問題,例如不回顯的狀況下進行的注入,也成爲盲注,這種狀況下每每須要一個一個字符的去猜解,過程當中須要用到截取字符串。本文中主要列舉三個函數和該函數注入過程當中的一些用例。Ps;此處用mysql進行說明,其餘類型數據庫請自行檢測。mysql
三大法寶:mid(),substr(),left()sql
mid()函數數據庫
此函數爲截取字符串一部分。MID(column_name,start[,length])函數
參數spa |
描述字符串 |
column_namestring |
必需。要提取字符的字段。table |
startclass |
必需。規定開始位置(起始值是 1)。數據 |
length |
可選。要返回的字符數。若是省略,則 MID() 函數返回剩餘文本。 |
Eg: str="123456" mid(str,2,1) 結果爲2
Sql用例:
(1)MID(DATABASE(),1,1)>’a’,查看數據庫名第一位,MID(DATABASE(),2,1)查看數據庫名第二位,依次查看各位字符。
(2)MID((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx LIMIT 0,1),1,1)>’a’此處column_name參數能夠爲sql語句,可自行構造sql語句進行注入。
substr()函數
Substr()和substring()函數實現的功能是同樣的,均爲截取字符串。
string substring(string, start, length)
string substr(string, start, length)
參數描述同mid()函數,第一個參數爲要處理的字符串,start爲開始位置,length爲截取的長度。
Sql用例:
(1) substr(DATABASE(),1,1)>’a’,查看數據庫名第一位,substr(DATABASE(),2,1)查看數據庫名第二位,依次查看各位字符。
(2) substr((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx LIMIT 0,1),1,1)>’a’此處string參數能夠爲sql語句,可自行構造sql語句進行注入。
Left()函數
Left()獲得字符串左部指定個數的字符
Left ( string, n ) string爲要截取的字符串,n爲長度。
Sql用例:
(1) left(database(),1)>’a’,查看數據庫名第一位,left(database(),2)>’ab’,查看數據庫名前二位。
(2) 一樣的string能夠爲自行構造的sql語句。
同時也要介紹ORD()函數,此函數爲返回第一個字符的ASCII碼,常常與上面的函數進行組合使用。
例如ORD(MID(DATABASE(),1,1))>114 意爲檢測database()的第一位ASCII碼是否大於114,也便是‘r’