
phpMyAdmin 5.2.3 - उच्च - रिमोट - SQLi - Designer JSON अनसैनिटाइज़्ड आइडेंटिफायर
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-designer-json-sqli
वर्ग: SQLi पहुँच: रिमोट
phpMyAdmin 5.2.3 (टैग RELEASE_5_2_3, कमीट 962857e)। Designer AJAX save_setting_value सेटिंग्स ब्लॉब को json_encode करता है और इसे कंट्रोल-यूजर लिंक पर एकल-कोट्स वाले UPDATE/INSERT में संयोजित करता है। उपयोगकर्ता नाम एस्केप किया जाता है। JSON नहीं होता। json_encode एकल उद्धरण को एस्केप नहीं करता।
एक साइन-इन यूजर index.php?route=/database/designer पर operation=save_setting_value और value में एक उद्धरण के साथ POST करता है। queryAsControlUser फिर उस स्ट्रिंग को pma__designer_settings के खिलाफ pma कंट्रोल यूजर के रूप में चलाता है। यह खाता कॉन्फ़िगरेशन स्टोरेज है, लॉग्ड-इन SQL बॉक्स नहीं। phpMyAdmin 6.x इस ब्लॉब को ControlUser पर quoteString में लपेटता है। 5.2.3 अभी भी इसे रॉ-कॉनकैट करता है।
पुराने डिज़ाइनर CVEs (2016-6616, 2019-11768, 2019-18622) उपयोगकर्ता नाम / डेटाबेस नाम थे। यह बचा हुआ हिस्सा JSON settings_data कॉलम है।
| पहचान | अभी तक कोई CVE नहीं |
| वर्ग | SQLi (pma__designer_settings पर कंट्रोल-यूजर) |
| पहुँच | रिमोट (प्रमाणीकृत कुकी लॉगिन; Designer + pma__designer_settings सक्षम) |
| 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 (962857e) |
| प्रमाणीकरण | प्रमाणीकृत कुकी लॉगिन। Designer + pma__designer_settings सक्षम। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | 127.0.0.1:19220 only |
एक साइन-इन phpMyAdmin यूजर जो Designer खोल सकता है, वह pma__designer_settings पर कंट्रोल यूजर के रूप में SQL इंजेक्ट कर सकता है।
| अधिकार | विधि / पथ | लैब-प्रमाणित या अनुमानित |
|---|---|---|
| कंट्रोल-यूजर UPDATE/INSERT स्ट्रिंग को तोड़ें (pmadb SQL की अखंडता) | POST index.php?route=/database/designer operation=save_setting_value जिसमें value में एक उद्धरण हो | लैब-प्रमाणित। सामान्य लॉग: SET settings_data = '{"snap_line":"PMA-DESIGNER-JSON-SQLI-WITNESS'#" }' रॉ। quoteString अनुपस्थित |
स्वयं की settings_data को काटें ताकि वह JSON न रहे (स्वयं की पंक्ति की अखंडता) | वही POST; # स्टेटमेंट के शेष भाग को कमेंट आउट करता है | लैब-प्रमाणित। appuser ब्लॉब में गवाह शामिल है और वैध JSON नहीं है। क्लीन सेव grid-ok गायब है |
| बिना स्टैक्ड क्वेरी के अन्य यूजर्स के डिज़ाइनर पंक्तियों को ओवरराइट करें (पीड़ित पंक्ति की अखंडता) | वही # WHERE username = '...' को कमेंट आउट करता है | लैब-प्रमाणित। सीड victim {"keep":"safe"} काट गए गवाह ब्लॉब में बदल गया |
| कंट्रोल यूजर के रूप में अतिरिक्त स्टेटमेंट | यदि कंट्रोल mysqli लिंक मल्टी-क्वेरी की अनुमति देता है तो वही सिंक | अनुमानित। डिफ़ॉल्ट mysqli::query सिंगल-स्टेटमेंट है। यहाँ सक्षम नहीं है |
अन्य pmadb टेबल्स तक पहुँच (बुकमार्क्स, इतिहास, pma__userconfig) | केवल यदि स्टैक्ड क्वेरी या राइट-स्टाइल ब्रेकआउट संभव हो | अनुमानित। इस लैब में कंट्रोल यूजर के पास केवल phpmyadmin.* DML है |
इस लैब पर बंद: अनप्रमाणीकृत पहुंच, साइन-इन appuser SQL बॉक्स (केवल appdb; appuser पर phpmyadmin पर कोई GRANT नहीं), OS शेल, और स्टैक्ड क्वेरी। यदि pmadb / डिज़ाइनर सेटिंग्स बंद है तो फीचर no-op होता है (यह एक FAIL है, यह बचा हुआ हिस्सा नहीं)।
RELEASE_5_2_3 के आठ समानांतर स्रोत जांच। saveSetting json_encode को '...' में संयोजित करता है। उपयोगकर्ता नाम escapeString है। 6.x पहले से ही इस ब्लॉब को quoteString करता है। 5.2.3 ऐसा नहीं करता।
गलत मोड़: उपयोगकर्ता नाम पर इंजेक्ट करना (यह एस्केप किया गया है); #1064 की उम्मीद करना (# शेष को कमेंट आउट करता है, इसलिए MySQL काटे हुए UPDATE को स्वीकार करता है); स्टैक्ड क्वेरी को प्रमाणित मानना (mysqli डिफ़ॉल्ट सिंगल-स्टेटमेंट है)।
python3 phpmyadmin-designer-json-sqli-Abraxas-Labs.py
or
cd lab
./run.sh
केवल लूपबैक: http://127.0.0.1:19220। इमेज phpmyadmin:5.2.3 और mysql:8.0। कॉम्पोज प्रोजेक्ट phpmyadmin-designer-json-sqli। गवाह PMA-DESIGNER-JSON-SQLI-WITNESS।
SUCCESS phpmyadmin-designer-json-sqli version=5.2.3 how=live raw-concat=yes truncated=true sql-error=false quoteString=no PMA-DESIGNER-JSON-SQLI-WITNESS
JSON ब्लॉब पर quoteString(..., ControlUser) / escapeString, जैसे RecentFavoriteTable::saveToDb() और phpMyAdmin 6.x इस कॉलम पर करते हैं। json_encode आउटपुट को एकल-कोट्स वाले SQL लिटरल के अंदर न रखें।
962857e)libraries/classes/Database/Designer/Common.php saveSettingControllers/Database/DesignerController.php POST operation=save_setting_valueGET|POST /database/designerGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।