
phpMyAdmin 5.2.3 - Alta - Remota - SQLi - consulta residual de columnas centrales de pmadb
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
Write-up: https://abraxaslabs.tech/research/phpmyadmin-pmadb-central-sqli
Clase: SQLi Alcance: Remoto
phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). Central columns escribe col_extra concatenando los POST extra y attribute en un literal SQL entre comillas simples sobre el enlace del usuario de control. Los campos vecinos pasan por escapeString. Estos dos no.
Un usuario autenticado envía por POST index.php?route=/database/central-columns con multi_edit_central_column_save=1 y una comilla en field_attribute (o col_extra). getInsertQuery / updateOneColumn ejecutan entonces esa cadena como el usuario de control de pma contra pma__central_columns. Esa cuenta es el usuario de almacenamiento de configuración, no el cuadro SQL con sesión iniciada.
CVE-2016-5703 era el nombre de la base de datos en central columns. Estos campos extra y attribute no eran ese fallo.
| ID | sin CVE todavía |
| Clase | SQLi (usuario de control sobre pma__central_columns) |
| Alcance | Remoto (inicio de sesión autenticado por cookie; central columns de pmadb habilitado) |
| CWE | CWE-89 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Producto | phpMyAdmin |
| Afectado | 5.2.3 tag RELEASE_5_2_3 (962857e) |
| Autenticación | Inicio de sesión autenticado por cookie. Central columns de pmadb habilitado. |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1:19210 |
Un usuario de phpMyAdmin con sesión iniciada que pueda abrir Central columns puede inyectar SQL como el usuario de control sobre pma__central_columns.
| Privilegio | Método / ruta | Demostrado en laboratorio o inferido |
|---|---|---|
| Romper la cadena INSERT/UPDATE del usuario de control (integridad del SQL de pmadb) | POST index.php?route=/database/central-columns multi_edit_central_column_save=1 con una comilla en field_attribute / col_extra | Demostrado en laboratorio. Error JSON #1064. Testigo PMA-PMADB-CENTRAL-SQLI-WITNESS en el error del usuario de control |
| Mantener los campos vecinos en banda | Mismo POST, comilla en field_name | Demostrado en laboratorio. Fila almacenada como neg'col. escapeString resistió |
| Leer o sobrescribir filas de central-column de otros usuarios | Mismo sink, una vez cerrada la cadena | Inferido. El laboratorio se detiene en el error de sintaxis; sin consulta apilada |
| Sentencias adicionales como el usuario de control | Mismo sink si el enlace mysqli de control permite multi-query | Inferido. Por defecto mysqli::query es de una sola sentencia. No habilitado aquí |
Alcanzar otras tablas de pmadb (bookmarks, history, pma__userconfig) | Solo si son posibles consultas apiladas o una escritura tipo INTO | Inferido. El usuario de control en este laboratorio solo tiene DML sobre phpmyadmin.* |
Descartado en este laboratorio: acceso no autenticado, el cuadro SQL del appuser con sesión iniciada (solo appdb), shell del SO y consultas apiladas. La funcionalidad no hace nada si pmadb / central columns está desactivado (eso es un FAIL, no este residuo).
Ocho búsquedas paralelas en el código fuente de RELEASE_5_2_3. Los campos vecinos en CentralColumns.php pasan por escapeString. Extra y attribute se implode en un literal entre comillas simples. CVE-2016-5703 era el nombre de la base de datos, no estas columnas.
Falsos caminos: tratar una comilla en field_name como el residuo (se almacena como neg'col; ese es el negativo); esperar que el log general muestre el testigo sin escapar (el INSERT muere con #1064 antes de una escritura exitosa); tratar pmadb desactivado como este residuo (la funcionalidad no hace nada).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
o
cd lab
./run.sh
Solo loopback: http://127.0.0.1:19210. Imágenes phpmyadmin:5.2.3 y mysql:8.0. Proyecto de Compose phpmyadmin-pmadb-central-sqli. Testigo PMA-PMADB-CENTRAL-SQLI-WITNESS.
SUCCESS phpmyadmin-pmadb-central-sqli how=live insert-syntax=yes field-name-escaped=yes general-log-unescaped=false error-has-witness=true PMA-PMADB-CENTRAL-SQLI-WITNESS
escapeString / quoteString(..., CONNECT_CONTROL) en extra y attribute. Lista de permitidos auto_increment, UNSIGNED, BINARY, UNSIGNED ZEROFILL y on update CURRENT_TIMESTAMP. quoteString de phpMyAdmin 6.x sobre el blob JSON del diseñador es la forma parcheada para esta clase de concatenación en pmadb.
962857e)libraries/classes/Database/CentralColumns.php getInsertQuery / updateOneColumnControllers/Database/CentralColumnsController.php POST multi_edit_central_column_saveGET|POST /database/central-columnsGNU Affero GPL v3.0. Consulte LICENSE. Solo para laboratorio de loopback. Sin garantía.