sql注入是當前針對資料庫安全進行外部攻擊的一種常見手段。現有主流應用大多基於b/s架構開發,sql注入的攻擊方式正是利用web層和通訊層的缺陷對資料庫進行外部惡意攻擊。將sql命令巧妙的插入通訊的互動過程中,如:web表單的遞交、網域名稱輸入、頁面請求等。通過硬性植入的查詢語句攻擊資料庫,以期利用伺服器自身缺陷執行惡意的sql命令,從而入侵資料庫。因此通過sql注入攻擊方式產生的安全事件也在增多,對系統的危害性極大。
通過sql注入可以遠端獲取並利用應用裡的資料,並且獲取未經hashed加密的使用者秘鑰以及信用卡資訊,甚至有以管理員身份登陸進這些應用的可能。下面通過一組常見的sql注入攻擊方式,進行說明:
首先,我們假設資料庫中有job表,模擬進行攻擊,查詢表中資料量。
然後,應用中呼叫惡意的攻擊性url向job表植入sql語句:
那麼,攻擊時等效的sql語句如下:
select job_id, job_desc, min_lvl, max_lvl如果sql注入的假設錯誤,web頁面如圖一:fromjobs
where job_id=』1』or 1=(select count(*) from jobs) –『
圖一如果sql注入的假設成功,web介面如圖二:
圖二攻擊說明:如果sql注入的假設成功,即證明了資料庫中該表的表名是jobs,從而我們也就可以對該錶進行增刪改操作,從而對資料庫安全造成極其嚴重的危害。
sql注入的8種攻擊行為
安全界有句名言「未知攻,焉知防」,想要預防sql注入,需要進一步剖析sql注入都有哪些常見攻擊方式。
猜測資料庫名,備份資料庫
猜解欄位名稱
遍歷系統的目錄結構,分析結構並發現web虛擬目錄,植入木馬
查詢當前使用者的資料庫許可權
設定新的資料庫帳戶提權得到資料庫管理員賬戶許可權
利用儲存過程獲取作業系統管理員賬戶
客戶端指令碼攻擊:通過正常的輸入提交方式將惡意指令碼提交到資料庫中,當其他使用者瀏覽此內容時就會受到惡意指令碼的攻擊。
客戶端指令碼攻擊:通過sql注入方式將惡意指令碼提交到資料庫中,直接使用sql語法update資料庫,並將注入sql經過「hex編碼」,然後通過exec執行「動態」sql的特性執行指令碼。
綜上可知,sql注入對資料庫的攻擊方式日趨繁多,危害也日益嚴重,因此如何做好sql注入的防護工作也就變成考量資料庫安全產品的一道標桿。
sql注入的5種防護方式
常規的sql注入防護方式,包括以下幾個方面
通過正則表達校驗使用者輸入
通過引數化儲存過程進行資料查詢訪問
引數化sql語句
為資料庫新增新架構
利用linq to sql查詢
針對以上sql 5種注入防護方式,可以在一定程度上避免sql注入對資料庫所帶來的入侵危害,但這些操作同步會使資料庫操作複雜化,在一定程度上提高了企業運維成本,同時降低資料庫操作效能。因此,一種專門針對資料庫防護類產品——資料庫防火牆誕生,可以針對sql注入攻擊行為進行主動有效的防護。
資料庫防火牆如何防禦sql注入
資料庫防火牆作為專業的資料庫安全防護工具,而針對sql注入等資料庫攻擊行為的防護能力如何,是衡量一款資料庫防火牆產品優略的關鍵要素。
目前國內資料庫安全的專業廠商安華金和,自主研發推出資料庫防火牆(dbfirewall)產品基於對資料庫協議的精準解析,對sql注入行為的分析更加精確,極大程度上避免了對sql注入攻擊行為的漏防與誤防。
sql注入的概念來自於web系統,資料庫防火牆在防止sql注入時,針對已經形成且即將到達資料庫的完整sql,監測是否有非法的操作,並有效阻止針對於資料庫的非法入侵行為。
圖三:dbfirewallsql注入攻擊防護引擎
dbfirewall對於sql注入行為的識別,可以分為以下三種:
通過傳送意外資料來觸發異常,利用獲取資料的get操作,變更資訊的post操作,結合資料庫異常資訊,從而判斷注入是否發生。
例如:
www.abc/show.php?category=bikes如果以上兩句的執行結果相同,則可能存在sql注入。www.abc/show.php?category=bik』』es
利用應用程式試探。如果應用程式沒有對資料庫伺服器返回的錯誤資訊進行處理,那麼資料庫的錯誤資訊將直接反饋到前台,通過這些錯誤資訊,不但可以識別出sql注入的漏洞所在,甚至可能逐步探測出資料庫表資訊。
根據應用響應時間判斷
通過上述幾種方式可以初步判斷sql注入行為的產生,但是為了提高準確性,安華金和資料庫防火牆具有獨特的設計流程,通過構建一條有效的sql語句,幫助使用者確認sql注入行為:
1) sql語句中區分數值型別和字串型別
2) 驗證注入sql**時,是否是通過注釋剩下的查詢來成功結束該語句。
3) 當web應用程式未顯示任何錯誤時,資料庫注入時間延遲。
可以檢測伺服器響應來確定注入
安華金和資料庫防火牆基於對sql注入的各種攻擊行為,進行有針對性的資料庫防護,從而形成更加完備的防護體系。下面列舉幾種常見的sql注入攻擊行為做分析說明,並具體描述一下dbfirewall是如何進行防護的。
1)sql注入識別資料庫
攻擊方法一:通過獲取資料庫異常資訊,資料庫版本資訊的方式進行sql注入攻擊
防禦方法:利用dbfw的配置錯誤替換規則,對常見的錯誤資訊進行替換
攻擊方法二:獲取版本資訊
select banner fromv$version或防控方法:採用風險評估中的系統表控制規則,或者通過訪問控制許可權中,對不同的使用者控制對系統表的訪問許可權。select banner fromv$version where rownum=1
2)利用union語句提取資料
如果應用返回第乙個(原始)查詢得到的資料,那麼通過在第乙個查詢後面注入乙個union運算子,並新增另外藝哥任意查詢,便可以讀取到資料庫使用者訪問過的任何一張表。
攻擊方法:多次使用各種資料型別替換null,直到系統不再報錯為止,例如
selectusername,passwordfrom admin union select 『test』,』test』 from dual如果測試成功,可以替換為:
selectusername,passwordfrom admin union select user, 』test』 from dual獲得系統資訊
防控方法:開啟dbfw的風險評估union評測,以及系統表的評測
3)利用條件語句
攻擊方法一:基於時間
對於oracle來說,可以使用sleep,或者utl_http、httpuritype向乙個死的ip位址傳送乙個http請求來實現相同的效果。如果指定乙個不存在監聽者的ip位址,那麼下列查詢將一直等待連線知道超時:
防控方法:開啟風險評估裡的暴力破解函式。
攻擊方法二:基於字串轉換
對於傳入引數是字串的,可以用char函式轉化其中乙個字元,根基返回的結果可以實現sql注入。
例如:
select * from productswhere brand=』ac』+char(108+(case when system_user=』sa』 then else 0 end))+』e』防控方法:將char作為暴力破解函式。
4)提權行為
在oracle中,通過web應用的sql注入來提公升許可權非常困難。大多數許可權提公升方法均需要pl/sql注入,而這種注入很少見。如果找到一種pl/sql注入漏洞,可以通過注入pl/sql**來提公升許可權或在資料庫伺服器上啟動操作。
不需要pl/sql注入的例子是:使用在oracle的mod_plsql元件中發現的乙個漏洞。
防控方法:使用訪問控制或者風險評估,加入使用者許可權控制或高危操作
除了上述幾種常見的sql注入行為之外,dbfw內建可防護的sql注入攻擊行為還包括:竊取hash口令、利用作業系統攻擊等。並且可以根據:風險級別、告警通知、sql命令、命令特徵、風險函式、表示式、型別、操作人、操作等幾項元素自定義sql注入防護規則。
資料庫防火牆 資料庫防火牆的阻斷方式
01 行為阻斷 行為阻斷是資料庫防火牆的自然工作方式。當檢測到入侵行為的時候,阻斷該行為的操作。行為阻斷依據響應偏好的不同,可以工作在不同模式之下。模式一 錯誤響應模式 阻斷操作之後,返回預先定義的錯誤資訊,使應用程式可以構造合理的錯誤響應。錯誤響應模式的好處在於可以讓應用程式檢測到入侵發生,並響應...
繞過智創防火牆,SQL注入phpweb
今天 xiaoliumang發來乙個phpweb的站,然後就一起看了下。phpweb有注入漏洞的,之前說過。先加些語句看了下,可見有注入,而且可以報錯。雖然sql語句中我們提交的單引號變成了 27,但不要緊這是瀏覽器的事,待會用 直接提交就行了。然後直接上利用語句 116 and select 1 ...
資料庫防火牆 資料庫防火牆商業化的前提條件
資料庫防火牆和一般的傳統資料庫安全裝置不同,它部署在應用伺服器和資料庫伺服器之間。業務系統巨大的流量將穿越資料庫防火牆,資料庫防火牆任何的風吹草動都會影響業務系統的正常執行。資料庫防火牆投放市場之前,不管資料庫防火牆功能的多寡,都必須解決兩個基本問題 效能和可靠性。效能主要考慮兩方面的影響 延遲和併...