Struts2 s2-016漏洞
这里不做过多描述,官方描述见下面网址:
解决方案(以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),则证明补丁打好,漏洞被堵住了.