2013-12-12 12 views
13

Snortの正規表現セットを解析しているときに、[\x80-t]または[\x01-t\x0B\x0C\x0E-t\x80-t]のような非常に奇妙な文字クラス構文が見つかりましたが、実際に何も分かりません。-tを意味します。私はそれが標準PCREかSnort拡張の一種であるかどうかわかりません。Snort/PCRE Regex:奇数文字クラスの構文

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

PS:文字トン\ X74ですので\x80-tは、標準的な方法でも、有効な範囲ではないことに注意してください。ここ

は、これらの文字クラスが含まれているいくつかの正規表現です

+0

私は興味をそそられています。あなたがこれを見つけた場所を正確に聞くことができますか? – polkadotcadaver

+1

@polkadotcadaverもちろん。私はいくつかのプロジェクトを調査していました。一つは[netbench](http://merlin.fit.vutbr.cz/ant/netbench/index.html)です。これは、pattern_match/rulesディレクトリにあるL7、Bro、Snortの正規表現をいくつか含んでいます。 Snort/voip.rules.pcreにはこれらの文字クラスがあり、Snort/exploit.rules.pcreにはこれらの文字クラスがあります。 –

+0

@ Simone-Cuそれは間違いなく範囲です。私は[pcreマニュアル](http://www.pcre.org/pcre.txt)で '-t \ b'を検索しましたが、一致しませんでした。つまり、pcreには '-t'は特別なことはありません。今度はいくつかの可能性があります:** 1)**範囲は単なる著者のエラーです** 2) '0x80'は小数点で' 128 'です。ブラウザで '€'を試してみると、ユーロ記号 '€'。だから、プログラムは、他のエンコーディング/文字テーブルを使用していますか? – HamZa

答えて

4

tx80より大きく、通常はアドレス指定できない別の文字エンコーディングを参照することができます。

たとえば、EBCDICスキャンコードを取る(here for a referenceを参照)。

(しかし、私はあまりにも誰かがそのように書きたいと思う理由見当もつかない)

ASCIIのために、私は野生の推測を持っている:「-1次のトークンまで」-t手段であれば、ラインの最後に配置場合そこで、基本的表現[\x01-t\x0B\x0C\x0E-t\x80-t][^\r\n]を意味するであろう

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

:「使用できる文字の最後まで」2番目のクエリは、このことを述べるだろう。

(.Ç-t]|...[Ç-t])にそれを適用すると、7ビットASCIIより大きな文字を扱い、ユニコード(すべての最初の127文字以外)のすべてに対処することができます。

(言われていること、私はまだ誰かがこのようにそれを書くべき理由か見当もつかないが、少なくとも「そのバグ」のほかにコヒーレントな説明のthats)

たぶん役立つ:あなたは平均rexexes掲示ん何を\ xYYを書き出したら? 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の世話はそれがテキストで表示されませんので、助ける、多分ネットトラフィックの可能性があります。

+0

これは興味深い点ですが、この場合、重複する範囲を持つ '[\ x01-t \ x0B \ x0C \ x0E-t \ x80-t]'クラスの宣言はできません。 –

+1

@ Simone-Cuその正規表現を使用するいくつかのコードを投稿できますか?また、オーバラップする範囲は「良い」ものではないかもしれませんが、動作しなければならないので、観察者に「意味をなさない」ことがあるので、彼が正規表現を使って「作業するまで」は気にしますが、それらを完全に後に。 –

+0

これは本当ですが、本当に変です。コードについては、これらの正規表現はSnortの正規表現から来るべきです(netbenchチームが間違いなくそれらを収集していれば、netbenchに関する質問の私の最初のコメントの1つを参照してください)。今まで私はそれをjava正規表現と他の目的のための解析木に変換しようとしているので、正規表現はデータであると言います。 –

3

To:(大文字小文字を区別しない)で始まり、改行や改行文字ではない文字が少なくとも1つ続く行に一致します。これは貪欲な試合なので、私は\rまたは\nが、文字クラス[\x01-t\x0B\x0C\x0E-t\x80-t]の中で唯一の可能な終了試合であると期待しています。注:\r\x0Dに相当し、\n\x0Aに相当します。何が-tの意味なのかわからないが、その代わりに-だったとしよう。文字クラスは[\x01-\x0B\x0C\x0E-\x80-]となりますが、これはやや複雑ですが、少し意味があります。すなわち、\nを終了文字として使用できますが、\rではありません。

これは非常にロングショットですが、これは何らかの種類の検索と置換が間違っている可能性があります。 (tのない通常の範囲を持つ他の正規表現があれば、これはおそらく素早く割り引かれます)