隨着國家安全法的出臺,網絡安全迎來發展的新時期,愈來愈多企業或政府單位開始重視網絡安全。不少網站陸陸續續告別裸奔時代,開始部署web應用防火牆(WAF)以應對網絡攻擊。由此,相關網站的安全性很大程度上取決於WAF的防禦能力,WAF攻防研究已成爲安全從業人員的必修課之一。php
大多數WAF以規則匹配爲基礎進行安全防禦,少數WAF帶有自學習能力,規則維護成爲WAF的核心。近年來,基於語義識別的WAF陸續出現,對其防禦能力的研究也成爲你們關心的熱點之一。本文以MySQL爲研究對象,總結相關WAF注入繞過技術,經過實戰演練讓你們瞭解各大WAF的相關特性,最後從攻防角度對WAF安全進行總結。web
對已知的WAF相關繞過技術,總結以下,網上已有相關技巧的講解,這裏就不一一演示,不明白的能夠本身查詢相關資料:算法
在實際攻擊場景中,單一的繞過技巧每每無效,須要咱們綜合利用各類繞過技術進行組合,結合各自WAF特性不斷進行推理,才能真正實現繞過。sql
Bypass WAF的第一步是識別注入點,咱們拿到一個URL,第一步判斷參數是否有注入,而後再進行後續的繞過。簡單的and 1=1 and 1=2判斷確定會被WAF攔截,咱們需轉變思路進行繞過,通常WAF爲了平衡風險和業務的關係不會對下面數字型探測方式進行攔截,不然會產生大量誤報影響正常業務運行。安全
本地測試環境:如若 and也會攔截,能夠直接在參數上進行相似判斷操做,如id=1*0 、id=1*2,除了以上方法,還有不少其它衍生出的識別繞過方法,以{「op}爲例做演示,其它的方法你們能夠按照這種思路自行發揮:微信
安全狗:網絡
騰訊雲:學習
阿里雲:測試
當咱們已確認注入點後,下一步的目標是徹底Bypass WAF出任意數據,如下以安全狗、modsecurity、百度雲加速、 阿里雲盾、長亭雷池截止目前最新的版本爲例,這裏只提供繞過的思路,即如何利用已知技巧進行組合推理來繞過相關WAF防禦,出數據具體過程這裏就不詳解,你們感興趣的能夠手動嘗試。
在對安全狗的繞過測試中發現,只需利用一個*/閉合多個/*!便可繞過,簡單粗暴。
http://192.168.20.123:81/user.php?id=-11/*!union/*!select/*!1,(select/*!password/*!from/*!test.user limit 0,1),3*/
本地環境搭建modsecurity模塊進行安全防禦,利用{「op}、/*!50000*/組合進行繞過。
http://192.168.20.123/user.php?id=1 and{`version`length((select/*!50000schema_name*/from/*!50000information_schema.schemata*/limit 0,1))>0}
利用–+%0a、@自定義變量、{a key}組合進行繞過。
通過大量測試後,發現雷池在處理MySQL註釋符/*! */識別時存在缺陷,只需把攻擊語句放在註釋符中便可繞過。
當咱們挖掘出繞過相關WAF進行SQL注入的技巧後,下一步就是編寫腳本實現工具自動化注入。以sqlmap爲例,咱們編寫tamper腳本實現注入自動化。
對已知或未知的安全問題進行防護是WAF功能的核心,漏報及誤報是衡量一個WAF產品好壞的重要指標,具體落實到規則的及時更新、bypass新技巧的及時響應。另外,還應綜合利用攔截日誌數據進行相關算法分析,不斷提升WAF的防禦能力。總結來講,打造一款上乘的WAF,非一朝一日之功,需長期的技術儲備、產品不斷地更新迭代、算法地持續優化,才能把好防護這個重要的關口。同時,不斷探索新的高效防禦方法,才能在攻防戰中立於不敗之地。
從攻擊者角度來看,繞過WAF的基本方法其實很少,如何把這些已知方法融合起來,並結合各自WAF自己的防禦特性,不斷進行推理,成爲突破WAF防禦的關鍵。固然,自動化Fuzz纔是WAF Bypass新技術產生的正道。另外,從我的的注入Bypass測試過程看,繞過基於語義識別的WAF比繞過基於規則識別的WAF可貴多,值得咱們挑戰。
從WAF產品角度來看,衡量一個WAF好壞的標準是漏報率和誤報率的高低,但這些指標創建在以WAF不影響正常業務爲前提。測試中我發現,基於規則的WAF對業務的耦合度每每較低,不論是騰訊雲WAF仍是阿里雲盾,對用戶的輸入都較爲敏感,如參數中輸入註釋符請求就會被攔截。而基於語義的WAF的和業務的耦合度較高,誤報率降低明顯。從測試結果來看,基於語義識別的WAF相較傳統WAF來講有較大優點,值得咱們學習和借鑑。
從安全管理者角度來說,從以上測試過程能夠看出,不論是基於規則的WAF仍是基於語義識別的WAF,都存在被都徹底繞過的可能。WAF的主要做用是提升攻擊門檻,但不能消滅攻擊入侵事件,解決安全問題的根本途徑還得從代碼層面着手進行修復。