1. 程式人生 > >sqli-labs less 1 (基於錯誤的GET單引號字元型注入)

sqli-labs less 1 (基於錯誤的GET單引號字元型注入)

基礎知識:

常用url編碼:空格%20,單引號%27,雙引號%22,#號%23

mysql常用註釋符:#...  ,--空格...  ,/*...*/,--+(某些情況+可以代替空格,+瀏覽器會編碼成空格)

常用工具:火狐的hackbar

concat函式:連線一個或者多個字串,如

select concat('10');//10

select concat('11','22','33');//112233

concat_ws函式:表示concat with separator,即有分隔符的字串連線,如

select concat_ws(',','11','22','33');//11,22,33

select concat_ws('|','11','22','33');//11|22|33

select concat_ws('*','11','22',NULL);//11*22

sql注入基本步驟:

1、判斷注入型別(數字型、字元型等)

2、獲取資料庫使用者,版本,當前連線的資料庫等資訊(利用mysql內建函式user()、database()、version())

3、獲取表名、獲取列名、獲取欄位(資料)

sql注入型別判斷方法:

int整型:and 1=1 正常回顯 and 1=2 返回false(不報錯,但是頁面不返回資料)

string字元型:兩個都正常回顯,無論後面是什麼都不影響

less 1   GET - Error based - Single quotes - String(基於錯誤的GET單引號字元型注入)

首先在瀏覽器位址列里加上?id=1,可以正常查詢出資訊

輸入一個單引號可以發現報錯資訊回顯,說明存在sql注入

order by 猜列數,發現有3個欄位


接著使用union進行聯合查詢,會發現和上圖結果一樣,並沒有我們想要看到的東西

原因是查詢出來的結果很多,但這裡只返回第一個結果,這是limit 0,1語句限制的效果,而我們需要的結果在後面,所以我們只需讓前面的結果為錯,為空,我們需要的後面的東西就會顯示出來

讓前面報錯很簡單,可以利用-1,0,一些亂七八糟的東西都可以

上圖說明2,3兩個欄位是可以利用的

這樣一個欄位只能返回一行資訊,我們需要更簡便明瞭的方法,那就是在一個欄位中輸出多行資訊,我們可以利用下列語句:

concat_ws(char(32,58,32),user(),database(),version())

發現當前資料庫名為security,接下來從系統表中查詢表名

注意:

1、查詢只能在3不能在2,在2的話會把後面的語句帶入查詢中,會報錯(有什麼辦法可以在2查詢的話可以私信我,感謝)

2、security需要用單引號括起來,或者用十六進位制編碼

3、這裡只能返回一行資訊,要想查詢其他行,可以利用limit語句實現

然後一個個查詢,發現關鍵表users

接下來查詢該表的列數

發現有id,username,password

最後查詢欄位裡面的內容

發現使用者名稱,密碼

less 2 GET - Error based - Intiger based (基於錯誤的GET整型注入)

總體過程和less 1 基本相同(甚至還簡單一點,因為不需要閉合單引號)

單引號閉合後的字元型注入基本上可以看成整型注入

具體過程在此不重複說明,可參照less 1進行操作

less 3 GET - Error based - Single quotes with twist string (基於錯誤的GET單引號變形字元型注入)

先輸入一個單引號

根據報錯資訊,可以猜測出後臺sql查詢語句為:

select * from xxx where id=(‘1’)limit 0,1

然後構造payload:

?id=1')#                                     (#號有時需要進行url編碼,%23)

後面步驟同上

less 4 GET - Error based - Double Quotes - String (基於錯誤的GET雙引號字元型注入)

直接使用單引號發現沒有報錯,正常回顯

發現原來是使用雙引號的方法來避免sql注入

檢視原始碼

發現引數兩邊有雙引號

因為php中雙引號可以包含單引號,所以正常回顯

所以,繞過思路:閉合雙引號和左括號

後續步驟,同上。

less 5 GET - Double Injection - Single Quotes - String (雙注入GET單引號字元型注入)

先進行常規注入判斷,發現回顯都一樣,都是you are in ............

檢視原始碼

發現的確只有you are in.............,不過通過下面語句可以猜測是通過錯誤回顯來進行sql注入的

裡面講的很清楚,在此不多說,大家可以自行在資料庫中進行嘗試

直接給出實際測試的圖片

後面步驟同上

 less 6 GET - Double Injection - Double Quotes - String (雙注入GET雙引號字元型注入)

同上,只是把單引號變為雙引號,其他不變

less 7 GET - Dump into outfile - String (匯出檔案GET字元型注入)