Sploitus

Exploit for CVE-2021-44228

kitploit · 2026-09-05

Exploit Code

MARKDOWN268 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-HELSECERT-CVE-2021-44228
# 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 攻击的流程图](https://assets.kitploit.com/production/public/readmes/26435/bf3ce9f37ed255c52e810709e9943f9cbf083df8ba97ea42ce1a785f9dcc7f31.png)

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

# 发现是否易受攻击

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

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

![查找 Log4j 易受攻击实例的流程图](https://assets.kitploit.com/production/public/readmes/26435/d7d46b270b025f5113f3d017eed32f2234846bfa2e2ebe7acca7d13cd4302b7b.png)

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

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

![创建 DNS 蜜罐](https://assets.kitploit.com/production/public/readmes/26435/d7d965e6dc658e334eeac7434300a34117c3113fbd17e7c4a908e17219f0416f.png)

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



!["搜索" 使用蜜罐字符串](https://assets.kitploit.com/production/public/readmes/26435/aeb24b0835ed04152f86142d5eb4e052205617e62ff830f35588043789b289a0.png)

root@kitploit:~
    
    
    - User-agent
    - 搜索字段
    - 用户名
    - ...
    

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

参考:Florian Roth 的推文

通过扫描主机

#### Windows

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

root@kitploit:~
    
    
    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

如果只想检查本地磁盘:

root@kitploit:~
    
    
    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

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

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

#### Linux #1

root@kitploit:~
    
    
    #!/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
    

# 缓解漏洞

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

![Log4j 缓解措施流程图](https://assets.kitploit.com/production/public/readmes/26435/cbf9463ec35cc74de0cf046d7c6bc71c839076fa9566b0b1f53725c5ffa63a9e.png)

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

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

#1 修补 

## Java 8

将 Log4j 更新到 2.17.0 版本

## Java 7

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

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

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

### Windows

root@kitploit:~
    
    
    [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 参数

root@kitploit:~
    
    
    "‐Dlog4j2.formatMsgNoLookups=True"
    

命令行示例:

root@kitploit:~
    
    
    JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" teku --network mainnet
    

或者与 -Xmx 值一起使用:

root@kitploit:~
    
    
    JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx4g" teku
    

Systemd 配置示例:

root@kitploit:~
    
    
    Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true"'
    

或者与 -Xmx 值一起使用:

root@kitploit:~
    
    
    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](https://assets.kitploit.com/production/public/readmes/26435/e5e9fc1b46da6337207da316597e34863d74148457e1aeeed161ce61ee945848.png)

#### Windows

root@kitploit:~
    
    
    [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

root@kitploit:~
    
    
    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