JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。 现在JNDI已经成为J2EE的标准之一,所有的J2EE容器都必须提供一个JNDI的服务。
JNDI支持的服务主要有:DNS、LDAP、CORBA、RMI等。
推荐阅读:
javax.naming.InitialContext
的lookup()
方法。
jndi客户端示例:
package com.rmi.demo;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class jndi {
public static void main(String[] args) throws NamingException {
String uri = "rmi://127.0.0.1:1099/Exploit"; // 指定查找的 uri 变量
InitialContext initialContext = new InitialContext();// 得到初始目录环境的一个引用
initialContext.lookup(uri); // 获取指定的远程对象
}
}
JDK 11.0.1、8u191、7u201、6u211,trustURLCodebase default false,限制了远程加载codebase。
bypass:触发本地Gadget.