
phpMyAdmin 5.2.3 - उच्च - रिमोट - शेष - isSuperUser जाँच छोड़ी गई
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-issuperuser
Class: Privilege leftover Reach: Remote
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
DatabaseInterface::isSuperUser() एक SUPER / SYSTEM_USER जाँच नहीं है। यह SELECT 1 FROM mysql.user LIMIT 1 है। कोई भी अकाउंट जो mysql.user पढ़ सकता है, शेष सत्र के लिए सुपरयूज़र के रूप में कैश हो जाता है। $cfg['AllowUserDropDatabase'] डिफ़ॉल्ट रूप से false है। DestroyController, SqlController, ImportController, और databases पेज सभी उस फ़्लैग के आसपास isSuperUser शॉर्टकट लेते हैं।
यह एक phpMyAdmin नीति बायपास है, नई MySQL विशेषाधिकार नहीं। mysql.user पर SELECT के साथ DROP, और SUPER के बिना, PMA के माध्यम से Drop करने के लिए पर्याप्त है।
| ID | अभी तक कोई CVE नहीं |
| Class | Privilege leftover |
| Reach | Remote (MySQL अकाउंट के रूप में प्रमाणित कुकी लॉगिन) |
| CWE | CWE-863 |
| CVSS | Medium: 6.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L |
| Product | phpMyAdmin |
| Affected | 5.2.3 टैग RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| Auth | MySQL अकाउंट के रूप में प्रमाणित कुकी लॉगिन |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
एक साइन-इन MySQL अकाउंट जो mysql.user पढ़ सकता है (सामान्य बैकअप/मॉनिटर SELECT) और साथ में DROP, SUPER के बिना, phpMyAdmin सुपरयूज़र के रूप में माना जाता है।
| Privilege | Method / sink | Recon / integrity / availability | Lab-proven or inferred |
|---|---|---|---|
$cfg['AllowUserDropDatabase']=false को बायपास करें और databases पेज पर Drop देखें | GET index.php?route=/server/databases | Drop UI की Recon | Lab-proven। bulkActionDropButton / selected_dbs[] selectuser के लिए मौजूद; plaindrop के लिए अनुपस्थित |
| PMA destroy handler के माध्यम से डेटाबेस Drop करें | POST index.php?route=/server/databases/destroy selected_dbs[]=dropme ajax_request=true | उस डेटाबेस की Integrity / availability | Lab-proven। JSON success:true, "1 database has been dropped successfully." dropme चला गया |
SQL बॉक्स से DROP DATABASE चलाएँ | POST index.php?route=/sql sql_query=DROP DATABASE \dropme_sql`` | उस डेटाबेस की Integrity / availability | Lab-proven। डेटाबेस चला गया। नेगेटिव अकाउंट को "DROP DATABASE statements are disabled." मिलता है |
isSuperUser() पर गेट किए गए अन्य PMA स्क्रीन अनलॉक करें | Privileges, replication, status, user groups, engines, binlog, variables | उन स्क्रीनों की Recon / integrity | कॉल साइट्स से अनुमानित। परीक्षण नहीं किया गया |
mysql.user पढ़ें | MySQL SELECT जिसे PMA SUPER oracle के रूप में उपयोग करता है | उस कैटलॉग की Recon जिसे PMA गलती से SUPER समझता है | Lab-proven। वही ग्रांट है जिसे leftover गलती से SUPER समझता है |
इस लैब पर बंद: वास्तविक MySQL SUPER (SHOW GRANTS USAGE + table DROP + mysql.user पर SELECT ही रहता है)। FILE, GRANT OPTION, shutdown, और ALL PRIVILEGES प्रदान नहीं किए गए हैं। DROP वाला अकाउंट जिसके पास mysql.user पर SELECT नहीं है, वह अभी भी PMA के माध्यम से drop नहीं कर सकता। यह नई MySQL विशेषाधिकार नहीं है और RCE नहीं है।
Same pin: WebAuthn CustomServer leftover.
मैंने phpMyAdmin RELEASE_5_2_3 पिन किया। SUPER की तरह बात करने वाले privilege gates SUPER की तरह दिखने चाहिए। यह एक कैटलॉग SELECT की तरह दिखता है:
$result = $this->tryQuery('SELECT 1 FROM mysql.user LIMIT 1');
$isSuperUser = false;
if ($result) {
$isSuperUser = (bool) $result->numRows();
}
SessionCache::set('is_superuser', $isSuperUser);
AllowUserDropDatabase (डिफ़ॉल्ट false) के आसपास इस फ़्लैग को लेने वाले gates:
Controllers/Server/DatabasesController.php is_drop_allowedControllers/Server/Databases/DestroyController.php (AJAX destroy)Controllers/Sql/SqlController.php / Sql::hasNoRightsToDropDatabaseControllers/Import/ImportController.phpControllers/Database/OperationsController.phpपहले से दर्ज गलत रास्ते: वास्तविक MySQL SUPER का दावा करना; DROP-only अकाउंट को बग मानना (वह अकाउंट नेगेटिव कंट्रोल है); इसे RCE तक बढ़ाना; एक reverse shell। नाटक।
python3 phpmyadmin-issuperuser-Abraxas-Labs.py
# or: cd lab && ./run.sh
लक्ष्य केवल http://127.0.0.1:19270। इमेज phpmyadmin:5.2.3 और mysql:8.0। Compose प्रोजेक्ट phpmyadmin-issuperuser। $cfg['AllowUserDropDatabase']=false। रन के बाद स्टैक टियर डाउन हो जाता है।
selectuser के पास mysql.user पर SELECT और dropme / dropme_sql पर DROP है, SUPER नहीं। plaindrop के पास केवल nodropme पर DROP है। Databases पेज selectuser के लिए Drop दिखाता है। POST /server/databases/destroy dropme को drop करता है। POST /sql DROP DATABASE dropme_sql के साथ भी चलता है। plaindrop को अभी भी destroy से Error JSON और /sql से "DROP DATABASE statements are disabled" मिला।
SUCCESS phpmyadmin-issuperuser drop-ui=yes destroy=ok sql-drop=ok grants-no-super=yes mysql.user-select=yes neg-drop-ui=no neg-destroy=denied PMA-ISSUPERUSER-WITNESS
INFORMATION_SCHEMA या SHOW GRANTS के माध्यम से वास्तविक SUPER / SYSTEM_USER का परीक्षण करें। उस UI के लिए एक अलग "can read mysql.user" फ़्लैग रखें जिसे वास्तव में उस कैटलॉग की आवश्यकता है। कैटलॉग SELECT को सुपरयूज़र के रूप में कैश न करें।
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/DatabaseInterface.php isSuperUser()GNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।