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
CVE-2025-49132-PoC | Kitploit
Ferramentas/GitHubGitHub/kerburenthusiasm/cve-2025-49132-poc
Geração de PayloadsAnálise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebTestes de Penetração
GitHubkerburenthusiasm/cve-2025-49132-poc

CVE-2025-49132-PoC

Ver Repositório
há 6 mesesAinda não revisado

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

CVE-2025-49132-PoC

Prova de conceito para CVE-2025-49132 para execução remota de código no Pterodactyl Panel <= 1.11.10

Este PoC utiliza referências de

  • https://www.exploit-db.com/exploits/52341
  • https://github.com/63square/CVE-2025-49132

Uso

root@kitploit:~
# Check if the web application is vulnerable
python3 poc.py -u <url> -m check

# Do something funny 
python3 poc.py -u <url> -m exploit -p <path_to_pear_dir> -t <path_to_write_to>

Detalhes Técnicos

Analisando o git diff do LocaleController.php entre v1.11.10 e v1.11.11 (link), podemos ver que o controller aceita os parâmetros locale e namespace sem qualquer validação ou sanitização.

Para entender por que isso é perigoso, vamos analisar o roteamento configurado em panel/routes/base.php. A rota remove explicitamente o middleware relacionado à autenticação, permitindo que usuários não autenticados chamem /locales/locale.json e forneçam os parâmetros de consulta necessários, como locale e namespace. Isso significa que esses parâmetros agora são controlados pelo usuário.

root@kitploit:~
Route::get('/locales/locale.json', Base\LocaleController::class)
    // Remove authentication middleware for this endpoint
    ->withoutMiddleware(['auth', RequireTwoFactorAuthentication::class]);

Voltando ao LocalController.php, a seguinte linha de código fornece a mágica do RCE.

root@kitploit:~
$this->loader->load($locale, str_replace('.', '/', $namespace))

A função load vem do framework de tradução do Laravel (aqui):

root@kitploit:~
public function load($locale, $group, $namespace = null) # 1
{
    if ($group === '*' && $namespace === '*') { # 2
        return $this->loadJsonPaths($locale);
    }

    if (is_null($namespace) || $namespace === '*') { # 3
        return $this->loadPaths($this->paths, $locale, $group); # 4
    } 

    return $this->loadNamespaced($locale, $group, $namespace);
}
  • Em #1, vemos que a função load recebe 3 argumentos. Embora seja confuso no início, o valor str_replace('.', '/', $namespace) é na verdade passado para o segundo argumento $group.
  • Em #2, $namespace nunca será *, pois sempre será NULL. Da mesma forma, $group nunca será *, pois temos controle sobre o que é passado aqui.
  • Em #3, como $namespace é null, esse ramo será executado, resultando na execução de loadPaths em #4.

Entendendo o exposto acima, passamos a analisar loadPaths, onde a mágica de fato acontece.

root@kitploit:~
protected function loadPaths(array $paths, $locale, $group)
{
    return (new Collection($paths))
    ->reduce(function ($output, $path) use ($locale, $group) {
        if ($this->files->exists($full = "{$path}/{$locale}/{$group}.php")) { # 1
            $output = array_replace_recursive($output, $this->files->getRequire($full)); # 2
        }

        return $output;
    }, []);
}
  • Em #1, o carregador constrói o nome de arquivo de tradução esperado acrescentando .php.
  • Em #2, se esse arquivo existir, ele é carregado via getRequire(), que executa o arquivo PHP e retorna seu array.

Como controlamos o parâmetro namespace da URL, podemos influenciar qual arquivo o aplicativo tenta carregar. Ao fornecer um valor que mapeia para um script .php, podemos fazer o servidor executar esse script. Por exemplo, para carregar phpinfo.php, podemos definir o parâmetro como: namespace=phpinfo

Explicações do PoC

O PoC tenta realizar a gravação arbitrária de arquivos através do pearcmd.php. Este método tem sido utilizado em muitos PoCs semelhantes e pesquisas de segurança.

  • https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/
  • https://medium.com/@lashin0x/local-file-inclusion-to-remote-code-execution-rce-bea0ec06342a

Observe que o pearcmd.php pode estar localizado em diferentes diretórios, como

  • /usr/share/php/pearcmd.php
  • /usr/share/php/PEAR/pearcmd.php
  • /usr/lib/php/pearcmd.php

e muitos outros.

O arquivo que será gravado conterá o típico código PHP malicioso.

Aviso Legal / Uso Responsável

Somente para testes autorizados. Não use em sistemas que você não possui ou para os quais não tem permissão explícita para testar.
Você é responsável por cumprir todas as leis aplicáveis; os autores não assumem nenhuma responsabilidade pelo uso indevido.

Problema

A biblioteca requests do Python é um pouco útil demais, pois codifica caracteres na URL fornecida. Passei muito tempo tentando resolver esse problema e acabei usando o curl diretamente. Agradeço se alguém puder oferecer alguma ajuda para esse problema.

Baixar ferramenta