如果我们可以控制JNDI客户端中传入的url 就可以起一个恶意的RMI 让JNDI来加载我们的恶意类从而进行命令执行
Log4j2引入Lookup的统一接口 接口允许查找 输出 实现对象功能 由于会解析打印JNDI的数据 配合JNDI远程下载ldap服务构造的恶意class
Apache Solr、Apache Flink、Apache Druid、Apache Struts2、srping-boot-stra ter-log4j2
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
大致意思是可以实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。
解析json过程 支持使用auto type实例化一个类 调用类的set/get访问属性
com.sun.jndi.rmi.object.trustURLCodebase
限制可以使用com.sun.rowset.jdbcRowSetlmpl
的利用链 借助JNDI注入命令执行NDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一。JNDI提供统一的客户端API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,可以用来定位用户、网络、机器、对象和服务等各种资源。比如可以利用JNDI再局域网上定位一台打印机,也可以用JNDI来定位数据库服务或一个远程Java对象。JNDI底层支持RMI远程对象,RMI注册的服务可以通过JNDI接口来访问和调用。
JNDi是应用程序设计的Api,JNDI可以根据名字动态加载数据,支持的服务主要有以下几种:
DNS、LDAP、CORBA对象服务、RMI
RMI(Remote Method Invocation)是专为Java环境设计的远程方法调用机制,远程服务器实现具体的Java方法并提供接口,客户端本地仅需根据接口类的定义,提供相应的参数即可调用远程方法。