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

Sim*_*-Cu 13 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
Run Code Online (Sandbox Code Playgroud)

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

Ang*_*chs 4

这可能引用不同的字符编码,其中t大于x80x80无法正常寻址。

\n\n

以 EBCDIC 扫描码为例(参考此处)。

\n\n

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

\n\n

对于 ASCII 我有一个疯狂的猜测:如果-t意味着“直到下一个标记 -1”或者如果放在行的最后“直到允许的字符结尾”,第二个查询将说明这一点:

\n\n
To:(not a newline, more than one character)(not a newline)\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以基本上这个表达的[\\x01-t\\x0B\\x0C\\x0E-t\\x80-t]意思是[^\\r\\n]

\n\n

如果应用该方法,则(.\xc3\x87-t]|...[\xc3\x87-t])可以寻址任何大于 7 位 ASCII 的字符,这也可以寻址所有 unicode(除了前 127 个字符之外)。

\n\n

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

\n\n

也许有帮助:如果写出 \\xYY?\nASCII,您发布的 rexexes 意味着什么:

\n\n
/=\\NULL\\DEVICE_CONTROL_2\\NULL\\.{10}\\(.\xc3\x87-t]|...[\xc3\x87-t])/smiR\n/^To\\:[^\\r\\n]+[\\START_OF_HEADING-t\\VERTICALTAB\\FORMFEED\\SHIFTOUT\\\xc3\x87-t]/smi\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n