栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

漏洞:CVE-2021-31805——升级struts版本2.0.6-2.5.30

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

漏洞:CVE-2021-31805——升级struts版本2.0.6-2.5.30

漏洞:CVE-2021-31805——升级struts版本2.0.6-2.5.30
  • 一、切换jar包更改配置
  • 二、页面标签修改
  • 三、异常原因分析

漏洞描述

Apache struts2部分版本存在漏洞,对不受信任的用户输入使用强制OGNL可能导致远程代码执行,黑客可利用该漏洞控制服务器。
一、切换jar包更改配置

切换jar包:

struts2-core-2.5.30.jar
struts2-spring-plugin-2.5.30.jar
删除 xwork-2.0.4  这个包已经包含在了struts2-core-2.5.30.jar中
commons-fileupload-1.4.jar
commons-io-2.6.jar

修改web.xml配置


		struts2
		
			org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
		

启动报错:java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager

引入jar包:log4j-api-2.12.4.jar

启动报错:java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

引入jar包:commons-lang3-3.8.1.jar

启动报错:java.lang.NoSuchMethodError: ognl.SimpleNode.isEvalChain(Lognl/OgnlContext;)Z

升级jar包:ognl-2.6.11.jar ---> ognl-3.1.29.jar

启动报错:java.lang.NoClassDefFoundError: freemarker/template/Version

升级jar包:freemarker-2.3.10.jar ---> freemarker-2.3.31.jar

访问主页面报错,时而好使时而不好使

ERROR DefaultDispatcherErrorHandler Exception occurred during processing request: null
 java.lang.NullPointerException
	at com.opensymphony.xwork2.validator.DelegatingValidatorContext.makeTextProvider(DelegatingValidatorContext.java:212)
	at com.opensymphony.xwork2.validator.DelegatingValidatorContext.(DelegatingValidatorContext.java:65)
	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:127)
	at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:123)
	at com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:227)



---改为--->



如果还不好使,检查validator配置的自定义类中是否引入了某些已被删除的包





改为:







    regex:.*
	
			
				/pages/xxx/xxx.jsp
			
	 

如果页面访问有问题可以尝试进行下面修改

引入jar包:javassist-3.20.0-GA.jar


    
            struts2
            /struts
        Document doc = DomHelper.parse(in, dtdMappings);

        if (doc != null) {
            NodeList nodes = doc.getElementsByTagName("validator");

            for (int i = 0; i < nodes.getLength(); i++) {
                Element validatorElement = (Element) nodes.item(i);
                String name = validatorElement.getAttribute("name");
                String className = validatorElement.getAttribute("class");

                try {
                    // catch any problems here
                    objectFactory.buildValidator(className, new HashMap(), ActionContext.getContext().getContextMap());
                    validators.put(name, className);
                } catch (Exception e) {
                    throw new ConfigurationException("Unable to load validator class " + className, e, validatorElement);
                }
            }
        }
    }
    ...
}
  1. 这个方法中加载了两个配置文件com/opensymphony/xwork2/validator/validators/default.xml和validators.xml

    第一个文件是jar包中自己的配置文件,没问题

    第二个文件就比较坑了,他在系统的resources目录下查找文件,找到则加载

    因为我的文件是老版本的配置文件,因此在Document doc = DomHelper.parse(in, dtdMappings);这一步格式化时,格式化报错了,这个时候抛出一个有意思的异常java.net.ConnectException: Connection timed out: connect

    接着一路上抛,在这个位置打印了一个LOG.warn, 而我的后台风平浪静。。。。

    public class InterceptorBuilder {
        ...
        public static List constructInterceptorReference(InterceptorLocator interceptorLocator,
                                                                             String refName, Map refParams, Location location, ObjectFactory objectFactory) throws ConfigurationException {
            ...
            if (referencedConfig instanceof InterceptorConfig) {
                    InterceptorConfig config = (InterceptorConfig) referencedConfig;
                    Interceptor inter;
                    try {
                        inter = objectFactory.buildInterceptor(config, refParams);
                        result.add(new InterceptorMapping(refName, inter, refParams));
                    } catch (ConfigurationException ex) {
                  	    LOG.warn(new ParameterizedMessage("Unable to load config class {} at {} probably due to a missing jar, which might be fine if you never plan to use the {} interceptor",
                                config.getClassName(), ex.getLocation(), config.getName()), ex);
                    }
    
                }
            ...
        }
        ...
    }
    
  2. struts2-core-2.5.30版本依赖了log4j-api-2.12.4, 这与老版本的log4j-1.2.13貌似不兼容,引入log4j-core-2.12.4.jar是否会打印,有待验证,log4j-core在2.16版本前的都有漏洞,暂时不处理

  3. 对比com/opensymphony/xwork2/validator/validators/default.xml和validators.xml两个文件发现头部标签不一致,修改后加载正常

  4. 如果还不好使,检查validator配置的自定义类中是否引入了某些已被删除的包

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845496.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号