高版本 JDK 限制下 JNDI 注入的利用与绕过

1. 背景知识

  • JNDI(Java Naming and Directory Interface):Java 提供的一套统一 API,用来访问各种目录和命名服务(RMI、LDAP、DNS、CORBA 等)。

  • 典型应用:JNDI 常用于获取对象引用,比如从 LDAP 获取用户对象,从 RMI 获取远程服务。

  • 安全风险:如果 lookup() 的参数可控,就可能被引导去加载攻击者构造的恶意对象,导致远程代码执行(RCE)。


2. 基本攻击流程

  1. 攻击者在 RMI Registry 上绑定一个恶意对象(Reference)。

  2. 恶意对象的类文件存放在 HTTP/FTP/SMB 等服务上。

  3. 受害者调用 InitialContext.lookup(URI)URI 可控。

  4. 受害者客户端会尝试加载 Stub:

    • 优先本地 CLASSPATH

    • 本地找不到 → 向远程 Codebase 拉取恶意类。

  5. 恶意类在加载时执行代码(构造函数、静态代码块、getObjectInstance())。

前置条件

  • RMI 客户端环境允许远程加载 Codebase。

  • 属性 java.rmi.server.useCodebaseOnly=false(默认 true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值