
phpMyAdmin 5.2.3 - उच्च - रिमोट - SQLi - Designer JSON अनसैनिटाइज़्ड आइडेंटिफायर
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-designer-json-sqli
राइट-अप: https://abraxaslabs.tech/research/phpmyadmin-designer-json-sqli
वर्ग: SQLi पहुँच: रिमोट
phpMyAdmin 5.2.3 (टैग RELEASE_5_2_3, कमिट 962857e)। Designer AJAX save_setting_value सेटिंग्स ब्लॉब को json_encode करता है और उसे control-user लिंक पर सिंगल-कोटेड UPDATE/INSERT में जोड़ देता है। उपयोगकर्ता नाम एस्केप किया गया है। JSON नहीं। json_encode सिंगल कोट को एस्केप नहीं करता।
एक साइन-इन उपयोगकर्ता index.php?route=/database/designer पर operation=save_setting_value और value में एक कोट के साथ POST करता है। फिर queryAsControlUser उस स्ट्रिंग को pma control user के रूप में pma__designer_settings के विरुद्ध चलाता है। वह खाता कॉन्फ़िगरेशन स्टोरेज है, लॉग-इन किया गया SQL बॉक्स नहीं। phpMyAdmin 6.x इस ब्लॉब को ControlUser पर quoteString में लपेटता है। 5.2.3 अभी भी इसे कच्चा जोड़ता है।
पुराने designer CVEs (2016-6616, 2019-11768, 2019-18622) उपयोगकर्ता नाम / डेटाबेस नाम थे। यह बचा हुआ हिस्सा JSON settings_data कॉलम है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | SQLi (pma__designer_settings पर control-user) |
| पहुँच | रिमोट (प्रमाणित कुकी लॉगिन; 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 |
एक साइन-इन phpMyAdmin उपयोगकर्ता जो Designer खोल सकता है, pma__designer_settings पर control user के रूप में SQL इंजेक्ट कर सकता है।
| विशेषाधिकार | विधि / पथ | लैब-प्रमाणित या अनुमानित |
|---|---|---|
| control-user 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 ब्लॉब में witness है और वैध JSON नहीं है। साफ़ सेव grid-ok चला गया |
| स्टैक्ड क्वेरी के बिना अन्य उपयोगकर्ताओं की designer पंक्तियाँ ओवरराइट करें (पीड़ित पंक्ति की अखंडता) | वही # WHERE username = '...' को कमेंट कर देता है | लैब-प्रमाणित। सीड victim {"keep":"safe"} ट्रंकेटेड witness ब्लॉब बन गया |
| control user के रूप में अतिरिक्त स्टेटमेंट | वही सिंक यदि control mysqli लिंक मल्टी-क्वेरी की अनुमति देता है | अनुमानित। डिफ़ॉल्ट mysqli::query सिंगल-स्टेटमेंट है। यहाँ सक्षम नहीं |
अन्य pmadb तालिकाओं तक पहुँचें (bookmarks, history, pma__userconfig) | केवल तभी जब स्टैक्ड क्वेरी या राइट-स्टाइल ब्रेकआउट संभव हो | अनुमानित। इस लैब में control user के पास केवल phpmyadmin.* DML है |
इस लैब पर बंद: अनप्रमाणित पहुँच, साइन-इन किया गया appuser SQL बॉक्स (केवल appdb; appuser के पास phpmyadmin पर कोई GRANT नहीं), OS शेल, और स्टैक्ड क्वेरी। यदि pmadb / designer settings बंद है तो सुविधा नो-ऑप हो जाती है (यह FAIL है, यह बचा हुआ हिस्सा नहीं)।
RELEASE_5_2_3 की आठ समानांतर स्रोत खोजें। saveSetting json_encode को '...' में जोड़ता है। उपयोगकर्ता नाम escapeString है। 6.x पहले से इस ब्लॉब को quoteString करता है। 5.2.3 नहीं करता।
गलत मोड़: username पर इंजेक्ट करना (यह escaped है); #1064 की अपेक्षा करना (# शेष को टिप्पणी बना देता है, इसलिए MySQL छोटा किया गया UPDATE स्वीकार कर लेता है); stacked queries को सिद्ध मानना (mysqli का डिफ़ॉल्ट single-statement है)।
python3 phpmyadmin-designer-json-sqli-Abraxas-Labs.py
या
cd lab
./run.sh
केवल लूपबैक: http://127.0.0.1:19220. इमेज phpmyadmin:5.2.3 और mysql:8.0. Compose प्रोजेक्ट 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। केवल लूपबैक लैब। कोई वारंटी नहीं।