高版本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 剩余利用途径
- 仍可调用任意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利用
<!-- exp.xml -->
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>
创建Tomcat用户实现RCE
- 可达到创建Tomcat用户进而RCE的效果
- Linux环境下需结合
BeanFactory创建文件夹 - 局限性较大
5. 防御措施
- 升级到最新版本Tomcat
- 限制JNDI查找的协议和地址
- 禁用不必要的Factory类
- 实施严格的输入验证
- 使用安全管理器限制敏感操作
6. 总结
高版本JNDI注入虽然受到一定限制,但通过特定Factory类和组合利用技术仍存在攻击可能。安全人员应全面了解这些技术,以便更好地防御相关攻击。