Snort / PCRE正则表达式:奇怪的字符类语法

时间:2013-12-12 14:50:47

标签: regex pcre snort

当我解析Snort正则表达式集时,我发现了一个非常奇怪的字符类语法,如[\x80-t][\x01-t\x0B\x0C\x0E-t\x80-t],我无法弄清楚(实际上没有线索) - t 表示。我甚至不知道它是标准PCRE还是某种Snort扩展。

以下是一些包含这些字符类的正则表达式:

/\x3d\x00\x12\x00..........(.[\x80-t]|...[\x80-t])/smiR
/^To\x3A[^\r\n]+[\x01-t\x0B\x0C\x0E-t\x80-t]/smi

PS:请注意,\x80-t在标准方式中甚至不是有效范围,因为字符 t \ x74

2 个答案:

答案 0 :(得分:4)

这可以引用不同的字符编码,其中t大于x80x80无法正常处理。

以EBCDIC扫描码为例(参见here for a reference)。

(但我也不知道为什么有人想这样写呢)

对于ASCII,我有一个疯狂的猜测:如果-t表示“直到下一个标记-1”或者如果放在最后一行“直到允许的字符结束”,则第二个查询会说明:

To:(not a newline, more than one character)(not a newline)

所以基本上表达式[\x01-t\x0B\x0C\x0E-t\x80-t]意味着[^\r\n]

如果将其应用于(.Ç-t]|...[Ç-t]),它将解决任何大于7位ASCII的字符,该字符也可以解决所有unicode(除前127个字符外)。

(话虽如此,我仍然不知道为什么有人应该这样写,但至少这是一个连贯的解释除了“它是一个错误”)

也许有用:如果有人写出\ xYY,你发布的rexexes是什么意思? ASCII:

/=\NULL\DEVICE_CONTROL_2\NULL\.{10}\(.Ç-t]|...[Ç-t])/smiR
/^To\:[^\r\n]+[\START_OF_HEADING-t\VERTICALTAB\FORMFEED\SHIFTOUT\Ç-t]/smi

照顾\0x12又名Device control 2可能有所帮助,因为这不会显示在文字中,但可能会显示在网络流量中。

答案 1 :(得分:3)

第二个正则表达式匹配以To:开头的行(不区分大小写),后跟至少一个不是换行符或回车符的字符。由于这是一个贪婪的匹配,我希望\r\n[\x01-t\x0B\x0C\x0E-t\x80-t]字符类中唯一可能的终止匹配。注意:\r相当于\x0D\n相当于\x0A。不确定-t是什么意思,但让我们假装它是-。那么字符类将是[\x01-\x0B\x0C\x0E-\x80-],这仍然有点复杂,但会更有意义 - 即允许\n作为终止字符而不是\r

这是非常远景,但是有没有机会这可能是某种搜索和替换出错了?! (如果在没有t的情况下有其他正则范围的正则表达式,则可以快速打折。)