
phpMyAdmin 5.2.3 - Alta - Remota - SQLi - query residua delle colonne centrali di pmadb
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
Classe: SQLi Portata: Remota
phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). Le colonne centrali scrivono col_extra concatenando i POST extra e attribute in un letterale SQL tra apici singoli sul link dell'utente di controllo. I campi adiacenti passano attraverso escapeString. Questi due no.
Un utente autenticato invia in POST index.php?route=/database/central-columns con multi_edit_central_column_save=1 e un apice in field_attribute (o col_extra). getInsertQuery / updateOneColumn eseguono quindi quella stringa come utente di controllo pma contro pma__central_columns. Quell'account è l'utente di archiviazione della configurazione, non la casella SQL con cui si è effettuato l'accesso.
CVE-2016-5703 riguardava il nome del database nelle colonne centrali. Questi campi extra e attribute non erano quel bug.
| ID | nessuna CVE al momento |
| Classe | SQLi (utente di controllo su pma__central_columns) |
| Portata | Remota (login autenticato tramite cookie; colonne centrali pmadb abilitate) |
| 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 |
| Prodotto | phpMyAdmin |
| Affetto | 5.2.3 tag RELEASE_5_2_3 (962857e) |
| Auth | Login autenticato tramite cookie. Colonne centrali pmadb abilitate. |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1:19210 |
Un utente phpMyAdmin autenticato che può aprire le Colonne centrali può iniettare SQL come utente di controllo su pma__central_columns.
| Privilegio | Metodo / percorso | Provato in lab o dedotto |
|---|---|---|
| Rompere la stringa INSERT/UPDATE dell'utente di controllo (integrità dell'SQL pmadb) | POST index.php?route=/database/central-columns multi_edit_central_column_save=1 con un apice in field_attribute / col_extra | Provato in lab. Errore JSON #1064. Witness PMA-PMADB-CENTRAL-SQLI-WITNESS nell'errore dell'utente di controllo |
| Mantenere i campi adiacenti in-band | Stesso POST, apice in field_name | Provato in lab. Riga memorizzata come neg'col. escapeString ha tenuto |
| Leggere o sovrascrivere le righe delle colonne centrali di altri utenti | Stesso sink, una volta chiusa la stringa | Dedotto. Il lab si ferma all'errore di sintassi; nessuna query impilata |
| Istruzioni aggiuntive come utente di controllo | Stesso sink se il link mysqli di controllo consente multi-query | Dedotto. mysqli::query predefinito è a istruzione singola. Non abilitato qui |
Raggiungere altre tabelle pmadb (bookmark, history, pma__userconfig) | Solo se sono possibili query impilate o una scrittura in stile INTO | Dedotto. L'utente di controllo in questo lab ha solo DML su phpmyadmin.* |
Chiusi su questo lab: accesso non autenticato, la casella SQL dell'appuser autenticato (solo appdb), shell del sistema operativo e query impilate. La funzionalità è no-op se pmadb / colonne centrali è disattivato (questo è un FAIL, non questo residuo).
Otto ricerche parallele nel sorgente di RELEASE_5_2_3. I campi adiacenti in CentralColumns.php sono passati a escapeString. Extra e attribute sono implode in un letterale tra apici singoli. CVE-2016-5703 riguardava il nome del database, non queste colonne.
Vicoli ciechi: trattare un apice in field_name come il residuo (viene memorizzato come neg'col; questo è il negativo); aspettarsi che il general log mostrasse il witness non escapato (l'INSERT muore con #1064 prima di una scrittura riuscita); trattare pmadb-off come questo residuo (la funzionalità è no-op).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
oppure
cd lab
./run.sh
Solo loopback: http://127.0.0.1:19210. Immagini phpmyadmin:5.2.3 e mysql:8.0. Progetto Compose phpmyadmin-pmadb-central-sqli. Witness 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) su extra e attribute. Allowlist auto_increment, UNSIGNED, BINARY, UNSIGNED ZEROFILL e on update CURRENT_TIMESTAMP. quoteString di phpMyAdmin 6.x sul blob JSON del designer è la forma corretta per questa classe di concatenazione 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. Vedi LICENSE. Solo lab in loopback. Nessuna garanzia.