struts2 漏洞 S2-016、S2-017修补方案
来源:互联网 发布:中国青少年犯罪的数据 编辑:程序博客网 时间:2024/05/01 08:53
官方描述:
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" />
- struts2 漏洞 S2-016、S2-017修补方案
- struts2 最新漏洞 S2-016、S2-017修补方案
- Struts2高危漏洞修复方案(S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2 高危漏洞修复方案 (S2-016/S2-017)
- Struts2漏洞S2-016和S2-017
- 知道struts2-s2-016-s2-017漏洞之感
- struts漏洞修补过程之S2-016
- Struts漏洞修补过程之S2-016
- Struts2 s2-033漏洞修复方案
- 如何做好现阶段的网站排名?
- Java中匿名类的两种实现方式
- 策略模式
- getHibernateTemplate()和getSession()的区别
- 大白话解析模拟退火算法
- struts2 漏洞 S2-016、S2-017修补方案
- dede织梦调用顶级二级栏目及下三级栏目方法(数据库实
- OCIServerAttach failed ORA-12154: TNS:could not resolve the connect identifier specified
- iTween动画代码demo
- Mysql:This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 错误解决
- 必看**Java三大主流框架概述
- .metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\globalReport_backupdoesnot exist
- 前台线程与后台线程,AfxGetApp->GetMainWnd()与AfxGetMainWnd的不同
- CSS里的style标签内为什么要加html注释符