
CVE-2023-41892を再現するためのPoCスクリプトとDockerラボです。Craft CMSにおける認証前リモートコード実行の脆弱性です。ログポイズニングとImagick MSLファイル書き込みエクスプロイトを含みます。
このリポジトリには、Craft CMS の CVE-2023-41892(認証不要のリモートコード実行の脆弱性)を再現するための概念実証スクリプトとローカルの Vulhub ラボが含まれています。
このプロジェクトは、許可されたローカルラボまたは明示的なテスト許可があるシステムでのみ使用してください。
CVE-2323-41892_PoC/
+-- README.md
+-- LFI_to_RCE.py
+-- Imagick_PoC.py
+-- Vulnhub_env/
+-- docker-compose.yml
+-- README.md
+-- README.zh-cn.md
+-- 1.png ... 5.png
| パス | 目的 |
|---|
LFI_to_RCE.py | ログポイズニングと、Psy\Configuration ガジェットを介したローカルファイルインクルージョンによる RCE の PoC。 |
Imagick_PoC.py | Imagick MSL ガジェットを介した任意のファイル書き込みの PoC。 |
Vulnhub_env/docker-compose.yml | 脆弱な Craft CMS 4.4.14 と MySQL 5.7 を起動する Docker Compose ラボ。 |
Vulnhub_env/README.md | リクエスト例とスクリーンショットを含む、元の Vulhub スタイルの再現ノート。 |
Vulnhub_env/README.zh-cn.md | Vulhub 再現ノートの中国語版。 |
Vulnhub_env/*.png | Vulhub 環境ドキュメントで使用されるスクリーンショット。 |
CVE-2023-41892 は Craft CMS バージョン 4.0.0-RC1 から 4.4.14 に影響します。この問題は Craft CMS 4.4.15 で修正されました。
両方のスクリプトで使用される脆弱なエンドポイントは次のとおりです:
/index.php?action=conditions/render
PoC はデフォルトのローカルラボ URL を対象としています:
http://localhost:8088
ラボが別のホストまたはポートで動作している場合は、LFI_to_RCE.py と Imagick_PoC.py の上部付近にある URL の値を更新してください。
requestsPython の依存関係をインストールします:
pip install requests
脆弱な Craft CMS 環境を起動します:
cd Vulnhub_env
docker compose up -d
Craft CMS インストーラーを開きます:
http://localhost:8088/admin/install
インストール中に次のデフォルトデータベース設定を使用します:
| 設定 | 値 |
|---|---|
| データベースホスト | db |
| データベース名 | craftcms |
| データベースユーザー | root |
| データベースパスワード | root |
インストール後、次の URL でサイトにアクセスできることを確認します:
http://localhost:8088
リポジトリのルートからコマンドを実行します:
cd CVE-2323-41892_PoC
実行:
python LFI_to_RCE.py
動作の仕組み:
Craft CMS のログに PHP コードを含む不正な JSON を送信します。
現在のローカル日付を使用してログファイルのパスを構築します:
../storage/logs/web-YYYY-MM-DD.log
craft\elements\conditions\users\UserCondition と \Psy\Configuration を使用して、ポイズニングされたログファイルをインクルードします。
レスポンスに phpinfo() の出力が現れるかどうかを確認します。
期待される成功出力:
[*] Starting Log Poisoning...
[+] Payload sent successfully!
[*] Starting LFI to RCE...
[+] phpinfo() executed successfully!
実行:
python Imagick_PoC.py
動作の仕組み:
Imagick ガジェットを使用してオブジェクトの作成をトリガーします。webshell.php をウェブルートに書き込もうとします。http://localhost:8088/webshell.php にリクエストし、phpinfo() の出力を確認します。期待される成功出力:
[*] Sending multipart/form-data payload to trigger Imagick gadget...
[+] Success: phpinfo() output found.
Imagick パスは、ペイロードがトリガーされた後に PHP ワーカーをクラッシュさせる可能性があります。Vulhub ラボでは、クラッシュ前に webshell.php が書き込まれていれば、これは正常な動作です。
両方のスクリプトはファイルの先頭でターゲット URL を定義しています:
URL = "http://localhost:8088"
脆弱なラボが別のアドレスで公開されている場合は、この値を変更してください。
Imagick_PoC.py は生成されたファイルを次の場所で確認します:
OUTPUT_FILE = "/webshell.php"
コンテナが実行中であることを確認します:
cd Vulnhub_env
docker compose ps
サイトが http://localhost:8088 でアクセス可能であることを確認します。
別のサービスが既にポート 8088 を使用していないか確認します。
公開ポートを変更した場合は、Python スクリプトの URL の値を更新します。
LFI_to_RCE.py が PHP Version を表示しないstorage/logs/ の下にログを書き込んでいることを確認します。LFI_to_RCE.py 内の生成される web-YYYY-MM-DD.log パスを更新します。Imagick_PoC.py が /webshell.php に対して 404 を返す/tmp/php* の下に作成されることを確認します。ラボを停止します:
cd Vulnhub_env
docker compose down
クリーンな再インストールを行う場合は、コンテナとデータベースボリュームを削除します:
docker compose down -v
Craft CMS を 4.4.15 以降にアップグレードしてください。
悪用が疑われる場合は、Craft CMS のセキュリティキー、データベース認証情報、アプリケーションのシークレット、および環境に保存されているすべての認証情報をローテーションしてください。