Apache log4j2-RCE 漏洞复现及修复建议(CVE-2021-44228)

首先我们来简单介绍一下这个漏洞。

Apache log4j2是一款Java日志框架,它可以帮助开发者进行应用程序日志的记录和管理。CVE-2021-44228是Apache log4j2存在的一种远程代码执行漏洞,攻击者通过恶意构造log4j格式的请求,可以在服务器上执行任意代码,从而造成严重后果。

下面我们来具体讲解一下如何复现这个漏洞,并提供修复建议。

复现漏洞

  1. 下载log4j-core-2.17.0.jar

首先我们需要从Apache官网上下载log4j-core-2.17.0.jar文件,这个版本中已经修复了CVE-2021-44228漏洞。

wget https://mirror.bit.edu.cn/apache/logging/log4j/2.17.0/log4j-core-2.17.0.jar
  1. 构造恶意请求

我们使用curl模拟一条HTTP请求,并将其作为参数传入java命令中执行。

curl 'http://localhost:8080' -H 'User-Agent: () { :; }; /bin/bash -c "echo vulnerable"' | java -jar log4j-core-2.17.0.jar

如果服务器中安装了受影响的log4j版本,那么此时会在服务器上执行恶意代码,返回一个类似“vulnerable”的字符串,从而证明漏洞存在。

修复建议

Apache已经针对这个漏洞发布了修复版本,建议各位用户尽快升级至2.17.0及以上版本。如果无法立即升级,可将log4j-core的版本临时替换为2.17.0,以避免漏洞被恶意利用。

此外,用户还可以通过以下方式进一步提高服务器的安全性:

  1. 拒绝从外部源加载任意类,需要在log4j2.xml配置文件中设置为false:
<Configuration>
  <Properties>
    ...
    <Property name="log4j2.formatMsgNoLookups">True</Property>
    <Property name="log4j2.isThreadContextMapInheritable">True</Property>
  </Properties>

  <Script name="Test" language="javascript">
    <ScriptBody>java.lang.Runtime.getRuntime().exec('calc')</ScriptBody>
  </Script>

  <Appenders>
    <RollingFile name="file_appender" fileName="log.log"
              filePattern="log-%d{yyyy-MM-dd}-%i.log">
      ...
    </RollingFile>
  </Appenders>

  <!-- 这里设置为false -->
  <AllowDuplicatedLogMessages>false</AllowDuplicatedLogMessages>

  ...
</Configuration>
  1. 移除JMS Appender,避免恶意攻击者通过JMS Appender发送非法代码:
<Configuration>
  ...
  <!-- 移除JMS Appenders -->
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <RollingFile name="RollingFile" fileName="logs/myapp.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
      <Policies>
        <TimeBasedTriggeringPolicy interval="6" modulate="true" />
        <SizeBasedTriggeringPolicy size="250 MB" />
      </Policies>
    </RollingFile>
  </Appenders>

  ...
</Configuration>

以上是针对Apache log4j2-RCE漏洞的攻略说明,在使用前请仔细阅读并评估漏洞对你的系统造成的威胁。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Apache log4j2-RCE 漏洞复现及修复建议(CVE-2021-44228) - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • 如何使用Java字节码操纵库?

    Java字节码操纵库是一个用于读写、操纵Java字节码的工具库,常用于动态生成和修改字节码,实现AOP、代码增强等功能。本文将详细讲解Java字节码操纵库的使用攻略,包括环境配置、库的选择、常用API使用示例等。 环境配置 在开始使用Java字节码操纵库之前,我们需要确保系统已安装JDK,建议使用JDK 8及以上版本。然后,我们需要下载并导入所选的字节码操纵…

    Java 2023年5月11日
    00
  • 浅谈Java动态代理的实现

    浅谈 Java 动态代理的实现 什么是动态代理? Java 中的代理分为静态代理和动态代理两种。静态代理需要事先写好代理类,通过程序员手动编写的方式,代理对象和目标对象之间的关系就已经确定了。而动态代理是在程序运行时动态生成的代理对象,不需要事先写好代理类。动态代理可以根据目标对象动态地生成代理对象,无需为每个目标对象都编写代理类,增强代码的可重用性。 实现…

    Java 2023年5月26日
    00
  • java自动根据文件内容的编码来读取避免乱码

    为了让Java程序自动根据文件内容的编码来读取,避免乱码问题,可以使用以下步骤: 判断文件编码类型 首先需要判断文件的编码类型,以便正确地读取该文件。可以使用Java提供的 CharsetDetector 工具库来进行判断。该工具库会根据文件内容自动检测文件编码类型。 示例代码: import org.mozilla.universalchardet.Uni…

    Java 2023年5月20日
    00
  • Java之JsonArray用法讲解

    Java之JsonArray用法讲解 在Java中,经常需要使用Json格式的数据结构进行数据传递和交换。JsonArray是Json中的一个数据类型,本文将讲解JsonArray的用法。 JsonArray是什么? JsonArray是一个有序集合,其中包含了一系列的JsonElement。JsonElement是Json中的基本数据类型,可以是JsonA…

    Java 2023年5月26日
    00
  • JAVA JNI函数的注册过程详细介绍

    JNI(Java Native Interface)是Java向底层语言(如C、C++)展示其本地方法(Native Method)能力的桥梁,因此在使用JNI时需要将Java方法与本地C/C++函数进行关联,这便是JNI函数的注册过程。 JNI函数的注册流程如下: 1.在C/C++文件中,定义实现Java方法的本地函数。 2.使用javah命令生成与本地函…

    Java 2023年5月26日
    00
  • Java String index out of range:100错误解决方案详解

    针对这个主题,我将分为以下几个部分进行讲解: 问题描述 问题原因 解决方案详解 示例说明 总结 1. 问题描述 在Java开发中,我们可能会遇到 “String index out of range” 错误,错误提示通常会包含一个数字,如:100。这类错误会导致程序无法正常运行,需要寻找解决方案来解决。 2. 问题原因 这个错误的产生原因通常是由于字符串中字…

    Java 2023年5月27日
    00
  • 如何配置类路径?

    以下是关于如何配置类路径的完整使用攻略: 什么是类路径? Java程序在运行时需要加载类文件,而类文件的位置就是通过类路径来指定的。类路径可以包含多个路径,每个路径之间使用分隔符(如冒号或分号)分隔。类路径可以包含目录和JAR文件。 如何配置类路径? 下面介绍三种常见的配置类路径的方法。 方法一:使用命令行参数设置类路径 可以通过命令行参数设置类路径。例如,…

    Java 2023年5月12日
    00
  • Spring Data分页与排序的实现方法

    下面我会详细讲解 Spring Data 分页与排序的实现方法,包含以下内容: 分页与排序的概念及作用 Spring Data 分页与排序的 API 使用方法 示例代码1:Spring Data JPA 分页查询 示例代码2:Spring Data MongoDB 分页查询 一、分页与排序的概念及作用 在实际开发中,我们常常需要处理大量的数据,这时候就需要进…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部