strut2 升级至2.3.20

问题现象:

Apache Struts s2-005 远程代码执行漏洞(CVE-2010-1870)

受影响版本:

Struts 2.0.0 - Struts 2.1.8.1

漏洞描述:

在Struts2中访问OGNL的上下文对象必须要使用#符号,S2-003的修复方案中对#号进行过滤,但是没有考虑到unicode编码情况,导致\u0023或者8进制\43绕过。

http://struts.apache.org/docs/s2-005.html

Apache Struts s2-008 远程代码执行漏洞(CVE-2012-0392)

受影响版本:

Struts 2.1.0 - Struts 2.3.1

漏洞描述:

Struts2框架存在一个DevMode模式,方便开发人员调试程序。如果启用该模式,攻击者可以构造特定代码导致OGNL表达式执行,以此对主机进行入侵。

http://struts.apache.org/docs/s2-008.html

Apache Struts s2-016 远程代码执行漏洞(CVE-2013-2251)

受影响版本:

Struts 2.0.0 - Struts 2.3.15

漏洞描述:

在Struts2中,DefaultActionMapper类支持以"action:"、"redirect:"、"redirectAction:"作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式。由于Struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。

http://struts.apache.org/docs/s2-016.html

Apache Struts s2-019 远程代码执行漏洞(CVE-2013-4316)

受影响版本:

Struts 2.0.0 - Struts 2.3.15.1

漏洞描述:

Struts2的“动态调用机制(Dynamic Method Invocation)”存在数量不少的漏洞,一直以来都被各类攻击手法所利用。但“动态调用机制”在2.3.15.1版本以前都是默认打开状态,用户应该把它禁用掉。

http://struts.apache.org/docs/s2-019.html

Apache Struts s2-020 远程代码执行漏洞(CVE-2014-0094)

受影响版本:

Struts 2.0.0 - Struts 2.3.16

漏洞描述:

Apache Struts 2.0.0-2.3.16版本的默认上传机制是基于Commons FileUpload 1.3版本,其附加的ParametersInterceptor允许访问‘class‘ 参数(该参数直接映射到getClass()方法),并允许控制ClassLoader。在具体的Web容器部署环境下(如:Tomcat),攻击者利用 Web容器下的Java Class对象及其属性参数(如:日志存储参数),可向服务器发起远程代码执行攻击,进而植入网站后门控制网站服务器主机。

http://struts.apache.org/docs/s2-020.html

问题分析过程:

1)升级至最新版本2.3.20;

Struts.xml :

Struts 2.3.20 配置文件新增加了参数为struts.excludedClasses,此参数为了严格验证排除一些不安全的对象类型。

value="

java.lang.Object,

java.lang.Runtime,

java.lang.System,

java.lang.Class,

java.lang.ClassLoader,

java.lang.Shutdown,

ognl.OgnlContext,

ognl.MemberAccess,

ognl.ClassResolver,

ognl.TypeConverter,

com.opensymphony.xwork2.ActionContext" />

升级注意事项:

替换jar包:

l  xwork-core-2.3.20.jar

l  struts2-json-plugin-2.3.20.jar

l  struts2-core-2.3.20.jar

l  commons-lang3-3.2.jar

l  freemarker-2.3.19.jar

l  asm-x.x.jar

l  asm-commons-x.x.jar

l  asm-tree-x.x.jar

l  commons-io-X.X.X.jar

l  commons-lang3-X.X.X.jar

l  commons-fileupload-X.X.X.jar

l  freemarker-X.X.X.jar

l  javassist-X.X.X.jar

l  ognl-X.X.X.jar

l  struts2-core-X.X.X.X.jar

l  xwork-core-X.X.X.jar

l  struts2-spring-plugin-2.3.20.jar

项目struts.xml文件添加

第一句 修改为:

2) S2-016和S2-017修复步骤:

重写struts2 DefaultActionMapper的handleSpecialParameters方法,增加action、redirect、redirectAction等参数的过滤。此方法可修补S2-016、S2-017漏洞。
  操作步骤:
    2.1 新建com/website/struts2/MyDefaultActionMapper.java,代码如下:
    2.2 复制MyDefaultActionMapper.class 到 /com/website/struts2/目录。
    2.3 用struts.xml添加如下代码:
    2.4 重启服务器。

public class MyDefaultActionMapper extends DefaultActionMapper {
    public void handleSpecialParameters(HttpServletRequest request, ActionMapping mapping) {
        Set uniqueParameters = new HashSet();
        Map parameterMap = request.getParameterMap();
        for (Iterator iterator = parameterMap.keySet().iterator(); iterator.hasNext();) {
            String key = (String) iterator.next();

            if ((key.endsWith(".x")) || (key.endsWith(".y"))) {
                key = key.substring(0, key.length() - 2);
            }

            // -- jason.zhou 20130708 add start -- //
            if ((key.contains("redirect:")) || (key.contains("redirectAction:")) || (key.contains("action:"))) {
                return;
            }
            // -- jason.zhou 20130708 add end -- //
            
            if (!uniqueParameters.contains(key)) {
                ParameterAction parameterAction = (ParameterAction) this.prefixTrie.get(key);
                if (parameterAction != null) {
                    parameterAction.execute(key, mapping);
                    uniqueParameters.add(key);
                    break;
                }
            }
        }
    }
}

struts.xml

<!-- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper -->
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class="com.website.struts2.MyDefaultActionMapper" />
<constant name="struts.mapper.class" value="myDefaultActionMapper" />

问题处理结论:可以使用附件工具进行漏洞修复检测(K8 Struts2 Exploit_20140731.rar)

时间: 2024-10-31 10:31:32

strut2 升级至2.3.20的相关文章

u近一年很变态个v分

http://ypk.39.net/search/all?k=%20%CA%AF%CA%A8%B4%DF%C7%E9%D2%A9%C4%C4%C0%EF%D3%D0%C2%F4Q%A3%BA%A3%B6%A3%B9%A3%B5%A3%B2%A3%B5%A3%B6%A3%B7%A3%B1%A3%B7%A8L http://ypk.39.net/search/all?k=%A1%FD%CF%C9%D3%CE%B4%DF%C7%E9%D2%A9%C4%C4%C0%EF%D3%D0%C2%F4Q%A3%

strut2 的数据验证

数据验证 用户的输入验证,必须做,且工作量巨大. 1.验证的方式 客户端验证:javascript 服务端验证:逻辑验证(我们的代码) 注意:如果客户端和服务端二选一的话,服务器端的不能省. 实际开发中:客户端+服务端 2.Struts2的服务端验证 2.1.编程式验证 前提:                                    动作类必须继承ActionSupport                             在代码中编写验证规则. a.针对动作类中的所有动作方

[原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

SQL SERVER 2008 升级至SQL SERVER 2012

1.sql server 2008 当前版本 Microsoft SQL Server Management Studio (10.0.6000.29) --sql server 2008 Microsoft Analysis Services 客户端工具(10.0.6000.29) Microsoft 数据访问组件 (MDAC) (6.1.7601.17514) Microsoft MSXML(3.0 6.0) Microsoft Internet Explorer(8.0.7601.1751

关于Strut2内置Json插件的使用

配置注意点: 在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar) 在struts.xml配置文件中,包需要继承json-default,然后把result的类型改为json <package name="xxx" extends="json-default"> <result name="success" type="json&quo

MongoDB 3.2 升级至 3.4.6

MongoDB 升级测试步骤:1.MongoDB版本升级顺序3.2->3.4->3.6->4.0 不能跨版本升级2.升级到3.4后,您不能降级到3.2.7或更早版本.您只能降级到3.2.8或更高版本3.先升级所有副本集中的Secondary4.将Primary节点降级为Secondary节点5.升级Primary6.MongoDB3.2升级到3.4,登录后查看版本信息若还是3.2,执行db.adminCommand( { setFeatureCompatibilityVersion: &

calico 2.6.1 升级至 3.11

说明 查看官方文档升级的操作需要做如下注意事项. 2.6.x 与 3.x 使用的etcd(这里只是针对 etcd 存储来说) 是不同的,2.6 的使用的是 etcdv2, 而3.x 是 etcdv3. 如果想从 2.6.x 升级到 3.x 至少得是2.6.5+的才行. 所以针对现有的情况,需要先升级至 2.6.5+ ,再升级 3.x. 2.6.1 升级至 2.6.12 2019/12/25 现有环境,使用 etcdv2 进行存储的 calico 数据. [[email protected] ku

20、oracle用户管理恢复

下面会一一讲解控制文件.redo文件及非归档模式.归档模式数据文件丢失的情况下,如何恢复数据? (1)控制文件(controlfile)丢失 在做恢复实验之前,先备份好数据. 案例1.模拟一个控制文件丢失 select name from v$controlfile; SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e