Apache Struts 任意命令执行漏洞(高风险)--struts版本的升级
漏洞描述
Struts2 是第二代基于Model-View-Controller (MVC)模型的java企业级web应用框架。它是WebWork和Struts社区合并后的产物。Apache Struts2在实现过程中使用了OGNL表达式,并将用户通过URL提交的内容拼接入OGNL表达式中,当debug模式开启时,攻击者可以通过构造恶意URL来执行任意Java代码,进而可执行任意命令。
漏洞验证
测试结果如下图所示:
修复建议
1、如您正在使用Jakarta文件上传插件或者是存在漏洞的Struts 2版本请升级至Struts2安全版本。
2、使用Servlet过滤器验证Content-Type丢弃不匹配的请求multipart/form-data。
3、官方表示,如果用户正在使用基于Jakarta的文件上传插件,建议升级至Struts版本2.3.32或2.5.10.1。
4、如果暂时不便升级,官方也已准备了两个可以作为应急使用的Jakarta插件版本,用户可以下载使用,链接地址如下:
https://github.com/apache/struts-extras
改用其他Multipart parser应用,比如Pell,相关链接如下:
https://cwiki.apache.org/confluence/display/S2PLUGINS/P
修复方法
对于该漏洞,可根据修复建议中的升级struts版本来进行修复,本人由struts2.3.23升级到2.3.32版本。由于jar包相互依赖,所以在升级版本的时候还应该注意导入的包。
以下是由struts2.3.23升级到2.3.32版本所替换的jar包,仅供参考:
- ognl-3.0.19.jar
- struts2-config-browser-plugin-2.3.32.jar
- struts2-convention-plugin-2.3.32.jar
- struts2-core-2.3.32.jar
- struts2-json-plugin-2.3.32.jar
- struts2-spring-plugin-2.3.32.jar
- xwork-core-2.3.32.jar
以下是web.xml关于struts2的配置
<!-- struts2配置 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter> <filter-name>struts-execute</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts-execute</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts-execute</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
结尾
第一次对struts版本进行升级,在替换jar包的过程中,由于jar包的依赖问题导致项目启动不起来的问题还是解决挺长时间的。现在项目已经可以正常启动,但是因为对象有部分字段用懒加载实现的问题,导致了在获取对象属性的时候,会报懒加载异常的问题,这个问题有待明天进行解决。以上就是本人解决该漏洞的步骤,由于如有什么建议或意见,欢迎各位小伙伴提出。
- Struts2命令执行漏洞--(升级struts至struts-2.3.28.1版本)
- struts2.2以前版本远程执行任意代码漏洞修复方案
- Struts S2-016 远程任意命令执行漏洞检测代码
- Apache Struts远程命令执行漏洞、开放式式重定向漏洞
- Apache shiro 1.2.4版本远程命令执行漏洞详解
- 中国地下市场出现了攻击Apache Struts漏洞的工具, 可让攻击者在目标服务器上执行任意指令
- Struts 2最新0day破坏性漏洞(远程任意代码执行)等的重现方法
- Apache struts2 namespace远程命令执行_CVE-2018-11776(S2-057)漏洞复现
- Hive任意命令/代码执行漏洞+渗透实例
- Discuz! 6.x/7.x 版本 前台任意代码执行漏洞
- Apache struts2 namespace远程命令执行_CVE-2018-11776(S2-057)漏洞复现
- ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞
- 9.漏洞验证系列--Apache Struts2 远程命令执行(S2-045)
- JBoss zecmd.war/zecmd.jsp 可执行任意命令漏洞
- phpwind < v6 版本命令执行漏洞
- 修复Strtus远程命令执行漏洞 : Strtus 2.2.3 升级到 Strtus 2.3.24
- Redmine git_http_controller.rb任意命令执行漏洞
- Apache struts2 Freemarker标签远程命令执行_CVE-2017-12611(S2-053)漏洞复现
- Struts2/XWork远程执行任意代码漏洞
- 关于S2-045漏洞struts版本升级注意事项