昨天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
相关推荐
struts2 最新漏洞 S2-016、S2-017修补方案 .docx
-- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...
struts2.0反序列化漏洞,存在s2-005、s2-016、s2-016_3、s2-017等漏洞解决方案,已升级可用
0、这是一个简单、暴力、治根的补漏方法 1、struts2漏洞s2-045,不升级jar版本的修补方法,已验证
Struts2 (S2-016/S2-017)高危漏洞修复文件
升级到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 --来源 ...
关于解决 Apache_Struts2漏洞(S2-045,CVE-2017-5638),包含说明与所需资源
给还用struts2框架的系统提供一个完美的解决方案,里面的struts2版本jar都统一好,大家在用的时候直接将对应的jar先删除,然后用这里面的jar包。必免jar冲突了
struts-2.3.32-all (含struts2-core-2.3.32.jar) 修补S2-045漏洞所有核心jar包及依赖的jar
官方建议修复方案:升级到最新版本 struts-2.3.15.1 但通常现有系统升级,可能导致不稳定及与其他框架比如spring等的不兼容,成本较高。 鉴于此csdn网友jzshmyt整理了一种既可以不用升级现有struts版本,有能完美...
Struts2远程代码执行漏洞分析(S2-013)1
Apache Struts2 官方发布了最新的安全公告,披露了一个远程命令执行漏洞(漏洞编号:CVE-2018-11776,官方编号:S2-057),攻击者可利用漏洞实施远程命令执行攻击。特给出struct2.0-2.3.35的修复方案
Struts2 安全漏洞解析,距离上个版本发布仅仅过去1周,apache struts官网又发布struts2最新版本安全公告,主要修复了一个漏洞,代号S2-022:从漏洞简要描述来看,确定是对之前S2-021的补充。
目前Struts2官方已经确认漏洞(漏洞编号S2-045,CVE编号:cve-2017-5638),并定级为高危风险。 该漏洞的影响范围:Struts2.3.5 到 Struts2.3.31 以及 Struts2.5 到 Struts2.5.10。 修复方式:更新至Struts 2.3.32...
另外,已通过升级方式修复了Apache Struts2 (S2-045)远程代码执行漏洞的用户,不在该漏洞影响的范围内。 【自查方式】 用户可查看web目录下/WEB-INF/lib/目录下的struts-core.x.x.jar文件,如果这个版本在...
java源代码Struts2 漏洞 S2-054、S2-055 和 Jackson 漏洞 CVE-2017-7525、CVE-2017-15095 调查报告 我们发表了一篇总结文章,只总结了要点,便于阅读。推荐给那些想要获得概览或没有空闲时间的人。 SSTtechlog 08 S2...
修复S2-045:Struts 2远程执行代码漏洞,时用到的jar,漏洞影响:基于Jakarta Multipart解析器执行文件上传时可能的RCE 影响版本:Struts 2.3.5 - Struts 2.3.31 Struts 2.5 - Struts 2.5.10
Struts2源码,eclipse直接可导入,可以针对Struts2-2.2以下版本的漏洞进行修复,解决s2-016漏洞