解析Mod安全规则



我需要解析modsec日志,以便只显示触发规则的日期和ID。例如,我有这样的日志:

[Fri Jan 29 19:12:14 test test] [:error] ModSecurity: Warning。使用libinjection检测XSS。[file "/etc/apache2 r_configs/OWASP3/rules/request -941-应用-攻击-XSS.conf"] [line "37"] [id "941100"] [rev "2"] [msg "XSS攻击检测通过libinjection"] [data "匹配数据:x-forward -for - found within ARGS:data[]: [vc_row full_width=x22stretch_rowx22 initial_loading_animation=x22fadeInx22 show_overlay=x221x22 pofo_enable_responsive_css=x221x22 pofo_hidden_markup_1507889268_2_40=x22x22 css=x22。vc_custom_1608665830226{背景图片:url (https://argeoslab.tech/wp-content/uploads/2020/12/geniemebanner.jpg?id=22321) !重要;}将][vc_column宽度= x221/4 将pofo_hidden_markup_1507901669_2_21 = 将将pofo_hidden_markup_1507901601_2_49 = 将将…";][严重"CRITICAL"[版本"OWASP_CRS/3.0.0"][成熟度"1"][精度"9"][标签"application-multi"[标签"language-multi"[标签"platform-multi"[标签"attack-xss"

我需要在开头得到日期,然后是ID。我可以这样获取ID:

awk '{for (I=1;I<NF;I++) if ($I == "[id") print $(I+1)}'

我已经尝试用第二个awk管道它将以这种方式工作,但if语句将用于$i == "Fri" || $i == "Mon"等,但它没有很好地工作。

然而,我不知道如何获得日期([Fri Jan 29 19:12:14])和ID。

我最初在apache log中使用grep of modsec得到输出,所以会有一个更大的输出,我需要遍历每一行,而不仅仅是第一次出现

任何帮助都是感激的,谢谢

可能是其中之一…

$ grep -Eo '[(Sun|Mon|Tue|Wed|Thu|Fri|Sat|id)[ a-zA-Z0-9:"]+]' filename
[Fri Jan 29 19:12:14 test test]
[id "941100"]
$ awk -F '(] )' '{ c=0; for(i=1;i<=NF;++i) if(match($(i),/^[(Sun|Mon|Tue|Wed|Thu|Fri|Sat|id)/)) { ++c; print $(i)"]"; if(c==2) break }}' filename
[Fri Jan 29 19:12:14 test test]
[id "941100"]
$ awk -F '(] )' '{ for(i=1;i<=NF;++i) if(match($(i),/^[(Sun|Mon|Tue|Wed|Thu|Fri|Sat|id)/)) { if(i==1) { s=$(i)"] " } else { s=$(i)"]"; i=NF } printf("%s",s) } print "" }' filename
[Fri Jan 29 19:12:14 test test] [id "941100"]

最新更新