Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-44228 — # Log4j 漏洞指南(CVE-2021-44228、CVE-2021-45046、CVE-2021-45105、CVE-2021-4104、CVE-2019-17571) 包含检测脚本、缓解步骤以及用于识别和修复受影响系统的思维导图。 | Kitploit
工具/GitHubGitHub/helsecert/cve-2021-44228
漏洞分析供应链安全学习与教育事件响应精选资源日志分析
GitHubhelsecert/cve-2021-44228

CVE-2021-44228

# Log4j 漏洞指南(CVE-2021-44228、CVE-2021-45046、CVE-2021-45105、CVE-2021-4104、CVE-2019-17571) 包含检测脚本、缓解步骤以及用于识别和修复受影响系统的思维导图。

查看仓库
11184年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Log4j 漏洞

更新于 2021年12月19日:Log4j 中不断发现新的漏洞及利用方式。我们在 git 仓库中添加了三个流程图(思维导图),分别描述 Log4j 的易受攻击版本、如何检查是否易受攻击 以及 针对不同漏洞的缓解措施。

建议

Log4j v2.x:

  • 识别使用 Log4j 2.x 版本的软件

  • 缓解 Log4j 中的漏洞

    • 将使用 Log4j 的软件更新到使用 Log4j 2.17.0 的版本

    如果上述操作不可行

    • 确保已实施针对 CVE-2021-44228 和 CVE-2021-45046 的 缓解措施,请注意此时系统仍易受 DoS 攻击
    • 如果系统特别关键,建议检查 Log4j2 配置中 Pattern Layouts 里的 Context Lookups

Log4j v1.x:

  • 识别使用 Log4j 1.x 版本的软件。

  • 如果企业中使用了 Log4j 1.x 版本,请与供应商沟通并要求其

    • 升级到 Log4j 2.x 版本
    • 或者改用其他日志库

漏洞详情

CVE-2021-44228

Log4j 漏洞中最大的恶狼。当 Log4j 记录字符串 ${jndi:ldap://\<攻击代码>/a} 的变体时,漏洞被利用。CVSS 10.0,远程代码执行(RCE)。

CVE-2021-45046

不如 CVE-2021-44228 严重,但同样危险。需要 Log4j 的非标准配置。CVSS 9.0,远程代码执行(RCE)和拒绝服务(DoS)。

CVE-2021-45105

不如 CVE-2021-44228 严重,危险性也稍低。CVSS 7.5,拒绝服务(DoS)。

CVE-2021-4104

仅影响 Log4j 1.x 版本。需要 Log4j 使用 JMSAppender。CVSS 6.6,远程代码执行(RCE) 利用条件:Log4j 使用 JMSAppender。要么直接配置了 JMSAppender(这很不常见),要么攻击者自行将其添加到 Log4j 配置中。 此外,攻击者必须有权修改 JMSAppender 的配置。如果满足此条件,攻击者通常已经拥有系统访问权限。因此,该漏洞被认为不太相关。

CVE-2019-17571

仅影响 Log4j 1.x 版本。需要 Log4j 使用 SocketServer。CVSS 9.8,远程代码执行(RCE) 允许具有网络访问权限的攻击者通过对应套接字执行代码。利用代码已公开可用。

对于 Java 8,Log4j 2.17.0 是最新版本,它缓解了上述所有漏洞。

版本 2.16.0 缓解了最严重的漏洞。

对于 Java 7,Log4j 发布了 2.12.2 版本。该版本不能缓解 CVE-2021-45105。Log4j 团队表示 Java 6 和 Java 7 均已不再受支持。他们是否还会为 Java 7 提供额外的 Log4j 安全更新尚不确定。

流程图“Mind map #1”清晰概述了是否存在各漏洞的条件。
判断是否易受 Log4j 攻击的流程图

由 Loïc Castel 制作。来自 github。

发现是否易受攻击

部分挑战在于,并非直接暴露在互联网上的服务器才易受攻击。漏洞可能存在于“链条”更后端的服务器中,该服务器接收相同数据并记录下来。这可能使得确定哪些系统已暴露、哪些未暴露变得困难。

流程图“Mind map #2”清晰概述了如何检查自身系统是否存在这些漏洞。

查找 Log4j 易受攻击实例的流程图

由 Loïc Castel 制作。来自 github。

通过触发漏洞 1. 创建 DNS 蜜罐令牌 [https://canarytokens.org/generate#](https://canarytokens.org/generate#)

创建 DNS 蜜罐

  1. 构建文本字符串 ${jndi:ldap://<蜜罐令牌>/a}
  2. 在可能被记录的所有字段中输入此字符串

"搜索" 使用蜜罐字符串

- User-agent
- 搜索字段
- 用户名
- ...

4. 跟踪蜜罐命中并找出 log4j 运行的位置。

参考:Florian Roth 的推文

通过扫描主机

Windows

以下命令扫描所有磁盘,包括映射的网络驱动器:

Get-PSDrive -PSProvider FileSystem | foreach {(gci ($_.Root) -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}

参考:https://twitter.com/0gtweet/status/1469661769547362305

如果只想检查本地磁盘:

Get-CimInstance win32_volume | Where-Object { $_.DriveType -eq 3 -and $_.DriveLetter -ne $null} | ForEach-Object {(gci ($_.DriveLetter+"\") -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}

参考:https://twitter.com/webmastir/status/1470386184052486155?s=20

如果还想检查计算机的事件日志:

Get-WinEvent -ListLog * |
  foreach { get-winevent @{logname=$_.logname; } -ea 0 } |
  where message -match 'jndi'

Linux #1

#!/bin/bash
find / -name '*log4j*.jar' -print0 2>/dev/null -print0 | while read -d $'\0' log4j; do
        echo -en "${log4j}: "$(unzip -p "${log4j}" | strings | grep -Po '^Implementation-Version:\s+([0-9\.]+)' | awk '{ print $NF }')"\n"
done
exit 0

以 root 身份运行

Linux #2

lsof | grep log4j-core

缓解漏洞

流程图“Mind map #3”概述了缓解措施的可能性。

Log4j 缓解措施流程图

由 Loïc Castel 制作。来自 github。

下面我们列出了一些用于执行缓解措施的资源。

#1 修补

Java 8

将 Log4j 更新到 2.17.0 版本

Java 7

将 Log4j 更新到 2.12.2 版本 注意:不能缓解 CVE-2021-45105

#4 缓解措施 #1:设置变量

⚠️ 此方法不再被认为是完全修复方案,因为它不能在所有情况下缓解所有漏洞。

Windows

[Environment]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/main/:SetEnvironmentVariable(%22LOG4J_FORMAT_MSG_NO_LOOKUPS%22,%22true%22,%22Machine%22)

注意:需要重启

来自 https://twitter.com/CyberRaiju/status/1469505680138661890

设置 JVM 参数

"‐Dlog4j2.formatMsgNoLookups=True"

命令行示例:

JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" teku --network mainnet

或者与 -Xmx 值一起使用:

JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx4g" teku

Systemd 配置示例:

Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true"'

或者与 -Xmx 值一起使用:

Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" "-Xmx4g'

此设置在应用程序重启时加载 来自 https://github.com/ConsenSys/teku/security/advisories/GHSA-mwfw-vm54-g3p7

#4 缓解措施 #2:删除 Java 类 删除 log4j jar 文件中的 JndiLookup.class 类。

jar 文件是一个归档文件(zip 文件),可以打开。然后可以删除文件。此操作可以使用 7-zip 等工具手动完成(见图),或通过脚本完成。

需要重启应用程序

参考:https://mogwailabs.de/en/blog/2021/12/vulnerability-notes-log4shell/9

删除 jndilookup.class

Windows

[Reflection.Assembly]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/main/:LoadWithPartialName(%27System.IO.Compression%27)
$JarFilLokasjon = 'C:\temp\log4j-core-2.13.0-test.jar'
$Filnavn   = 'JndiLookup.class' #此文件将被删除!

$Stream = New-Object IO.FileStream($JarFilLokasjon, [IO.FileMode]::Open)
$ZipMode   = [IO.Compression.ZipArchiveMode]::Update
$Zip    = New-Object IO.Compression.ZipArchive($stream, $ZipMode)

($zip.Entries | Where-Object { $Filnavn -contains $_.Name }) | ForEach-Object { $_.Delete() }
$zip.Dispose()
$stream.Close()
$stream.Dispose()

Linux

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

受影响的软件列表

https://github.com/NCSC-NL/log4shell/tree/main/software

https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592

https://github.com/cisagov/log4j-affected-db

下载工具