• Struts2漏洞修复总结


    Struts2的S2-016漏洞是之前比较重大的漏洞,也是一些老系统的历史遗留问题

    此漏洞影响struts2.0-struts2.3的所有版本,可直接导致服务器被远程控制从而引起数据泄漏,影响巨大

    漏洞修复总结有4种方式:

    1、升级版本

    这也是Apache官方给出的建议,把Struts2的版本升级到2.3.15以上的版本,这种方式只需要替换一些jar包,归纳如下:

    commons-lang3-3.2.jar
    freemarker-2.3.22.jar
    javassist-3.11.0.GA.jar
    ognl-3.0.6.jar
    struts2-core-2.3.24.jar
    struts2-spring-plugin-2.3.24.jar
    xwork-core-2.3.24.jar

    只需要用上述jar包(版本可能会有差距)替换老系统中的旧版本jar包;

    但是这种方式存在一定的缺陷,如果系统非常复杂,可能会有版本不兼容,jar版本冲突,导致系统功能不能 使用的情况;

    2、覆盖JAR包

    下载上述图片,把后缀名改为zip,把里面解压出来的三个文件夹添加到漏洞的系统的src目录下

    然后再web.xml文件中添加代码:

    <listener> 
      <listener-class>org.hdht.commonweb.listener.MyServletContextListener</listener-class> 
     </listener> 

    最后发布项目,重启服务器

    3、修改Struts2的源码

    找到项目中的struts2-core-2.2.3.jar,反编译得到源码,在eclipse中新建一个java项目,把反编译的源码导进去

    修改orgapachestruts2dispatchermapperDefaultActionMapper.java这个文件中的handleSpecialParameters方法

    在while循环(for循环)中加入下面代码:

    1 if (key.endsWith(".x") || key.endsWith(".y")) {
    2                 key = key.substring(0, key.length() - 2);  
    3             }  

    保存,这个新项目可能会有错误,需要导入两个jar包,xwork-core-2.1.6.jar和servlet-api.jar

    把这个新项目导出成jar包,把下图中的7个类,替换掉原先struts2-core-2.2.3.jar中的7个类

    4、结合上面的第2和第3种方式

    还是需要用到struts2的源码,同第3步,反编译得到源码,导入到一个新的项目中

    下载第2步中的压缩包,解压之后得到三个文件,把这三个文件夹添加到新项目的 orgapachestruts2dispatchermapper包中,如下图

    然后,再修改orgapachestruts2dispatchermapperDefaultActionMapper.java这个文件中的handleSpecialParameters方法

    在while循环中加入如下代码:

    1 if (JavaEEbugRepair.repair_s2_017(key)) {
    2                 return;
    3             }
    4             if ((key.contains("action:")) || (key.contains("redirect:")) || (key.contains("redirectAction:"))) {  
    5                 return;  
    6             } 

    保存,把新项目导出成jar包

    把原来jar中的7个类替换,加入新包repair,再把替换之后的jar复制到项目中,替换之前的jar包

    总结:

    以上4种方式基本能处理所有项目的S2-016漏洞;

  • 相关阅读:
    【计算机图形学】变换 (Transform)
    [图像处理]基于 PyTorch 的高斯核卷积
    [PyTorch] torch.squeee 和 torch.unsqueeze()
    【图像分析】边缘检测中的图像梯度以及各种梯度算子的介绍
    你买的课程看了吗?
    为什么用抓包工具看HTTPS包是明文的
    定制化Fiddler
    软件测试常见网络相关面试题
    单线程和多线程执行对比—Python多线程编程
    多线程实践—Python多线程编程
  • 原文地址:https://www.cnblogs.com/lianliang/p/5457686.html
Copyright © 2020-2023  润新知