您的位置:首页 > 运维架构 > Apache

Apache Struts 任意命令执行漏洞(高风险)--struts版本的升级

2019-08-15 21:38 465 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_43922510/article/details/99656353

漏洞描述

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包的依赖问题导致项目启动不起来的问题还是解决挺长时间的。现在项目已经可以正常启动,但是因为对象有部分字段用懒加载实现的问题,导致了在获取对象属性的时候,会报懒加载异常的问题,这个问题有待明天进行解决。以上就是本人解决该漏洞的步骤,由于如有什么建议或意见,欢迎各位小伙伴提出。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: