高版本jndi注入探索
C0cr WEB安全 203浏览 · 2025-03-29 10:50

EvilServer选择

LDAPServer

这个不用rmi用ladp也是可以的。

RMIServer

可以看下面这个ELProcessor的例子

基于BeanFactory

利用类的条件

JDK或者常用库的类

有public修饰的无参构造方法

public修饰的只有一个String.class类型参数的方法,且该方法可以造成漏洞

ELProcessor

先简单回顾一下这个。

MLet

这个可以用来进行gadget探测。因为这个地方只能load。但是不能实例化。

GroovyClassLoader

blue.groovy

else

像这样可以利用的类还有很多。这里不再一一列举,比如

com.thoughtworks.xstream.XStream().fromXML(String)

com.alibaba.fastjson.JSON.parseObject(jsonString);

org.yaml.snakeyaml.Yaml().load(String)



修复

然而在高版本Tomcat中,移除了`forceString`进行任意方法调用的机制,下图为Tomcat 8.5.79版本下的`BeanFactory#getObjectInstance`方法,若在Reference中存在有`forceString`则抛出异常



但是依旧可以调用任意set方法。

具体可以参考这个 https://xz.aliyun.com/news/16904

基于DruidDataSourceFactory

这个的一个特点就是initConnectionSqls可以执行一些sql语句,在一些需要通过执行sql才能达到rce效果的jdbcAttack中非常适用。

h2&druid

DruidDataSourceFactory.getObjectInstance 简单概括就是从ref中获取一些配置信息后并通过setProperty进行一些配置后连接数据库。

derby&druid

hsqldb&druid

可以结合这个打一打,但是触发jdbc attack后可以进行两种操作。可以反序列化,可以jndi注入。感觉有点鸡肋。 https://github.com/mbadanoiu/CVE-2022-41853

MemoryUserDatabaseFactory

这个factory是tomcat自带的。对应的getObjectInstance可以造成xxe。

XXE

exp.xml



还可以达到创建tomcat用户进而RCE的效果。但是在linux环境下需要结合基于BeanFactory创建文件夹。局限性比较大。这里不多谈论了。

https://tttang.com/archive/1405/#toc_rce

0 条评论
某人
表情
可输入 255