在盲注的情況下,往往需要一個一個字符的去猜解,即過程中需要截取字符串
在這里整理了一下一些常用函數
由於現階段學習不夠深入,整理分類不清楚具體,不過博主會慢慢進行完善
user() 查詢當前數據庫用戶
version() 查詢當前數據庫版本
database() 查詢當前頁面所連接的數據庫名稱
@@Version_compile_os 查詢服務器的系統版本
mid()函數
此函數為截取字符串一部分。mid(column_name,start,[length])
參數 |
描述 |
column_name |
必需。要提取字符的字段。 |
start |
必需。規定開始位置(起始值是 1)。 |
length |
可選。要返回的字符數。如果省略,則 MID() 函數返回剩余文本。 |
例如:str="123456" 使用 mid(str,2,1) 語句 意為 從str 的第二個字符開始,截取長度為1 ,所以結果為2
mid(database(),1,1)>’a’,查看數據庫名第一位是否比a大(這里依次替換a 直至查出最終字符是哪一個)
mid(database(),2,1),查看數據庫名第二位
substr()函數
Substr()和substring()函數實現的功能是一樣的,均為截取字符串。
string substring(column_name, start, length)
string substr(column_name, start, length)
參數描述同mid()函數,第一個參數為要處理的字符串,start為開始位置,length為截取的長度。
意與mid函數大相徑庭
substr(database(),1,1)>’a’,查看數據庫名第一位是否比a大(這里依次替換a 直至查出最終字符是哪一個)
substr(database(),2,1),查看數據庫名第二位
left()函數
left()得到字符串左部指定個數的字符
left ( string, n )
參數 |
描述 |
string |
必需。要提取字符的字段。 |
n |
必需。提取長度。 |
例:
(1) left(database(),1)>’a’,查看數據庫名第一位,left(database(),2)>’ab’,查看數據庫名前二位。
(2) string部分可以為自行構造的sql語句。
(3)正確則返回1,錯誤則返回0。
like()函數
like后面能進行模糊匹配,關鍵字內容為
% => 匹配任意個字符串
_ => 匹配一個字符
但是存在前提,被匹配的字符可以是select查詢語句,可以是該表內的字段,可以是返回為字符串的函數比如database()
regexp()函數
在這里轉載一個文章,讓自己對於regxp函數理解了很多,也比較詳細,大家也可以去看看https://www.cnblogs.com/lcamry/articles/5717442.html
其實在某種程度上regexp和like的效果差不多,但是由於它支持正則表達式,所以有一些比較難搞懂。
例如:
select user() regexp ‘r’ user()的結果是root,regexp為匹配root的正則表達式
上例中就是把查詢到的user用戶也就是root和r從左至右進行比較,相同是1,不同是0.
ascii()函數/ord()函數
將某個字符串轉化為ascii值
sleep()函數
網頁延遲n秒后,輸出結果;
if()函數
條件判斷函數
if(a,b,c):if判斷句,a為條件,b、c為執行語句;如果a為真就執行b,a為假就執行c;
length()函數
length(column_name)
常用length(database()),即返回當前數據庫名長度;
concat()函數
將多個字符串連接成一個字符串,返回結果為連接參數產生的字符串
concat(str1, str2,...) 返回結果為連接參數產生的字符串,如果有任何一個參數為null,則返回值為null。
floor()函數原本為向下取整,其中rand()函數為隨機數生成,不能於order by共用,數據記錄必須有兩條以上。
mysql在遇到 select count(*) from ... group by x這語句的時候會先建立一個虛表,然后開始查詢數據,取數據庫數據,然后查看虛擬表存在不存在,不存在則插入新記錄,存在則count(*)字段直接加1,x是sql中暫時成為查詢語句的虛擬表的字段名。
and的后面加了跨度很大的括號:優先后面的注入語句執行,后面的注入語句被優先執行,本身就計算出錯然后就會直接報錯,那么就沒有前面的select語句的什么事兒了。我們可以簡單的理解為語句短路。
有問題的話歡迎大家指出~