`
chinahnzhou
  • 浏览: 354035 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

struts2 最新漏洞 S2-016、S2-017修补方案

 
阅读更多

昨天struts2爆了一个好大的漏洞,用道哥的话来说就是:“今天下午整个中国的黑客圈像疯了一样开始利用这个漏洞黑网站,大家可以感受一下。”

看下乌云这两天的数据:

相关报道:

灾难日:中国互联网惨遭Struts2高危漏洞摧残

Struts2被曝重要漏洞,波及全系版本

官方描述:

S2-016:https://cwiki.apache.org/confluence/display/WW/S2-016
S2-017:https://cwiki.apache.org/confluence/display/WW/S2-017

 

============================== 好了,下面是正题 ==============================

struts2漏洞S2-016、S2-017修补方案:

为了排版整齐一点,将代码放在最后。

方案1:
  方案介绍:
    手工修改Ognl.jar源码,增加恶意代码过滤。此方法只能修补S2-016漏洞,但是对以后可能产生的ognl漏洞有预防作用。
  操作步骤:
    1.1 找到项目中ognl-version.jar,然后找到其对应的源码。把源码解压后,导入到eclipse。找到Ongl.java中修改如下代码:
    1.2 将上面修改后的项目通过eclipse导出为ognl-my.jar, 将它放到lib目录。
    1.3 删除原来ognl-version.jar
    1.4 重启服务器。

方案2:
  方案介绍:
    重写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 重启服务器。

注意:
1.方案1中的“恶意代码”和方案2中的“action、redirect、redirectAction”均为hardcode,如有需要可改为从配置文件读取。
2.方案1原则上对系统没有影响,方案2进行了redirect和redirectAction可跳转性测试,但未进行全站测试。
3.方案1和方案2可以同时执行,也可只执行单独一个。

 

附件:

Ognl.java

复制代码
public static Object parseExpression(String expression)
        throws OgnlException {
    // -- jason.zhou 20130718 add start -- // 
    // Runtime、ProcessBuilder为恶意代码,其它可自行添加
    String evalMethod[] = { "Runtime", "ProcessBuilder" };
    String methodString = null;
    methodString = expression.toLowerCase();
    for (int i = 0; i < evalMethod.length; i++) {
        if (methodString.indexOf(evalMethod[i].toLowerCase()) > -1) {
            System.out.print("|OGNL正在执行恶意语句|" + methodString + "|看到这个消息,请联系安全工程师!!!");
            return null;
        }
    } 
    // -- jason.zhou 20130718 add start -- // 

    try {
        OgnlParser parser = new OgnlParser(new StringReader(expression));
        return parser.topLevelExpression();
    } catch (ParseException e) {
        throw new ExpressionSyntaxException(expression, e);
    } catch (TokenMgrError e) {
        throw new ExpressionSyntaxException(expression, e);
    }
}
复制代码

 

 MyDefaultActionMapper.java

复制代码
/**
 * zhounenghua@163.com copyright
 */
package com.website.struts2;

/**
 * @author jason.zhou
 * @date 2013-7-18
 */
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" />  

 本文代码有参考如下网址:http://www.inbreak.net/archives/507

博客园网址:http://www.cnblogs.com/chinahnzhou/p/struts2_bug_s2-016_s2-017_solution.html

分享到:
评论
1 楼 fanxianyun 2016-03-01  
恶意代码,我添加了inputstream,但是我界面有个<img src=xx.actio>在action中,使用了xxinputstream却也被检测到了,这个怎么放过去呢。另外程序action中也有用到runtime的任务,怎么放过呢?

相关推荐

    struts2 最新漏洞 S2-016、S2-017修补方案 .docx

    Struts2 最新漏洞 S2-016、S2-017 修补方案 Struts2 是一个基于 Java 的 Web 应用程序框架,由 Apache 软件基金会维护。最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者...

    Struts2_s2-016&017&ognl2.6.11_patch漏洞补丁

    -- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --&gt; &lt;bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...

    struts2反序列化漏洞,存在s2-005、s2-016、s2-016_3、s2-017

    然而,这个框架的历史上存在一系列的安全漏洞,其中特别值得关注的是与反序列化相关的漏洞,如s2-005、s2-016、s2-016_3和s2-017。这些漏洞允许攻击者通过精心构造的输入,利用Struts2的内置机制执行任意代码,从而...

    struts2漏洞s2-045,不升级jar版本的修补方法,已验证.docx

    Struts2 漏洞 S2-045 修补方法 Struts2 是一个基于 Java 的 Web 应用程序框架,广泛应用于企业级应用程序中。然而,Struts2 中存在着一些漏洞,例如 S2-045 漏洞,该漏洞可能会导致严重的安全问题。今天,我们将...

    Struts2 (S2-016/S2-017)高危漏洞修复文件

    然而,像任何其他软件一样,Struts2也存在安全漏洞,其中S2-016和S2-017是两个知名的高危漏洞。 S2-016漏洞,全称为"Struts2 REST插件远程代码执行漏洞",主要影响Struts2的REST插件。该漏洞源于框架在处理XML内容...

    S2-016漏洞利用工具

    S2-016漏洞,也被称为Struts2远程代码执行漏洞,是Apache Struts2框架中的一个严重安全缺陷。这个漏洞主要出现在Struts2的2.3.x版本,允许攻击者通过精心构造的HTTP请求头来执行任意系统命令,从而获取服务器的控制...

    struts2-016/017漏洞解决

    "struts2-016-017-bug-repair"压缩包很可能是包含了修复这两个漏洞的补丁或配置更改说明。为了在不升级原框架的基础上解决这些问题,你可以按照以下步骤进行: 1. **应用补丁**:检查压缩包中的文档,看是否有提供...

    修复struts2的安全漏洞(编号S2-045、S2-046)

    给还用struts2框架的系统提供一个完美的解决方案,里面的struts2版本jar都统一好,大家在用的时候直接将对应的jar先删除,然后用这里面的jar包。必免jar冲突了

    Apache_Struts2漏洞(S2-045,CVE-2017-5638)

    S2-045 漏洞,官方称为“基于Struts2的Content-Type注入”,是在2017年被发现的。这个漏洞存在于Struts2的Jakarta插件中,该插件处理HTTP请求头中的Content-Type字段时存在缺陷。攻击者可以通过精心构造的HTTP请求,...

    struts2.3.32修补S2-045漏洞所有核心jar包及依赖的jar(含core包)

    在本文中,我们将深入探讨标题和描述中提及的“struts2.3.32”版本,以及它如何修补了知名的S2-045安全漏洞,并介绍相关的核心组件和依赖项。 S2-045漏洞是一个严重的远程代码执行(RCE)漏洞,存在于Apache Struts...

    Struts2远程代码执行漏洞分析(S2-013)1

    Struts2 是 Apache 官方的产品,最近出了一个远程代码执行漏洞,编号“S2-013”,目前是 0DAY,官方没有修补方案出现。这个漏洞出现在 includeParams 属性中,允许远程命令执行。 漏洞的成因是 Struts2 标签库中的 ...

    struts2_S016_S017_repair

    官方建议修复方案:升级到最新版本 struts-2.3.15.1 但通常现有系统升级,可能导致不稳定及与其他框架比如spring等的不兼容,成本较高。 鉴于此csdn网友jzshmyt整理了一种既可以不用升级现有struts版本,有能完美...

    K8_Struts2_EXP S2-045 & 任意文件上传 20170310

    标题中的“K8_Struts2_EXP S2-045 & 任意文件上传 20170310”指的是一个与Struts2框架相关的安全漏洞,具体为S2-045漏洞,该漏洞允许攻击者进行任意文件上传。20170310可能是漏洞被发现或公开的日期,也可能是指该...

    Struts 2 远程代码执行漏洞(s2-045\s2-046)修复所用到的包

    升级到2.3.32所用到的jar包: freemarker-2.3.22.jar ognl-3.0.19.jar struts2-convention-plugin-2.3.32.jar struts2-core-2.3.32.jar struts2-spring-plugin-2.3.32.jar xwork-core-2.3.32.jar --来源 ...

    structs2最新远程执行漏洞S2-057、反序列化漏洞等修复方案

    Apache Struts2 官方发布了最新的安全公告,披露了一个远程命令执行漏洞(漏洞编号:CVE-2018-11776,官方编号:S2-057),攻击者可利用漏洞实施远程命令执行攻击。特给出struct2.0-2.3.35的修复方案

    struts2漏洞S2-0211

    ### Struts2 漏洞S2-0211详解 #### 一、背景介绍与漏洞概述 在深入分析Struts2漏洞S2-0211之前,有必要了解其背景信息及其基本原理。 ##### 1.1 Struts2简介 Struts2是一个基于Java的Web应用开发框架,它提供了...

    K8_Struts2_EXP S2-045 20170310.rar

    在应对这类漏洞时,最重要的是及时更新Struts2框架到修复了这些漏洞的最新版本。对于无法立即更新的情况,可以采取临时解决方案,如配置Web应用防火墙(WAF)来过滤潜在的恶意请求,或者修改Struts2配置以限制OGNL...

    struts-2.5.16-源码+示例(S2-057漏洞演示环境)

    此外,更新到最新的Struts 2版本也是必要的,因为官方会发布补丁来修复已知的安全问题。 在提供的压缩包中,`struts-2.5.16-all.zip`包含了Struts 2.5.16的完整发布版,包括运行库和相关文档,你可以用它来搭建一个...

    S2-045 struts2-core-2.3.32.jar 相关jar包,测试可用

    目前Struts2官方已经确认漏洞(漏洞编号S2-045,CVE编号:cve-2017-5638),并定级为高危风险。 该漏洞的影响范围:Struts2.3.5 到 Struts2.3.31 以及 Struts2.5 到 Struts2.5.10。 修复方式:更新至Struts 2.3.32...

Global site tag (gtag.js) - Google Analytics