原!struts安全漏洞,由2.3.37版本升级至2.5.22

摘要:
interceptorname=“ajaxTokenFilter”class=“com.cmcc.open.devportal.mlabs.common.filter.ajaxTokenFilter“>interceptor stackname=“pathMatchInterceptor”>正则表达式;或者<

漏洞描述

Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架。Apache Struts于2020年8月13日披露 S2-059 Struts 远程代码执行漏洞(CVE-2019-0230),在使用某些tag等情况下可能存在OGNL表达式注入漏洞,从而造成远程代码执行,风险极大。阿里云应急响应中心提醒Apache Struts用户尽快采取安全措施阻止漏洞攻击。

影响版本

Apache Struts 2.0.0 - 2.5.20

安全版本

Apache Struts >= 2.5.22

安全建议

将Apache Struts框架升级至最新版本。

升级步骤:

一、替换struts相关maven依赖包 ,版本改为2.5.22,同时删除struts.xwork依赖,2.5版本core已经集成该依赖。

本人项目中只替换了struts的这些maven依赖,看网上有其他人替换了很多其他包,如果项目报错那就替换。

二、struts.xml配置文件修改,包括以下几个方面:

 1)<!DOCTYPE改为2.5版本

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">

2)增加配置,这个不加应该也行,百度出来好多都加了。
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<constant name="struts.enable.SlashesInActionNames" value="true"/>

3)struts2从2.5版本开始,为了提升安全性,默认开启了严格的方法调用。
action中如果要使用通配符*,必须在package中设置 strict-method-invocation="false" 或者 添加<global-allowed-methods>regex:.*</global-allowed-methods>

例如:
<package name="jspPath" extends="struts-default" strict-method-invocation="false">
<interceptors>
<interceptor name="pathMatch"
/>
<interceptor name="ajaxTokenFilter"
class="com.cmcc.open.devportal.mlabs.common.filter.AjaxTokenFilter">
<param name="includeMethods">templateCallVoiceTemplate</param>
</interceptor>
<interceptor-stack name="pathMatchInterceptor">
<interceptor-ref name="pathMatch"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="pathMatchInterceptor"/>
<!--struts 2.5版本 action通配符* 这个能被其他package继承,比较好用,如果你其他package都extends了某个基础的package -->
<global-allowed-methods>regex:.*</global-allowed-methods>
</package>

或者
<package name="apiData" extends="struts-default,json-default" namespace="/apiData">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="calls" method="calls" >
</action>
</package>


三、web.xml调整

1)<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">


2)

<filter>

        <filter-name>struts2</filter-name>

        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

把  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 中的.ng 去掉 修改为

<filter>

        <filter-name>struts2</filter-name>

        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>


四、jsp页面涉及的id都不能用,会报错,利用正则全局替换。
<s:iterator value="codeTypes" id="codeTypes" status="status">,idea工具 全局正则替换如下:

原!struts安全漏洞,由2.3.37版本升级至2.5.22第1张

 <s:iterator(.*)id=

<s:iterator$1var=

其他参考:

1.https://blog.csdn.net/qq_34128089/article/details/80804882?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

2.https://blog.csdn.net/qq_40248086/article/details/104752778?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

3.https://blog.csdn.net/blue_hh/article/details/79270850?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

免责声明:文章转载自《原!struts安全漏洞,由2.3.37版本升级至2.5.22》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS查看CPU、内存、网络流量和磁盘 I/O【详细】工作流引擎下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

scala-基础-映射(1)

//映射(1)-构建,获取,更新,迭代,反转,映射(可变与不可变 互换) class Demo1 extends TestCase { //构建与获取 def test_create_^^(){ //构建-不可变Map(映射),值不能改变 val mapa = Map("001"->10,"0...

Elasticsearch的数据导出和导入操作(elasticdump工具),以及删除指定type的数据(delete-by-query插件)

Elasticseach目前作为查询搜索平台,的确非常实用方便。我们今天在这里要讨论的是如何做数据备份和type删除。我的ES的版本是2.4.1。 ES的备份,可不像MySQL的mysqldump这么方便,需要一个插件进行数据的导出和导入进行备份和恢复操作。这里要说的插件是elasticdump。 elasticdump的安装: [root@localho...

dump redo日志文件的信息

通常会用到以下两个命令:1.'alter session'命令用来dump redo日志的文件头2.'alter system dump logfile'命令用来dump redo文件的内容 以上命令也可以对归档日志进行dump。输出结果存放在session的trace文件中。 可以根据以下方式对redo日志进行dump:(1) To dump recor...

基于Gitlab统计代码行--统计所有仓库、所有提交人的代码总行数(新增加-删除)

公司绩效考核要求,统计GITLAB仓库所有人提示有效代码行业 脚本1: 统计所有仓库、所有提交人的代码总行数(新增加-删除) 脚本2: 统计所有仓库、所有提交人的代码提交汇总与删除汇总 脚本3: 统计指定仓库的所有提交人的代码提交 汇总与删除汇总 注意:所有代码行数为0,统计结果中清除。 所有统计只统计master分支。 安装: 把脚本中的仓库路径搜索修...

使用VsCode的Rest Client进行请求测试

平时工作使用VSCode进行request的提交和测试 =>{按照Rest Client 可以很轻松的帮助我们完成代码的调试,而且能帮我们编译成各种语言的代码使用(Generate Code Snippet)} 如下表:我是用了Get请求,然后Shift+Ctrl+P进入VsCode的命令行,然后选择 Rest Client:Generate Cod...

Docker安装flink及避坑指南

Docker安装flink 导航 无处不在的大数据 安装flink 拉取flink镜像 编写docker-compose.yml 生成启动 查看安装效果 常见坑及解决方案 问题1 问题2 参考   本节是《flink入门实战》的第4篇,感谢您的阅读,预计阅读时长3min。 “泰山不拒细壤,故能成其高,江海不择细流,故能就其深。” flink...