我的目标是编写一条规则来检测一个简单的真实漏洞( SQLi )
字符串示例的格式为:
% ' or 1 = 1 #
为了识别上面的字符串及其某些变体,我开发了以下pcre。
pcre: "/\W\s*\W\s*or\s*([\d\w])\s*\W\s*\1\s*\W/";
我运行了一个测试@ regextester,我的正则表达式似乎有效。但是,在Snort中,此规则无法选择并且不会触发。
规则格式为
alert 192.168.x.x any -> 192.168.y.y 80 (msg: "SQL Query"; pcre: "/\W\s*\W\s*or\s*([\d\w])\s*\W\s*\1\s*\W/"; sid: 1001;);
我很感激任何帮助
来自 Whireshark 的GET 请求
GET /dvwa/vulnerabilities/sqli/?id=%25+%27+or+1+%3D+1+%23&Submit=Submit
答案 0 :(得分:0)
规则失败的原因是URL编码。 %25
表示%
,%27
表示'
,+(or %20)
表示space
,%3D
表示=
。 https://www.w3schools.com/tags/ref_urlencode.asp
Snort有HTTP normalization module
。但我认为这并不完美。
请参阅以下规则。
alert tcp any any -> any any (content:"+or+"; nocase; pcre:"/\+or\+\w\+%3D\+\w/";)
单独使用pcre会降低性能。与内容一起使用时,它会缩小pcre检查的范围并提高性能。