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中,流程控制语句是指程序员可以通过使用一些关键字和语法来控制流程的执行顺序,使得程序能够根据不同的条件或者需求,动态控制流程的执行。Java中的流程控制语句包括分支语句和循环语句。 分支语句 Java中的分支语句主要有if-else和switch两种。 if-else语句 if-else语句是Jav…

    Java 2023年5月23日
    00
  • window.location和document.location的区别分析

    下面我将详细讲解一下“window.location和document.location的区别分析”的攻略。 标题 简介 window.location和document.location是JavaScript中的两个对象,它们都表示当前页面的URL地址。虽然它们的属性和方法非常相似,但它们之间是有一些区别的。 window.location和documen…

    Java 2023年6月15日
    00
  • Java多线程CyclicBarrier的实现代码

    Java多线程中的CyclicBarrier是一种同步工具,能够让线程自动等待,直到所有线程同时到达某一个屏障点,再同时开始进行后面的操作。在本文中,我们将详细讲解CyclicBarrier的实现代码,包括定义CyclicBarrier、初始化CyclicBarrier、实现CyclicBarrier以及使用CyclicBarrier的代码示例。 定义Cyc…

    Java 2023年5月18日
    00
  • 关于Office文档保存的几点小常识

    关于Office文档保存的几点小常识 在使用Office软件(如Word、Excel、PowerPoint等)时,我们常常需要保存文档。但是,不同的保存方式和设置可能会导致文档在保存过程中出现各种问题。下面就为大家介绍几点关于Office文档保存的小常识,希望能对大家有所帮助。 1. 保存前建议先备份 在进行复杂的操作、编辑大量数据、或者是文档比较重要时,我…

    Java 2023年5月23日
    00
  • Python提取支付宝和微信支付二维码的示例代码

    针对Python提取支付宝和微信支付二维码的示例代码,我可以提供以下攻略: 1. 安装必备库 首先,我们需要使用Python requests库来获取支付宝和微信支付页面的HTML内容,因此我们需要确保该库已经安装。如果你还没有安装requests库,可以在终端输入以下命令: pip install requests 2. 获取HTML内容 接下来,我们需要…

    Java 2023年5月23日
    00
  • java文件操作工具类分享(file文件工具类)

    Java文件操作工具类分享 在Java程序中,对文件操作是常见的需求,为了提高开发效率,我们可以自己封装一些工具类来进行文件操作。本文将介绍如何使用Java文件操作工具类来管理文件,包括文件的读取、写入、复制、移动、删除等常见操作。 文件读取 在Java程序中,读取文件需要使用FileReader类或BufferedReader类。FileReader类可以…

    Java 2023年5月20日
    00
  • 深入学习JavaScript执行上下文

    下面我将给出一份完整的攻略,帮助大家深入学习 JavaScript 执行上下文。 什么是执行上下文 在讲解如何深入学习 JavaScript 执行上下文之前,我们先来介绍一下什么是执行上下文。 在 JavaScript 中,每当代码运行到一个函数或者全局代码块的时候,都会创建一个执行上下文,用于存储当前代码执行的状态。执行上下文包含了当前环境中的变量、函数、…

    Java 2023年5月26日
    00
  • 详解Mybatis动态sql

    下面是详解Mybatis动态sql的攻略,包括动态sql的基本概念、应用场景和常用语法,最后会给出两个示例。 动态sql的基本概念 动态sql是一种根据不同条件生成不同sql语句的技术,可以使我们在不同情况下更加灵活地进行数据库操作。在Mybatis中,动态sql通过使用标签来实现。 Mybatis中常用的动态sql标签有: <if>:表示如果满…

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