一、WAF阻攔SQL注入的原理
1、WAF的工作原理
WAF是Web應用程序防火牆,是一種針對Web應用程序的安全設備,常用於攔截SQL注入、跨站點腳本攻擊等攻擊方式。WAF的工作原理是對Web應用程序的HTTP流量進行監控,通過檢測HTTP請求和響應的內容,來阻止惡意攻擊。
2、WAF防護機制
WAF的防護機制一般包括了黑白名單、正則表達式過濾、SQL語句識別、請求頻率限制等多種方式,其中SQL語句注入防護是WAF重點防護的方向之一。WAF的SQL注入防護主要採用的是攔截注入的關鍵字(如SELECT、UNION、OR、–等)和特殊字符(如’、”等)來實現對SQL注入的攔截。
二、SQLMap繞過WAF的方法
1、關閉WAF的對注入檢測
關閉WAF的對注入檢測,即可使WAF失去攔截SQL注入的功能。在使用SQLMap進行測試時,可以通過–tamper選項選擇攔截SQL注入的WAF繞過腳本,具體用法如下所示:
sqlmap -u "http://example.com/vuln.php?id=1" --tamper=space2comment
其中,space2comment是一款可將空格轉化為SQL注釋符(–)的腳本,在攔截SQL注入中非常實用。
2、SQLMap自帶的多種模式
SQLMap中為我們提供了多種模式,其中有幾種可以針對WAF的檢測進行優化:
(1) 探測模式:–technique=T
該模式可以檢測WAF的注入防護是否起作用,SQLMap會發送一系列分別帶注入關鍵字、特殊字符,以及常用SQL指令的注入測試語句,從而準確地判斷出WAF的攔截效果。
sqlmap -u "http://example.com/vuln.php?id=1" --technique=T
(2) 基礎版模式:–level=1
該模式可以僅對注入點進行最基本的檢測,對WAF的識別能力的壓力較小。
sqlmap -u "http://example.com/vuln.php?id=1" --level=1
(3) 普通模式:–level=2
該模式會對注入點進行深度掃描,使WAF加強識別注入的能力。
sqlmap -u "http://example.com/vuln.php?id=1" --level=2
(4) 極限模式:–level=5
該模式會對注入點進行多次掃描,增加WAF的防禦難度,往往需要長時間的掃描等待。
sqlmap -u "http://example.com/vuln.php?id=1" --level=5
3、手動改進Payload
通過手動對Payload進行改進,使其不被WAF所識別。
(1) 把空格改成其他字符,如0x09(製表符)、0xa0(換行符)、–等;
(2) 把關鍵字拆分,如將SELECT拆成SEL+ECT,而後使用分別使用注釋符號(/!/)來連接;
(3) 把字符串拆分,如將字符串”改為’,’+’,’等符號來連接;
(4) 將大小寫摻雜,如將UNION改為Union、uNion、UnIoN等等。
4、使用Tamper腳本來繞過WAF
Tamper腳本是一種預定義的腳本,可用於修改SQL語句,以模糊WAF的SQL注入檢測。在tamper倉庫中,有許多能夠繞過WAF的腳本,例如:apostrophemask.py、between.py、chardoubleencode.py等。
sqlmap -u "http://example.com/vuln.php?id=1" --tamper=apostrophemask.py
三、綜合使用
在實際的測試中,可能存在多個不同的WAF,其檢測能力也不盡相同。因此,綜合使用上述方法,才能對不同的WAF進行充分的繞過測試。
例如,對於WAF的正確識別和繞過,可以按照如下步驟進行:
(1) 執行–technique=T進行模式檢測,確認WAF的安全等級和攔截方式;
(2) 執行–level=2對注入點進行深度掃描,利用SQLMap自帶的繞過技巧;
(3) 執行–tamper選項,使用預定義的Tamper腳本進行繞過WAF的檢測。
sqlmap -u "http://example.com/vuln.php?id=1" --technique=T --level=2 --tamper=space2comment
四、總結
繞過WAF不僅僅是一個技術問題,同時也是一項安全問題。我們在應對現實工作中的SQL注入測試時,應該綜合考慮各種情況,採取多種方法進行測試,獲得儘可能準確的結果。此外,我們還應常學習新的SQL注入繞過技術,並保持對WAF的最新了解。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/244224.html