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

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
phpmyadmin-setup-validate — phpMyAdmin 5.2.3 - Alta - Remota - residual - setup/validate aún accesible | Kitploit
Herramientas/GitHubGitHub/abraxas/phpmyadmin-setup-validate
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónLabs y Práctica
GitHubabraxas/phpmyadmin-setup-validate

phpmyadmin-setup-validate

phpMyAdmin 5.2.3 - Alta - Remota - residual - setup/validate aún accesible

Ver Repositorio
hace 4 díasAú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

Abraxas Labs - phpmyadmin-setup-validate

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-setup-validate

phpmyadmin-setup-validate

Clase: SSRF Alcance: Remoto

phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). setup/index.php muere cuando config.inc.php está presente. setup/validate.php no. Todavía se carga bajo $isMinimumCommon, toma un token CSRF de la página de inicio de sesión pública y llama a Validator::testDBConnection -> mysqli_connect al host, puerto, usuario y contraseña en el campo JSON values.

Un cliente no autenticado hace GET a / para obtener una cookie de sesión y un token, luego hace POST a setup/validate.php id=Server con Servers/1/host y Servers/1/port de su elección. El host de phpMyAdmin abre un handshake TCP de MySQL a esa dirección. Eso es SSRF sobre el protocolo MySQL: 3306 interno, credential stuffing contra un servidor interno, un oráculo de puertos a partir del timing y los errores de mysqli. No es SSRF de metadatos HTTP a menos que algo en ese puerto hable MySQL. hide_db también interpola una regex de usuario en preg_match. No ejecuté esa ruta de ReDoS en este laboratorio.

La imagen oficial phpmyadmin:5.2.3 elimina setup/. Este remanente solo aplica cuando ese directorio sigue en la raíz web, que es el remanente común tras una instalación. El laboratorio restaura setup/ desde el tarball 5.2.3 para que el pin coincida con RELEASE_5_2_3.

PMASA-2016-44 / CVE-2016-6621 cubrió algo de SSRF en setup. La comprobación de "deshabilitar setup cuando existe config" nunca se aplicó a validate.php / config.php.

IDsin CVE aún
ClaseSSRF (protocolo MySQL)
AlcanceRemoto (no autenticado si setup/ sigue siendo accesible por web)
CWECWE-918
CVSSAlto: 7.2 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
ProductophpMyAdmin
Afectado5.2.3 tag RELEASE_5_2_3 (962857e) con setup/ todavía en el docroot
AuthNo autenticado. Token CSRF de la página de inicio de sesión pública. Sin login de MySQL.
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1:19230

Qué puede hacer un atacante

Cualquiera que pueda alcanzar un árbol setup/ remanente puede hacer que el host de phpMyAdmin abra una conexión TCP de protocolo MySQL a un host y puerto que elija.

PrivilegioMétodo / rutaProbado en laboratorio o inferido
Abrir TCP desde el host PMA al host:puerto del atacante (integridad de la conexión saliente; reconocimiento de ese puerto)POST /setup/validate.php no autenticado id=Server con Servers/1/host + Servers/1/port más un token de GET /Probado en laboratorio. El oráculo en oracle:13306 registró PMA-SETUP-VALIDATE-WITNESS desde el contenedor PMA
Confirmar que la UI de setup está desactivada mientras validate sigue activoGET /setup/index.phpProbado en laboratorio. El cuerpo contiene "setup is disabled" / configuration already exists
Fallar de forma segura sin el token CSRF de la página de loginMismo POST, sin tokenProbado en laboratorio. Cero impactos en el oráculo
Oráculo de puerto / credenciales a partir de errores de mysqli y timingMismo testDBConnectionInferido. El cuerpo del laboratorio fue mysqli_connect(): (HY000/2006): MySQL server has gone away después de que el oráculo aceptó y luego cerró
Hablar MySQL a un 3306 interno e intentar el usuario/contraseña enviadosMismo mysqli_connectInferido. No apuntado al servicio db del laboratorio
ReDoS vía validateRegex interpolando regex de usuarioid=Servers/1/hide_dbInferido. No ejercitado

Cerrado en este laboratorio: SSRF de metadatos HTTP (el handshake es MySQL, no GET /latest/meta-data), login PMA no autenticado, shell del SO, y el propio asistente de setup (index.php permanece deshabilitado). FAIL si setup/ no está desplegado (predeterminado de la imagen oficial).

Cómo lo encontré

Ocho búsquedas paralelas en el código fuente de RELEASE_5_2_3. setup/index.php tiene el fatal de config-exists. setup/validate.php no. setup/lib/common.inc.php establece $isMinimumCommon y no busca CONFIG_FILE.

Caminos equivocados: tratar la imagen oficial como este remanente (elimina setup/); hacer POST sin el token de la página de login (cero impactos en el oráculo); tratar esto como SSRF de metadatos HTTP (el handshake es MySQL).

Laboratorio

python3 phpmyadmin-setup-validate-Abraxas-Labs.py

o

cd lab
./run.sh

Solo loopback: http://127.0.0.1:19230. Proyecto Compose phpmyadmin-setup-validate. El Dockerfile restaura setup/ desde el tarball 5.2.3 y ejecuta un oráculo TCP en el puerto 13306. Testigo PMA-SETUP-VALIDATE-WITNESS.

SUCCESS phpmyadmin-setup-validate how=live tcp=yes setup-index-disabled=yes PMA-SETUP-VALIDATE-WITNESS

La solución

Poner el fatal file_exists(CONFIG_FILE) en setup/lib/common.inc.php para que todos los scripts de setup mueran. Restringir los hosts de testDBConnection. No construir delimitadores de preg_match a partir de cadenas de usuario.

Referencias

  • github.com/phpmyadmin/phpmyadmin tag RELEASE_5_2_3 (962857e)
  • setup/index.php fatal de config-exists
  • setup/validate.php sin esa comprobación
  • libraries/classes/Config/Validator.php testDBConnection / mysqli_connect
  • Remanentes del mismo pin: phpmyadmin-webauthn · phpmyadmin-pmadb-central-sqli · phpmyadmin-designer-json-sqli · phpmyadmin-csrf-sql
  • CWE-918

Licencia

GNU Affero GPL v3.0. Ver LICENSE. Solo laboratorio loopback. Sin garantía.

Descargar herramienta