我有一个 snort.rule 文件,我需要从行中提取 cve 编号,后跟参考键,并将它们附加回味精花括号内同一行的田地,下面是旧原木。
警报 udp $HOME_NET 1900 -> 任何任何(msg:“ET INFO UPnP 发现搜索响应易受攻击的 UPnP 设备 2”;内容:“面向 UPnP 设备的英特尔 SDK”;pcre:“/^Server\x3a[^\r\n] *用于 UPnP 设备/mi 的英特尔 SDK”;参考:/infosec/blog/2013/01/29;参考:arch/UPnP-arch-DeviceArchitecture-v1.1.pdf;参考:cve,2012-5958;参考:cve ,2012-5959;sid:2016303;修订版:4;)
所需的输出如下,粗体是新的更改,
警报 udp $HOME_NET 1900 -> 任何任何 (msg:"ET INFO UPnP 发现搜索响应易受攻击的 UPnP 设备 2{cve,2012-5958 cve,2012-5959}"; content:"面向 UPnP 设备的英特尔 SDK"; pcre:"/^Server\x3a[^\r\n]*面向 UPnP 设备的英特尔 SDK/mi"; 参考: /infosec/blog/2013/01/29;参考:arch/UPnP-arch-DeviceArchitecture-v1.1.pdf;参考:cve,2012-5958;参考:cve,2012-5959;sid:2016303;)
我能够提取 CVE 编号,但附加回来后我没有得到
cat /tmp/snort.rule | grep -o -E -e 'sid:[^;]+' -e 'reference:cve,[^;]+'
答案1
那么你可以尝试一下,将其复制到 shell 文件中并运行它,你可以将输出存储到新文件中。
awk -F\; ' { for ( i = 1 ; i <= NF ; i++ ) { if ( $i ~ "msg" ) a = i if ( $i ~ "reference:cve," ) { b = $i sub ( ".*:" , "" , b ) c = c " " b } } sub ( ".$" , "{" c "\"}" , $a ) } 1' /tmp/snort.rule