-
struts2 新漏洞 S2-016、S2-017修补规划
添加时间:2013-7-18 点击量:昨天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
我俩之间有着强烈的吸引力。短短几个小时后,我俩已经明白:我们的心是一个整体的两半,我俩的心灵是孪生兄妹,是知己。她让我感到更有活力,更完美,更幸福。即使她不在我身边,我依然还是感到幸福,因为她总是以这样或者那样的方式出现在我心头。——恩里克·巴里奥斯《爱的文明》