本文介绍: 本文是log4j2远程代码执行漏洞原理和漏洞复现的详细说明。基于vulhub搭建靶场,攻击者利用log4j2框架下的lookup服务提供的{}字段解析功能,在{}内使用了了JNDI注入的方式,通过RMI或LDAP服务远程加载了攻击者提前部署好的恶意代码(.class),最终造成了远程代码执行。
漏洞原理
啥是log4j2?
log4j2是apache下的java应用常见的开源日志库,是一个就Java的日志记录工具。在log4j框架的基础上进行了改进,并引入了丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI组建等,被应用于业务系统开发,用于记录程序输入输出日志信息。
啥是JNDI?
由于漏洞利用会涉及到JNDI注入相关的知识,这里简要做一个对JNDI的介绍。
JNDI,全称为Java命名和目录接口(Java Naming and Directory Interface),是SUN公司提供的一种标准的Java命名系统接口,允许从指定的远程服务器获取并加载对象。JNDI相当于一个用于映射的字典,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。JNDI注入攻击时常用的就是通过RMI和LDAP两种服务,本文以LDAP服务为例进行复现。
log4j2远程代码执行漏洞原理
log4j2框架下的lookup查询服务提供了{}字段解析功能,传进去的值会被直接解析。例如${java:version}会被替换为对应的java版本。这样如果不对lookup的出栈进行限制,就有可能让查询指向任何服务(可能是攻击者部署好的恶意代码)。
攻击者可以利用这一点进行JNDI注入,使得受害者请求远程服务来链接本地对象,在lookup的{}里面构造payload,调用JNDI服务(LDAP)向攻击者提前部署好的恶意站点获取恶意的.class对象,造成了远程代码执行(可反弹shell到指定服务器)。
靶场搭建
漏洞检测
漏洞利用(获取反弹shell)
方法一:编写恶意文件
方法二:直接利用现成的JNDI注入工具
结语
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。