当我解析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 。
答案 0 :(得分:4)
这可以引用不同的字符编码,其中t
大于x80
且x80
无法正常处理。
以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
的情况下有其他正则范围的正则表达式,则可以快速打折。)