新浪博客

Struts2 s2-016漏洞的完整解决方案

2013-07-24 17:11阅读:
Struts2 s2-016漏洞
这里不做过多描述,官方描述见下面网址:
http://struts.apache.org/release/2.3.x/docs/s2-016.html

解决方案(以struts 2.1.8.1版本为例)
1.下载struts 2.1.8.1 源码
struts-2.1.8.1-src.zip
下载完成后,记得进行MD5验证

2.eclipse建立一个war项目

3.将struts-2.1.8.1-src.zip内的源码拖到项目的src目录下

4.找到对应struts-2.1.8.1的xwork-core-2.1.6.jar放入war项目的WEB-INF/lib目录下
此目的就是为了避免java文件带红叉

5.修改org.apache.struts2.dispatcher.mapper.DefaultActionMapper.java
此时文件应该没有红叉.有红叉主要是缺乏servlet-api.jar和xwork-core-2.1.6.jar在buildpath中
改动如下: 这里采用网上jason.zhou的修改
找到handleSpecialParameters方法,做下面黑体字的修改:

public void handleSpecialParameters(HttpServletRequest request,
ActionMapping mapping) {
// handle special parameter prefixes.
Set uniqueParameters = new HashSet();
Map parameterMap = request.getParameterMap();
for (Iterator iterator = parameterMap.keySet().iterator(); iterator
.hasNext();) {
String key = (String) iterator.next();
// Strip off the image button location info, if found
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 -- //


// Ensure a parameter doesn't get processed twice
if (!uniqueParameters.contains(key)) {
ParameterAction parameterAction = (ParameterAction) prefixTrie
.get(key);
if (parameterAction != null) {
parameterAction.execute(key, mapping);
uniqueParameters.add(key);
break;
}
}
}
}

6.点中org.apache.struts2.dispatcher.mapper.DefaultActionMapper.java,右键,导出(export),导出为JAR file
存盘为test.jar

7.用winrar打开test.jar,拷贝出org/apache/struts2/dispatcher/mapper/下的DefaultActionMapper类,一共有7个文件
DefaultActionMapper$1.class
DefaultActionMapper$2$1.class
DefaultActionMapper$2$2.class
DefaultActionMapper$2$3.class
DefaultActionMapper$2$4.class
DefaultActionMapper$2.class
DefaultActionMapper.class

8.用winrar打开struts2-core-2.1.8.1.jar
进入org/apache/struts2/dispatcher/mapper/目录,将将上面拷贝出的7个文件拷贝入,覆盖原来的同名文件

9.将struts2-core-2.1.8.1.jar拷贝入你自己的项目,覆盖原来的struts2-core-2.1.8.1.jar

10.启动你的项目,重新s2-016漏洞进行测试
如果发现测试结果正常(不响应.do?action:,.do?redrect:,.do?redirectAction),则证明补丁打好,漏洞被堵住了.




我的更多文章

下载客户端阅读体验更佳

APP专享