2.3 典型的 SQL 注入攻擊的正則表達式
/\w*((\%27)|(\’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix
解釋:
\w* - 零個或多個字符或者下劃線。
(\%27)|\’ - 單引號或它的hex等值。
(\%6 F)|o|(\%4 F))((\%72)|r|-(\%52) -‘or’的大小寫以及它的hex等值。
union’SQL 查詢在SQL注入各種數據庫中攻擊中同樣是很常見的。如果前面的正則表達式僅僅檢測單引號或則其他的SQL meta characters ,會造成很多的錯誤存在。你應該進一步修改查詢,檢測單引號和關鍵字‘union’。這同樣可以進一步擴展其他的SQL關鍵字,像’select’, ’insert’, ’update’, ’delete’, 等等。
2.4 檢測SQL注入,UNION查詢關鍵字的正則表達式
/((\%27)|(\’))union/ix
(\%27)|(\’) - 單引號和它的hex等值
union - union關鍵字
可以同樣為其他SQL查詢定制表達式,如 >select, insert, update, delete, drop, 等等.
如果,到這個階段,攻擊者已經發現web應用程序存在SQL注入漏洞,他將嘗試利用它。如果他認識到後端服務器式MS sql server,他一般會嘗試運行一些危險的儲存和擴展儲存過程。這些過程一般以‘sp’或‘xp’字母開頭。典型的,他可能嘗試運行 ‘xp_cmdshell’擴展儲存過程(通過SQL Server執行Windows 命令)。SQL服務器的SA權限有執行這些命令的權限。同樣他們可以通過xp_regread, xp_regwrite等儲存過程修改注冊表。
2.5 檢測MS SQL Server SQL注入攻擊的正則表達式
/exec(\s|\+)+(s|x)p\w+/ix
解釋:
exec - 請求執行儲存或擴展儲存過程的關鍵字
(\s|\+)+ - 一個或多個的空白或它們的http等值編碼
(s|x) p- ‘sp’或‘xp’字母用來辨認儲存或擴展儲存過程
\w+ - 一個或多個字符或下劃線來匹配過程的名稱
3. 跨站腳本(CSS)的正則表達式
當發動CSS攻擊或檢測一個網站漏洞的時候, 攻擊者可能首先使簡單的HTML標簽如<b>(粗體),<i>(斜體)或<u>(下劃線),或者他可能嘗試簡單的 script標簽如<script>alert("OK")</script>. 因為大多數出版物和網絡傳播的檢測網站是否有css漏洞都拿這個作為例子。這些嘗試都可以很簡單的被檢測出來。 然而,高明點的攻擊者可能用它的hex值替換整個字符串。這樣<script>標簽會以%3C%73%63%72%69%70%74%3E出 現。 另一方面,攻擊者可能使用web代理服務器像Achilles會自動轉換一些特殊字符如<換成%3C、>換成%3E.這樣攻擊發生時,URL 中通常以hex等值代替角括號。
下列正則表達式將檢測任何文本中包含的html的<、>。它將捉住試圖使用< b>、<u>、或<script>。這正則表達式應該忽略大小寫。我們需要同時檢測角括號和它的hex等值(% 3C|<)。檢測hex進制轉化的整個字符串,我們必須檢測用戶輸入的數字和%號,即使用[a-z0-9%] 。這可能會導致一些錯誤出現,不是大部分會檢測到真實攻擊的。
3.1 一般 CSS 攻擊的正則表達式
/((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/ix
解釋:
((\%3C)|<) -檢查<和它hex等值
((\%2F)|\/)*-結束標簽/或它的 hex等值
[a-z0-9\%]+ -檢查標簽裡的字母或它hex等值
((\%3E)|>) -檢查>或它的hex等值
Snort 規則:
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"NII Cross-site scripting attempt"; flow:to_server,established; pcre:"/((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/i"; classtype:Web-application-attack; sid:9000; rev:5;)
跨站腳本同樣可以使用<img src=>技術。現行默認的snort規則可以被輕易避開。
3.2章節提供了防止這種技術的方法。
3.2 "<img src" CSS 攻擊正則表達式
/((\%3C)|<)((\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47))[^\n]+((\%3E)|>)/I
解釋:
(\%3 C)|<) -<或它的hex等值
(\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47) -’img’字母或它的大小寫hex等值的變化組合
[^\n]+ -除了換行符以外的任何跟隨<img的字符
(\%3E)|>) ->或它的hex等值
3.3 CSS 攻擊的極端的正則表達式
/((\%3C)|<)[^\n]+((\%3E)|>)/I
解釋:
這個規則簡單尋找<+除換行符外的任何字符+>。由於你的Web服務器和web應用程序的構架,這個規則可能產生一些錯誤。但它能保證捉住任何CCS或者類似CSS的攻擊。
總結:
在 這篇文章中,我們提出了不同種類的正則表達式規則來檢測SQL注入和跨站腳本攻擊。有些規則簡單而極端,一個潛在的攻擊都將提高警惕。但這些極端的規則可 能導致一些主動的錯誤。考慮到這點,我們修改了這些簡單的規則,利用了另外的樣式,他們可以檢查的更准確些。在這些網絡應用成的攻擊檢測中,我們推薦將這 些作為調試你IDS或日志分析方法的起點。再經過幾次修改後,在你對正常網交易部分的非惡意應答進行評估以後,你應該可以准備的檢測那些攻擊了。
參考
1. SQL Injection
http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
2. Cross Site Scripting FAQ http://www.cgisecurity.com/articles/xss-
faq.shtml
3. The Snort IDS http://www.snort.org
4. Perl-compatible regular expressions (pcre) http://www.pcre.org
5. Web application proxy, Achilles http://achilles.mavensecurity.com
3. Advanced SQL Injection
http://www.nextgenss.com/papers/advanced_sql_injection.pdf
7. Secure Programming HOWTO, David Wheeler www.dwheeler.com
8. Threats and Countermeasures, MSDN, Microsoft
關鍵詞: