高版本jndi注入探索
字数 1241 2025-08-30 06:50:35

高版本JNDI注入探索与利用技术详解

1. JNDI注入基础回顾

JNDI (Java Naming and Directory Interface) 注入是一种通过操纵JNDI查找功能来实现远程代码执行的安全漏洞。攻击者通过控制JNDI查找的URL,使其指向恶意服务器,从而加载并执行任意代码。

2. 高版本JNDI注入技术

2.1 服务端选择

  • LDAP Server:比RMI更常用,能绕过某些限制
  • RMI Server:传统方式,但在高版本中受限较多

2.2 利用类分析

ELProcessor利用

  • 利用条件:
    • 目标类有public修饰的无参构造方法
    • 有public修饰的只接受String.class类型参数的方法
    • 该方法可造成漏洞

MLet利用

  • 可用于gadget探测
  • 只能load类,不能直接实例化

GroovyClassLoader

  • 通过blue.groovy等技术实现利用

其他可利用类

  • com.thoughtworks.xstream.XStream().fromXML(String)
  • com.alibaba.fastjson.JSON.parseObject(jsonString)
  • org.yaml.snakeyaml.Yaml().load(String)

3. 高版本Tomcat的限制与绕过

3.1 Tomcat 8.5.79+的修复

  • 移除了forceString进行任意方法调用的机制
  • BeanFactory#getObjectInstance方法中,若Reference存在forceString则抛出异常

3.2 剩余利用途径

4. 特定Factory利用技术

4.1 DruidDataSourceFactory利用

  • 特点:initConnectionSqls可执行SQL语句
  • 适用场景:需要通过执行SQL实现RCE的JDBC攻击

组合利用

  • h2 & druid
  • derby & druid
  • hsqldb & druid

攻击效果

  • 触发JDBC攻击后可进行:
    • 反序列化
    • JNDI注入
  • 局限性:效果有限

4.2 MemoryUserDatabaseFactory利用

  • Tomcat自带Factory
  • getObjectInstance可造成XXE漏洞

XXE利用

<!-- exp.xml -->
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>

创建Tomcat用户实现RCE

  • 可达到创建Tomcat用户进而RCE的效果
  • Linux环境下需结合BeanFactory创建文件夹
  • 局限性较大

5. 防御措施

  1. 升级到最新版本Tomcat
  2. 限制JNDI查找的协议和地址
  3. 禁用不必要的Factory类
  4. 实施严格的输入验证
  5. 使用安全管理器限制敏感操作

6. 总结

高版本JNDI注入虽然受到一定限制,但通过特定Factory类和组合利用技术仍存在攻击可能。安全人员应全面了解这些技术,以便更好地防御相关攻击。

高版本JNDI注入探索与利用技术详解 1. JNDI注入基础回顾 JNDI (Java Naming and Directory Interface) 注入是一种通过操纵JNDI查找功能来实现远程代码执行的安全漏洞。攻击者通过控制JNDI查找的URL,使其指向恶意服务器,从而加载并执行任意代码。 2. 高版本JNDI注入技术 2.1 服务端选择 LDAP Server :比RMI更常用,能绕过某些限制 RMI Server :传统方式,但在高版本中受限较多 2.2 利用类分析 ELProcessor利用 利用条件: 目标类有public修饰的无参构造方法 有public修饰的只接受String.class类型参数的方法 该方法可造成漏洞 MLet利用 可用于gadget探测 只能load类,不能直接实例化 GroovyClassLoader 通过blue.groovy等技术实现利用 其他可利用类 com.thoughtworks.xstream.XStream().fromXML(String) com.alibaba.fastjson.JSON.parseObject(jsonString) org.yaml.snakeyaml.Yaml().load(String) 3. 高版本Tomcat的限制与绕过 3.1 Tomcat 8.5.79+的修复 移除了 forceString 进行任意方法调用的机制 BeanFactory#getObjectInstance 方法中,若Reference存在 forceString 则抛出异常 3.2 剩余利用途径 仍可调用任意set方法 详细参考: https://xz.aliyun.com/news/16904 4. 特定Factory利用技术 4.1 DruidDataSourceFactory利用 特点: initConnectionSqls 可执行SQL语句 适用场景:需要通过执行SQL实现RCE的JDBC攻击 组合利用 h2 & druid derby & druid hsqldb & druid 攻击效果 触发JDBC攻击后可进行: 反序列化 JNDI注入 局限性:效果有限 4.2 MemoryUserDatabaseFactory利用 Tomcat自带Factory getObjectInstance 可造成XXE漏洞 XXE利用 创建Tomcat用户实现RCE 可达到创建Tomcat用户进而RCE的效果 Linux环境下需结合 BeanFactory 创建文件夹 局限性较大 5. 防御措施 升级到最新版本Tomcat 限制JNDI查找的协议和地址 禁用不必要的Factory类 实施严格的输入验证 使用安全管理器限制敏感操作 6. 总结 高版本JNDI注入虽然受到一定限制,但通过特定Factory类和组合利用技术仍存在攻击可能。安全人员应全面了解这些技术,以便更好地防御相关攻击。