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雙引號字元型注入)
同上,只是把單引號變為雙引號,其他不變