1. 程式人生 > >31. 注入篇——SQL注入擷取字串常用函式

31. 注入篇——SQL注入擷取字串常用函式

 在sql注入中,往往會用到擷取字串的問題,例如不回顯的情況下進行的注入,也成為盲注,這種情況下往往需要一個一個字元的去猜解,過程中需要用到擷取字串。本文中主要列舉三個函式和該函式注入過程中的一些用例。Ps;此處用mysql進行說明,其他型別資料庫請自行檢測。

三大法寶:mid(),substr(),left()

(1)mid()函式

此函式為擷取字串一部分。MID(column_name,start[,length])

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語句進行注入。

(2)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語句進行注入。

(3)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