ストリームから特定の文字列を抽出する

ストリームから特定の文字列を抽出する

snort署名を保存するファイルがあり、その署名から太い「sid」とCVE番号を抽出する必要があります。ここにサンプル署名があります。

alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any (msg:"ET ACTIVEX Possible Microsoft WMI Administration Tools WEBSingleView.ocx ActiveX Buffer Overflow Attempt"; flow:established,to_client; file_data; content:"2745E5F5-D234-11D0-847A-00C04FD7BB08"; nocase; distance:0; pcre:"/]classid\s=\s*[\x22\x27]?\sclsid\s\x3a\s*\x7B?\s*2745E5F5-D234-11D0-847A-00C04FD7BB08.+(AddContextRef|ReleaseContext)/smi"; reference:url,xcon.xfocus.net/XCon2010_ChenXie_EN.pdf; reference:url,wooyun.org/bug.php?action=view&id=1006; reference:bid,45546; reference:cve,CVE-2010-3973; classtype:attempted-user; sid:2012158; rev:2; metadata:affected_product Windows_XP_Vista_7_8_10_Server_32_64_Bit, attack_target Client_Endpoint, deployment Perimeter, tag ActiveX, signature_severity Major, created_at 2011_01_06, updated_at 2016_07_01;)

出力:2012158 [空間] CVE-2010-3973

ベストアンサー1

$ grep -E -o -e 'sid:[^;]+' -e 'reference:cve,[^;]+' file | awk -F '[:,]' '{ sid=$2; getline; print sid, $3 }'
2012158 CVE-2010-3973

grep興味のあるデータから2ビットの情報を抽出するために使用されます。-oこれは、与えられた式に一致する行のビットのみを返し、フィールドを正しいフィールドにsid一致referenceさせることによってこれを行います。このコマンドの出力はgrep次のとおりです。

sid:2012158
reference:cve,CVE-2010-3973

その後、プログラムはawk最初の行を読み取りgrep、数値を変数として抽出しsid、次の行を読み取り、保存された3番目のフィールドを印刷しますsid(フィールドはコンマまたはコロンで区切られます)。

おすすめ記事