前段时间,公司的多台主要的生产环境服务器发生了cpu频繁占满,然后tomcat歇菜的情况。查看资源占用情况,发现是一个以root起的httpd.conf的进程在占用,尝试kill,但愈演愈烈。百度后觉得可能是当初装的nagios的漏洞导致。不久,报出了Struts2的(S2-046)漏洞。再次查看服务器日志,发现也确有出现利用此漏洞的攻击。遂决定重装了服务器。并对jar包升级。
- 项目原struts包版本2.3.15.1
- 根据官方解决方案,目标版本 2.3.32
附 本次更换的jar包版本:
- freemarker-2.3.22.jar
- commons-lang3-3.2.jar
- commons-io-2.2.jar
- commons-lang-2.4.jar
- commons-fileupload-1.3.2.jar
- struts2-convention-plugin-2.3.32.jar
- struts2-core-plugin-2.3.32.jar
- struts2-spring-plugin-2.3.32.jar
- xwork-core-2.3.32.jar
- struts2-json-plugin-2.3.32.jar(我没有换因为用的fastjson,如果之前有依赖应该也要换)
然儿,替换完后工程正常启动(至少看起来如此),但是访问返回的都是404。忽略的是升级struts2版本基本就会更改它的配置文件。
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
如果没有配置这个你会发现。你原来的项目报404错误,这个是开启或禁止调用动态方法,如果是false,则不会有动态调用产生的404错误。
在struts.xml添加这条配置信息,ok,服务器访问正常