当 你为SQL注入攻击选择正则表示式的时候,重点要记住攻击者可以通过提交表单进行SQL注入,也可以通过Cookie区域。你的输入检测逻辑应该考虑用户 组织的各类型输入(比如表单或Cookie信息)。并且如果你发现许多警告来自一个规则,请留意单引号或者是分号,也许些字符是你的Web应用程序创造的 合法的在CookieS中的输入。因此, 您需要根据你的特殊的WEB应用程序评估每个规则。
/(\%27)|(\’)|(\-\-)|(\%23)|(#)/ix
我 们首先检查单引号等值的hex,单引号本身或者双重扩折号。这些是MS SQL Server或Oracle的字符, 表示后边的为评论, 随后的都将被忽略。 另外,如果你使用MySQL,你需要留意 ’#’和它等值的hex的出现。注意我们不需要检查双重破折号等值的hex, 因为这不是HTML meta-character, 浏览器不会进行编码。 并且, 如果攻击者设法手工修改双重破折号为它的hex值%2D(使用代理像Achilles[ref 5]), SQL注入将失败。 加入上述正则表达式的新的Snort规则如下:
where num_value3=some_user_supplied_number
这个规则首先留意 = 号或它的hex值(%3D),然后考虑零个或多个除换行符以外的任意字符,最后检测单引号,双重破折号或分号。
\w* - 零个或多个字符或者下划线。 (\%27)|\’ - 单引号或它的hex等值。 (\%6 F)|o|(\%4 F))((\%72)|r|-(\%52) -‘or’的大小写以及它的hex等值。
union - union关键字
exec - 请求执行储存或扩展储存过程的关键字 (\s|\+)+ - 一个或多个的空白或它们的http等值编码 (s|x) p- ‘sp’或‘xp’字母用来辨认储存或扩展储存过程 \w+ - 一个或多个字符或下划线来匹配过程的名称
((\%3C)|<) -检查<和它hex等值 ((\%2F)|\/)*-结束标签/或它的 hex等值 [a-z0-9\%]+ -检查标签里的字母或它hex等值 ((\%3E)|>) -检查>或它的hex等值
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;)
(\%3 C)|<) -<或它的hex等值 (\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47) -’img’字母或它的大小写hex等值的变化组合 [^\n]+ -除了换行符以外的任何跟随<img的字符 (\%3E)|>) ->或它的hex等值
这个规则简单寻找<+除换行符外的任何字符+>。由于你的web服务器和web应用程序的构架,这个规则可能产生一些错误。但它能保证捉住任何CCS或者类似CSS的攻击。
http://www.securityfocus.com/archive/1/272...rchive/1/272037. 但是请注意最后一种极端的规则将能检测这所有的攻击。
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
|