什么是log4j2
Log4j2是java日志框架(java开发中的基础组建)用来记录处理日志信息
log4j2的漏洞原理
CVE-2021-44228
Log4j2提供了Lookup功能模块,就是因为该模块所导致的问题
Log4j在处理打印程序日志记录时,如果日志中包含${}时,则会去解析其中的值,(例如 ${java.version} 会被解析为对应的Java版本)攻击可以利用这一点进行JNDI注入, 使用LDAP/RMI协议,从远程服务器上获取恶意的class文件(对象),并在本地加载返回的Class类,造成命令执行漏洞
那么什么又是jndi注入、LDAP/RMI
JNDI
JNDI(Java Naming and Directory Interface,Java命名和目录接口)
JNDI相当与是Java里面的一个api接口,用于访问不同的命名和目录服务(如 LDAP、DNS、RMI 等)
JNDI的架构只要由两部分组成:
JNDI API --- Java应用程序用来访问目录服务的接口
JNDI SPI(服务供应接口)--- 为底层的具体目录服务提供统一接口
JNDI注入原理
JNDI接口在初始化时,如果Lookup(xxxxx)方法的参数可控,攻击者就可以将传入恶意参数,通过jdni去加载恶意的类class。攻击时常用的就是通过`RMI`和`LDAP`两种协议。
LDAP和RMI
LDAP
LDAP(轻量级目录访问协议)---端口 389(明文) 636(LDAPS,加密)
定义:是由目录数据库和一套访问协议组成的系统。
作用:反序列化时会被调用(如用户认证、组织架构查询)
RMI
RMI(远程方法调用)---端口 1099
作用:该协议用于远程调用应用程序编程接口,使客户机上运行的程序可以调用远程服务器上的对象
LDAP和RMI区别
主要区别在于它们的目标和用途:
JNDI主要用于查找和访问网络资源,
而RMI主要用于在网络上的不同Java虚拟机之间进行对象方法调用

1万+

被折叠的 条评论
为什么被折叠?



