
phpMyAdmin 5.2.3 - उच्च - रिमोट - SQLi - auth plugin identifier unquoted
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-auth-plugin-unquoted
Class: SQLi Reach: Remote
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
पासवर्ड बदलना डिफ़ॉल्ट रूप से चालू है। UserPassword.php POST authentication_plugin को ALTER USER ... IDENTIFIED WITH में कॉपी करता है, बिना किसी allowlist और बिना quoting के। उसी स्टेटमेंट में username, host, और password escapeString से गुज़रते हैं। MySQL 8 पर WITH क्लॉज़ तब उत्सर्जित होता है जब पोस्ट किया गया plugin वर्तमान से भिन्न हो।
एक साइन-इन किया हुआ phpMyAdmin उपयोगकर्ता change-password फ़ॉर्म के माध्यम से अपने ही ALTER USER में SQL इंजेक्ट करता है। plugin फ़ील्ड में अतिरिक्त SQL, SQL है, plugin नाम नहीं।
| ID | अभी तक कोई CVE नहीं |
| Class | SQLi |
| Reach | Remote (प्रमाणित cookie लॉगिन; पासवर्ड बदलना चालू) |
| CWE | CWE-89 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Product | phpMyAdmin |
| Affected | 5.2.3 टैग RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| Auth | प्रमाणित cookie लॉगिन। $cfg['ShowChgPassword'] डिफ़ॉल्ट true। Auth प्रकार config नहीं है |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
एक साइन-इन किया हुआ phpMyAdmin उपयोगकर्ता change-password फ़ॉर्म के माध्यम से अपने ही ALTER USER में SQL इंजेक्ट कर सकता है।
| Privilege | Method / sink | Recon / integrity / availability | Lab-proven या inferred |
|---|---|---|---|
IDENTIFIED WITH में अतिरिक्त SQL भेजें | POST index.php?route=/user-password के साथ authentication_plugin | phpMyAdmin जो स्टेटमेंट बनाता है उसकी integrity | Lab-proven। Raw POST sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ SQL बॉक्स में unquoted दिखाई देता है |
| MySQL को उस अतिरिक्त SQL को SQL के रूप में parse करवाएं | वही स्टेटमेंट mysqld तक पहुंचता है | उपयोगकर्ता कनेक्शन की integrity | Lab-proven। General log ने plugin sha256_password रखा और comment हटा दिया। 1227 क्योंकि इस उपयोगकर्ता के पास CREATE USER नहीं है |
| अतिरिक्त clauses या अतिरिक्त accounts यदि breakout parse हो जाए | वही sink; stacked queries driver पर निर्भर करती हैं | अन्य accounts की integrity | Inferred। यह lab दूसरा स्टेटमेंट नहीं चलाता या दूसरा account नहीं बनाता |
| add/edit user पर वही concat | Privileges.php IDENTIFIED WITH / MariaDB VIA | grantor-निर्मित स्टेटमेंट्स की integrity | Inferred sibling। Lab POST केवल change-password है |
इस पथ पर बंद: unauthenticated उपयोग (cookie लॉगिन आवश्यक), config-auth (पासवर्ड बदलना छिपा हुआ है), RCE, MySQL 8 पर GRANT-रहित plugin परिवर्तन सफल होना (CREATE USER के बिना 1227)। Username, host, और password escaped रहते हैं। Own-password को GRANT की आवश्यकता नहीं; बचा हुआ unquoted plugin फ़ील्ड है, मुफ़्त plugin swap नहीं।
Same pin: WebAuthn CustomServer leftover.
मैंने phpmyadmin/phpmyadmin RELEASE_5_2_3 को pin किया। PMASA-2025-1/2/3 पहले से 5.2.2 में हैं। पासवर्ड बदलना अभी भी बनाता है:
return 'ALTER USER \'' . $dbi->escapeString($username)
. '\'@\'' . $dbi->escapeString($hostname)
. '\' IDENTIFIED WITH ' . $authPlugin . ' BY '
$authPlugin $_POST['authentication_plugin'] है। MySQL 5.7.37+ और 8.0 WITH को छोड़ देते हैं जब तक plugin नहीं बदला। एक अलग नाम POST करें और क्लॉज़ वापस आ जाता है।
पहले से दर्ज गलत मोड़: MySQL 1227 को leftover की विफलता मानना (यह प्रमाण है कि अतिरिक्त SQL parse हुआ); MySQL 8 पर GRANT-रहित plugin परिवर्तन का दावा करना; config-auth को in-scope मानना; एक reverse shell। Theatre।
python3 phpmyadmin-auth-plugin-unquoted-Abraxas-Labs.py
# or: cd lab && ./run.sh
लक्ष्य केवल http://127.0.0.1:19260। Images phpmyadmin:5.2.3 और mysql:8.0। Compose project phpmyadmin-auth-plugin-unquoted। रन के बाद stack tear down हो जाता है।
appuser के रूप में cookie लॉगिन। /user-password पर POST करें authentication_plugin=sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ के साथ। PMA SQL query box: ALTER USER 'appuser'@'%' IDENTIFIED WITH sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ BY '***'। MySQL general log comment को parse करता है और IDENTIFIED WITH 'sha256_password' संग्रहीत करता है। Username quoted है।
SUCCESS phpmyadmin-auth-plugin-unquoted how=live unquoted=yes escaped-user=yes plugin=sha256_password PMA-AUTH-PLUGIN-UNQUOTED-WITNESS
SHOW PLUGINS से plugin नामों को allowlist करें। POST को कभी भी IDENTIFIED WITH, VIA, या plugin= में interpolate न करें।
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/UserPassword.phplibraries/classes/Server/Privileges.phpGNU Affero GPL v3.0। देखें LICENSE। केवल Loopback lab। कोई वारंटी नहीं।