Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-79387-PbootCMS-SQL-Injection — Prueba de concepto para CVE-2026-79387, una inyección SQL autenticada en la gestión de usuarios de PbootCMS que permite actualizaciones arbitrarias de campos y la toma de control de cuentas. | Kitploit
Herramientas/GitHubGitHub/jhli07/cve-2026-79387-pbootcms-sql-injection
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de Penetración
GitHubjhli07/cve-2026-79387-pbootcms-sql-injection

CVE-2026-79387-PbootCMS-SQL-Injection

Prueba de concepto para CVE-2026-79387, una inyección SQL autenticada en la gestión de usuarios de PbootCMS que permite actualizaciones arbitrarias de campos y la toma de control de cuentas.

Ver Repositorio
hace 10h 20mAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-79387: Inyección SQL en el módulo de gestión de usuarios de PbootCMS V3.2.5

Resumen

CampoDetalle
ID CVECVE-2026-79387
ProductoPbootCMS
Versiones afectadas3.2.0 – 3.2.5, y posiblemente anteriores
Tipo de vulnerabilidadInyección SQL (CWE-89)
Vector de ataqueRemoto (autenticado)
Severidad CVSSAlta
DescubridorJihaoLi
Proveedorhttps://www.pbootcms.com/

Descripción de la vulnerabilidad

Existe una vulnerabilidad de inyección SQL en el módulo de gestión de usuarios de PbootCMS V3.2.5. La vulnerabilidad reside en el método mod() de /apps/admin/controller/system/UserController.php (línea 149) y en el método modUser() de /apps/admin/model/system/UserModel.php.

El parámetro field está completamente controlado por el usuario a través de una solicitud GET sin ninguna validación de lista blanca. El parámetro value también está controlado por el usuario y se concatena directamente en la sentencia SQL UPDATE. Un atacante autenticado puede especificar cualquier columna de la base de datos como field (por ejemplo, password, username, status, role), lo que permite la manipulación arbitraria de datos.

Causa raíz

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 y $value se toman directamente de la superglobal $_GET y se concatenan en una cadena SQL sin saneamiento, sin lista blanca y sin consultas parametrizadas. Esta cadena se pasa luego a UserModel::modUser(), que la reenvía al método base Model::update(). Dado que el argumento es una cadena (no un array), se omite la validación de nombres de campo checkKey() y se incrusta textualmente en la cláusula SET:

root@kitploit:~
UPDATE ay_user SET <controlado-por-usuario>= '<controlado-por-usuario>', update_user='admin' WHERE ucode='<ucode>'

Cadena de llamadas

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

Un atacante autenticado puede:

  1. Modificar la contraseña de cualquier usuario — incluido el superadministrador (excepto el fundador integrado con ucode=10001).
  2. Alterar el estado de la cuenta — habilitar o deshabilitar cuentas arbitrarias.
  3. Inyectar SQL más profundo — el parámetro value permite el escape de comillas simples, lo que potencialmente habilita ataques basados en consultas apiladas o tautologías.

Esto conduce a la toma de control de cuentas y al control total del backend del CMS.

Pasos de reproducción

Requisitos previos

  • PbootCMS V3.2.5 instalado localmente (probado en 192.168.1.104, Apache/PHP 7.2.1/SQLite)
  • Una cuenta de administrador de backend válida

Paso 1: Iniciar sesión en el panel de administración

Acceda al panel de administración de PbootCMS e inicie sesión con la cuenta admin predeterminada.

Panel de administración

Paso 2: Crear un usuario objetivo

Navegue a Gestión del sistema → Gestión de usuarios → Añadir usuario. Cree un nuevo usuario:

  • Nombre de usuario: admin2
  • Contraseña: admin
  • Rol: Administrador del sistema

Crear usuario

Paso 3: Verificar que el usuario existe

La lista de usuarios confirma admin2 con ucode=10002:

Lista de usuarios

Paso 4: Confirmar la contraseña inicial

Abra una nueva ventana del navegador. Intente iniciar sesión como admin2 con la contraseña 123456 — esto falla porque la contraseña real es admin:

Inicio de sesión fallido

Paso 5: Crear y ejecutar el payload

Usando el navegador del administrador ya conectado, navegue a:

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

14e1b600b1fd579f47433b88e8d85291 es el hash MD5 de 123456.

El método mod() ejecuta la inyección y redirige mediante location(-1):

Payload ejecutado - No encontrado

Paso 6: Verificar el cambio de contraseña

Ahora intente iniciar sesión con admin2 / 123456:

Inicio de sesión exitoso

La contraseña se ha cambiado exitosamente mediante inyección SQL. El usuario ahora ha iniciado sesión con la nueva contraseña, lo que confirma la toma de control total de la cuenta.

Análisis del código fuente

Código vulnerable (UserController.php, línea ~149)

Código fuente

Capa de base de datos (Model.php - método update)

Cuando update() recibe un argumento de cadena, se utiliza tal cual en la cláusula SET sin ningún escape:

root@kitploit:~
final public function update($data = null)
{
    if (is_array($data)) {
        // Ruta de array: checkKey() valida los nombres de campo
        ...
    } else {
        // Ruta de cadena: SIN VALIDACIÓN ALGUNA
        $update_string = $data;
    }
    $this->sql['value'] = $update_string;
    $sql = $this->buildSql($this->updateSql);
    return $this->getDb()->amd($sql);  // Ejecución directa, sin sentencias preparadas
}

Remedición

  1. Validación de lista blanca en el parámetro field — solo permitir nombres de columna conocidos (status, username, realname, password).
  2. Consultas parametrizadas — usar sentencias preparadas en lugar de concatenación de cadenas.
  3. Escapar la entrada del usuario — como mínimo, sanear $value para evitar la ruptura de comillas.
  4. Forzar el hash de contraseñas — si field es password, aplicar encrypt_string() al valor antes de almacenarlo.
  5. Restringir la ruta de modificación independiente — la rama de "modificación de campo único" en mod() debe requerir un token CSRF válido y una verificación de autorización a nivel de rol.

Referencias

  • Sitio web oficial de PbootCMS
  • Código fuente de PbootCMS en Gitee
  • CVE-2026-79387

Divulgación: Esta vulnerabilidad fue divulgada de manera responsable al proveedor. Si está ejecutando una versión afectada, actualice inmediatamente y audite todas las cuentas del backend.

Descargar herramienta