在開始接觸滲透測試開始,最初玩的最多的就是Sql注入,注入神器阿D、明小子、穿山甲等一切工具風靡至今。當初都是以日站為樂趣,從安全法實施后在沒有任何授權的情況下,要想練手只能本地環境進行練手,對於sql注入的練習場網上有大把的靶場,我個人比較喜歡sqli-labs這個靶場,關卡有幾十個,每一關都有不同的感覺。寫這篇文章是個人再練習注入的時候自己總結出來的一部分經驗,百度上面也能搜的到相關類似的過關技巧,至於為什么要寫這個,這相當於對自己經驗的一個總結吧!關於搭建請自行github進行查看,這里我就有不多說了,地址:https://github.com/Audi-1/sqli-labs
廢話不在多說 let's go! 開始挑戰第一關(Error Based- String)
訪問我們的地址http://localhost:81/sqli-labs-master/Less-1/index.php,然后構造下注入環境,根據頁面提示需要加入一個數字參數,直接加入?id=數字或者其他都可以。
這里為了方便查看自己輸入的sql語句是帶到數據庫中是怎么樣的,可以在代碼中加入 echo "$sql<br>";
老規矩,輸入and 1=1 來進行判斷,顯示正常
繼續輸入and 1=2來判斷,瓦特,既然沒有任何的反應
既然這樣無效,直接輸入單引號看是否會提示報錯
很明顯出現了錯誤,這里我們將錯誤提示拿出來進行分析,從下圖中很容易就看出了門道
我們來試着構造下它的sql語句,由於mysql會將你輸入的內容帶入數據庫后強制轉換成字符串,所以這樣一來我們就可以采用閉合單引號的方式進行注入了
但后面還有個limit 0,1, 直接再采用注釋符將后面的內容給干掉,常用的單行注釋符有(# , --+),個人比較喜歡#,來吧,開干吧!
輸入 ‘ and ‘1’ =‘1閉合后,回顯正確
在輸入 ‘ and ‘1’ =‘2返回錯誤
前面已經測試了存在注入,現在就開始使用 order by 猜解字段數了,這里我就不一一去試了,正確是3個字段數
使用union select進行聯合查詢,再加入-號或者and 1=2讓其報錯
進入下面的操作前,先介紹幾個函數:
(1)version():查看數據庫版本
(2)user():查看當前用戶
(3)database():查看使用的數據庫
(4) limit :limit
子句來分批獲取所有數據
(5)group_concat():
一次性獲取數據庫信息。
查看數據庫,版本,當前用戶
可以看出數據庫版本是5.0,直接爆出所有表名,數據庫名轉成16進制,這里可以使用小葵轉換工具,或者使用火狐的hackbar工具直接轉換
接下來獲取字段名
獲取數據,加入0x5c是為了便於查看
好了,第一關比較簡單,有些肯定會有疑惑,為什么要去看information_schema庫,tables,table_schema,table_name都是這么來的, 要學習sql注入,你必須先了解數據的結構,建議使用數據庫管理工具一查便知,我這里就不多做解釋。。。