
phpMyAdmin 5.2.3 - उच्च - रिमोट - SQLi - auth plugin identifier unquoted
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-auth-plugin-unquoted
राइट-अप: https://abraxaslabs.tech/research/phpmyadmin-auth-plugin-unquoted
वर्ग: SQLi पहुँच: रिमोट
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
पासवर्ड बदलें डिफ़ॉल्ट रूप से चालू है। UserPassword.php POST authentication_plugin को ALTER USER ... IDENTIFIED WITH में कॉपी करता है, बिना किसी allowlist और बिना किसी quoting के। उसी स्टेटमेंट में उपयोगकर्ता नाम, होस्ट और पासवर्ड escapeString से गुज़रते हैं। MySQL 8 पर WITH क्लॉज़ तब उत्सर्जित होता है जब पोस्ट किया गया प्लगइन वर्तमान से भिन्न हो।
एक साइन-इन किया हुआ phpMyAdmin उपयोगकर्ता पासवर्ड बदलने के फ़ॉर्म के माध्यम से अपने ही ALTER USER में SQL इंजेक्ट करता है। प्लगइन फ़ील्ड में अतिरिक्त SQL, SQL है, प्लगइन नाम नहीं।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | SQLi |
| पहुँच | रिमोट (प्रमाणित कुकी लॉगिन; पासवर्ड बदलें चालू) |
| CWE | CWE-89 |
| CVSS | उच्च: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| उत्पाद | phpMyAdmin |
| प्रभावित | 5.2.3 टैग RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| प्रमाणीकरण | प्रमाणित कुकी लॉगिन। $cfg['ShowChgPassword'] डिफ़ॉल्ट true। प्रमाणीकरण प्रकार config नहीं है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
एक साइन-इन किया हुआ phpMyAdmin उपयोगकर्ता पासवर्ड बदलने के फ़ॉर्म के माध्यम से अपने ही ALTER USER में SQL इंजेक्ट कर सकता है।
| विशेषाधिकार | विधि / सिंक | रेकॉन / अखंडता / उपलब्धता | लैब-प्रमाणित या अनुमानित |
|---|---|---|---|
IDENTIFIED WITH में अतिरिक्त SQL भेजें | authentication_plugin के साथ POST index.php?route=/user-password | phpMyAdmin जो स्टेटमेंट बनाता है उसकी अखंडता | लैब-प्रमाणित। रॉ POST sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ SQL बॉक्स में बिना quote के दिखाई देता है |
| MySQL को उस अतिरिक्त SQL को SQL के रूप में पार्स करवाएँ | वही स्टेटमेंट mysqld तक पहुँचता है | उपयोगकर्ता कनेक्शन की अखंडता | लैब-प्रमाणित। General log ने प्लगइन sha256_password रखा और कमेंट हटा दिया। 1227 क्योंकि इस उपयोगकर्ता के पास CREATE USER नहीं है |
| यदि ब्रेकआउट पार्स हो जाए तो अतिरिक्त क्लॉज़ या अतिरिक्त खाते | वही सिंक; स्टैक्ड क्वेरी ड्राइवर पर निर्भर करती हैं | अन्य खातों की अखंडता | अनुमानित। यह लैब दूसरा स्टेटमेंट नहीं चलाती और न ही दूसरा खाता बनाती है |
| उपयोगकर्ता जोड़ें/संपादित करें पर वही concat | Privileges.php IDENTIFIED WITH / MariaDB VIA | grantor-निर्मित स्टेटमेंट की अखंडता | अनुमानित सहोदर। लैब POST केवल पासवर्ड बदलें है |
इस पथ पर बंद: बिना प्रमाणीकरण उपयोग (कुकी लॉगिन आवश्यक), config-auth (पासवर्ड बदलें छिपा हुआ है), RCE, MySQL 8 पर GRANT-रहित प्लगइन परिवर्तन सफल होना (CREATE USER के बिना 1227)। उपयोगकर्ता नाम, होस्ट और पासवर्ड escaped रहते हैं। स्वयं-पासवर्ड को GRANT की आवश्यकता नहीं; बचा हुआ हिस्सा बिना quote वाला प्लगइन फ़ील्ड है, मुफ़्त प्लगइन स्वैप नहीं।
वही पिन: WebAuthn CustomServer leftover।
मैंने phpmyadmin/phpmyadmin RELEASE_5_2_3 को पिन किया। 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 को छोड़ देते हैं जब तक कि प्लगइन न बदला जाए। कोई भिन्न नाम POST करें और वह खंड वापस आ जाता है।
पहले से दर्ज गलत मोड़: MySQL 1227 को शेष के विफलता के रूप में मानना (यह प्रमाण है कि अतिरिक्त SQL पार्स हुआ); MySQL 8 पर GRANT-रहित प्लगइन परिवर्तन का दावा करना; config-auth को दायरे में मानना; एक रिवर्स शेल। नाटक।
python3 phpmyadmin-auth-plugin-unquoted-Abraxas-Labs.py
# or: cd lab && ./run.sh
केवल http://127.0.0.1:19260 को लक्षित करें। इमेज phpmyadmin:5.2.3 और mysql:8.0। Compose प्रोजेक्ट phpmyadmin-auth-plugin-unquoted। रन के बाद स्टैक टियर डाउन हो जाता है।
appuser के रूप में कुकी लॉगिन। authentication_plugin=sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ के साथ POST /user-password। PMA SQL क्वेरी बॉक्स: ALTER USER 'appuser'@'%' IDENTIFIED WITH sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ BY '***'। MySQL general log कमेंट को पार्स करता है और IDENTIFIED WITH 'sha256_password' संग्रहीत करता है। उपयोगकर्ता नाम उद्धृत है।
SUCCESS phpmyadmin-auth-plugin-unquoted how=live unquoted=yes escaped-user=yes plugin=sha256_password PMA-AUTH-PLUGIN-UNQUOTED-WITNESS
SHOW PLUGINS से प्लगइन नामों को allowlist करें। POST को कभी भी IDENTIFIED WITH, VIA, या plugin= में इंटरपोलेट न करें।
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/UserPassword.phplibraries/classes/Server/Privileges.phpGNU Affero GPL v3.0. देखें LICENSE. केवल लूपबैक लैब। कोई वारंटी नहीं।