phpMyAdmin 5.2.3 - Alto - Remoto - SQLi - identificatore del plugin di autenticazione senza virgolette
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-auth-plugin-unquoted
Classe: SQLi Portata: Remota
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
La modifica della password è attiva per impostazione predefinita. UserPassword.php copia il POST authentication_plugin in ALTER USER ... IDENTIFIED WITH senza allowlist e senza quoting. Username, host e password nella stessa istruzione passano attraverso escapeString. Su MySQL 8 la clausola WITH viene emessa quando il plugin inviato differisce da quello corrente.
Un utente phpMyAdmin autenticato inietta SQL nel proprio ALTER USER attraverso il modulo di modifica password. SQL aggiuntivo nel campo plugin è SQL, non un nome di plugin.
| ID | nessuna CVE al momento |
| Classe | SQLi |
| Portata | Remota (login autenticato con cookie; modifica password attiva) |
| 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 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| Auth | login autenticato con cookie. $cfg['ShowChgPassword'] predefinito true. Il tipo di autenticazione non è config |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Un utente phpMyAdmin autenticato può iniettare SQL nel proprio ALTER USER attraverso il modulo di modifica password.
| Privilegio | Metodo / sink | Recon / integrità / disponibilità | Provato in lab o dedotto |
|---|---|---|---|
Inviare SQL aggiuntivo in IDENTIFIED WITH | POST index.php?route=/user-password con authentication_plugin | Integrità dell'istruzione costruita da phpMyAdmin | Provato in lab. Il POST grezzo sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ appare senza quoting nel box SQL |
| Far interpretare a MySQL l'SQL aggiuntivo come SQL | La stessa istruzione raggiunge mysqld | Integrità della connessione utente | Provato in lab. Il general log ha mantenuto il plugin sha256_password e scartato il commento. 1227 perché questo utente non ha CREATE USER |
| Clausole aggiuntive o account aggiuntivi se il breakout viene interpretato | Stesso sink; le query impilate dipendono dal driver | Integrità di altri account | Dedotto. Questo lab non esegue una seconda istruzione né crea un altro account |
| Stessa concatenazione su aggiungi/modifica utente | Privileges.php IDENTIFIED WITH / MariaDB VIA | Integrità delle istruzioni costruite dal grantor | Sibling dedotto. Il POST del lab è solo modifica password |
Chiuso su questo percorso: uso non autenticato (richiesto login con cookie), config-auth (modifica password nascosta), RCE, cambio plugin senza GRANT che riesce su MySQL 8 (1227 senza CREATE USER). Username, host e password restano escapati. La propria password non necessita di GRANT; ciò che resta è il campo plugin senza quoting, non uno scambio gratuito di plugin.
Stesso pin: WebAuthn CustomServer leftover.
Ho fissato phpmyadmin/phpmyadmin RELEASE_5_2_3. PMASA-2025-1/2/3 sono già in 5.2.2. La modifica password costruisce ancora:
return 'ALTER USER \'' . $dbi->escapeString($username)
. '\'@\'' . $dbi->escapeString($hostname)
. '\' IDENTIFIED WITH ' . $authPlugin . ' BY '
$authPlugin è $_POST['authentication_plugin']. MySQL 5.7.37+ e 8.0 omettono WITH a meno che il plugin non sia cambiato. Invia un nome diverso e la clausola ritorna.
Vicoli ciechi già registrati: trattare MySQL 1227 come fallimento del leftover (è la prova che l'SQL aggiuntivo è stato interpretato); sostenere un cambio plugin senza GRANT su MySQL 8; trattare config-auth come in scope; una reverse shell. Teatro.
python3 phpmyadmin-auth-plugin-unquoted-Abraxas-Labs.py
# or: cd lab && ./run.sh
Target solo http://127.0.0.1:19260. Immagini phpmyadmin:5.2.3 e mysql:8.0. Progetto Compose phpmyadmin-auth-plugin-unquoted. Lo stack viene smontato dopo l'esecuzione.
Login con cookie come appuser. POST /user-password con authentication_plugin=sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/. Box query SQL di PMA: ALTER USER 'appuser'@'%' IDENTIFIED WITH sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ BY '***'. Il general log di MySQL interpreta il commento e memorizza IDENTIFIED WITH 'sha256_password'. Lo username è quotato.
SUCCESS phpmyadmin-auth-plugin-unquoted how=live unquoted=yes escaped-user=yes plugin=sha256_password PMA-AUTH-PLUGIN-UNQUOTED-WITNESS
Allowlist dei nomi dei plugin da SHOW PLUGINS. Non interpolare mai il POST in IDENTIFIED WITH, VIA o plugin=.
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/UserPassword.phplibraries/classes/Server/Privileges.phpGNU Affero GPL v3.0. Vedi LICENSE. Solo lab su loopback. Nessuna garanzia.