1. 背景知识
-
JNDI(Java Naming and Directory Interface):Java 提供的一套统一 API,用来访问各种目录和命名服务(RMI、LDAP、DNS、CORBA 等)。
-
典型应用:JNDI 常用于获取对象引用,比如从 LDAP 获取用户对象,从 RMI 获取远程服务。
-
安全风险:如果
lookup()的参数可控,就可能被引导去加载攻击者构造的恶意对象,导致远程代码执行(RCE)。
2. 基本攻击流程
-
攻击者在 RMI Registry 上绑定一个恶意对象(Reference)。
-
恶意对象的类文件存放在 HTTP/FTP/SMB 等服务上。
-
受害者调用
InitialContext.lookup(URI)且URI可控。 -
受害者客户端会尝试加载 Stub:
-
优先本地 CLASSPATH
-
本地找不到 → 向远程 Codebase 拉取恶意类。
-
-
恶意类在加载时执行代码(构造函数、静态代码块、
getObjectInstance())。
前置条件
-
RMI 客户端环境允许远程加载 Codebase。
-
属性
java.rmi.server.useCodebaseOnly=false(默认true

2189

被折叠的 条评论
为什么被折叠?



