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
(フィールドはコンマまたはコロンで区切られます)。
答え2
grep
@Kusalanandaの答えを少し修正して式の出力をパイピングすると、私のcut
シェルで完璧に動作するようです。zsh
grep -o -E -e 'sid:[^;]+' -e 'reference:cve,[^;]+' file | cut -d':' -f2 | cut -d',' -f2
答え3
j=`awk '{print NF}' filename`
[root@praveen_linux_example ~]# for ((i=1;i<=$j;i++)); do awk -v i="$i" '$i ~ /CVE-2010-3973/||$i ~ /^sid/{print $i}' filename;done| awk -F [,:] '{print $NF}'| sed "s/;//g"| sed -n -e '1h' -e '2{p;g;p}'| sed "N;s/\n/ /g"
出力
2012158 CVE-2010-3973