加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2013-07-24 17:11:13)
标签:

struts2s2-016

分类: java和数据库

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),则证明补丁打好,漏洞被堵住了.

 

 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有