
CVE-2019-9053 के लिए Python 3 में शैक्षिक PoC, CMS Made Simple <= 2.2.9 में एक time-based blind SQL इंजेक्शन। यह संस्करण CTF/प्रयोगशाला उपयोग के लिए अनुकूलित किया गया है, निष्कर्षण समय को कम करने के लिए पूर्व-कॉन्फ़िगर किए गए उपसर्गों और पुर्तगाली में व्याख्यात्मक संदेशों के साथ।
Python 3 में CVE-2019-9053 के लिए शैक्षिक PoC, जो CMS Made Simple <= 2.2.9 में time-based blind SQL Injection की कमजोरी है।
यह संस्करण CTF/प्रयोगशाला में उपयोग के लिए संशोधित किया गया है। इसमें निष्कर्षण समय कम करने के लिए पूर्व-कॉन्फ़िगर उपसर्ग और छात्रों को एक्सप्लॉइट की कार्यप्रणाली समझने में मदद करने के लिए पुर्तगाली में व्याख्यात्मक संदेश शामिल हैं।
यह परियोजना केवल शैक्षिक उद्देश्यों, नियंत्रित प्रयोगशालाओं और CTF वातावरणों के लिए है।
स्पष्ट अनुमति के बिना तीसरे पक्ष के सिस्टम पर इस कोड का उपयोग न करें।
इस रिपॉजिटरी के लेखक इस सामग्री के दुरुपयोग के लिए उत्तरदायी नहीं हैं।
CVE-2019-9053 CMS Made Simple के पुराने संस्करणों को प्रभावित करता है, जो निम्नलिखित एंडपॉइंट पर m1_idlist पैरामीटर के माध्यम से बिना प्रमाणीकरण के SQL Injection की अनुमति देता है:
/moduleinterface.php?mact=News,m1_,default,0
चूंकि SQL क्वेरी का परिणाम सीधे पृष्ठ पर दिखाई नहीं देता, इसलिए एक्सप्लॉइट time-based blind SQL Injection नामक तकनीक का उपयोग करता है।
एक्सप्लॉइट ऐसे पेलोड भेजता है जो डेटाबेस को sleep(1) निष्पादित करने के लिए मजबूर करते हैं जब कोई शर्त सत्य होती है।
अवधारणात्मक उदाहरण:
AND (
SELECT sleep(1)
FROM cms_users
WHERE password LIKE '0c01%'
)
यदि सर्वर को प्रतिक्रिया देने में देरी होती है, तो स्क्रिप्ट समझती है कि परीक्षित उपसर्ग सही है।
इस प्रकार, यह संवेदनशील जानकारी को वर्ण दर वर्ण पुनर्निर्मित करता है, जैसे:
CTF के इस संस्करण में, गतिविधि के दौरान आवश्यक समय कम करने के लिए कुछ उपसर्ग कोड में शामिल किए गए हैं।
SQL Injection तब होता है जब एप्लिकेशन उपयोगकर्ता द्वारा नियंत्रित डेटा को उचित उपचार के बिना SQL क्वेरी में डालता है।
इस मामले में, इंजेक्शन blind है क्योंकि क्वेरी का परिणाम सीधे HTTP प्रतिक्रिया में दिखाई नहीं देता।
यह time-based है क्योंकि हमलावर सर्वर की प्रतिक्रिया समय को प्रतिक्रिया चैनल के रूप में उपयोग करता है। यदि परीक्षित शर्त सत्य है, तो डेटाबेस sleep() के साथ देरी निष्पादित करता है। यदि असत्य है, तो प्रतिक्रिया सामान्य रूप से आती है।
सरलीकृत उदाहरण:
एक्सप्लॉइट द्वारा पूछा गया प्रश्न:
"क्या पासवर्ड हैश 0c01 से शुरू होता है?"
यदि हाँ:
डेटाबेस sleep(1) निष्पादित करता है, और प्रतिक्रिया देर से आती है।
यदि नहीं:
प्रतिक्रिया बिना ध्यान देने योग्य देरी के आती है।
इस प्रक्रिया को वर्ण दर वर्ण दोहराकर, एक्सप्लॉइट डेटाबेस से मानों को पुनर्निर्मित करने में सक्षम होता है, भले ही वे सीधे पृष्ठ पर दिखाई न दें।
सॉल्ट एक अतिरिक्त मान है जिसे हैश उत्पन्न करने से पहले पासवर्ड के साथ जोड़ा जाता है।
इस चुनौती में, CMS Made Simple लगभग निम्नलिखित तर्क का उपयोग करता है:
md5(salt + password)
उदाहरण:
salt = 1dac0d92e9fa6bb2
password = exemplo123
हैश की गणना इस प्रकार की जाएगी:
1dac0d92e9fa6bb2exemplo123
सॉल्ट पूर्व-गणना तालिकाओं के हमलों को कठिन बनाने और समान पासवर्डों को विभिन्न संदर्भों में अलग-अलग हैश उत्पन्न करने के लिए कार्य करता है।
इसके बावजूद, md5(salt + password) पासवर्ड भंडारण का एक पुराना और कमजोर तरीका है। आधुनिक सिस्टम को पासवर्ड के लिए विशेष एल्गोरिदम का उपयोग करना चाहिए, जैसे:
यह संस्करण व्यावहारिक गतिविधि में उपयोग को आसान बनाने के लिए अनुकूलित किया गया है।
मुख्य परिवर्तन:
चुनौती में उपयोग किए गए मान:
पूर्ण सॉल्ट: 1dac0d92e9fa6bb2
उपयोगकर्ता नाम: mitch
ईमेल: [email protected]
पूर्ण हैश: 0c01f4468bd75d7a84c7eb73846e8d96
एक्सप्लॉइट में कॉन्फ़िगर किए गए उपसर्ग:
सॉल्ट उपसर्ग: 1dac0d92
उपयोगकर्ता नाम उपसर्ग: mit
ईमेल उपसर्ग: admin@
हैश उपसर्ग: 0c01f446
ये उपसर्ग हमले के तर्क को नहीं हटाते। वे केवल प्रयोगशाला गतिविधि के लिए आवश्यक समय कम करते हैं।
poc-CVE-2019-9053/
├── exploit_ctf.py
├── requirements.txt
├── README.md
├── wordlist-example.txt
└── .gitignore
रिपॉजिटरी को क्लोन करें:
git clone https://github.com/SEU_USUARIO/poc-CVE-2019-9053.git
cd poc-CVE-2019-9053
एक वर्चुअल वातावरण बनाएँ:
python3 -m venv .venv
वर्चुअल वातावरण को सक्रिय करें:
source .venv/bin/activate
निर्भरताएँ स्थापित करें:
pip install -r requirements.txt
requirements.txt फ़ाइल में यह होना चाहिए:
requests
termcolor
सरल निष्पादन:
python3 exploit_ctf.py -u http://target/cms
वर्डलिस्ट का उपयोग करके पासवर्ड क्रैक करने का प्रयास:
python3 exploit_ctf.py -u http://target/cms --crack -w wordlist-example.txt
स्क्रिप्ट की सहायता देखें:
python3 exploit_ctf.py -h
wordlist-example.txt फ़ाइल में यह हो सकता है:
wrongpassword
admin123
dieema123
password
123456
[+] पासवर्ड का सॉल्ट मिला: 1dac0d92e9fa6bb2
[+] उपयोगकर्ता नाम मिला: mitch
[+] ईमेल मिला: [email protected]
[+] पासवर्ड का हैश मिला: 0c01f4468bd75d7a84c7eb73846e8d96
[+] पासवर्ड मिला: dieema123
एक्सप्लॉइट द्वारा सॉल्ट और पासवर्ड हैश निकालने के बाद, यह वर्डलिस्ट का उपयोग करके पासवर्ड को सादे पाठ में खोजने का प्रयास कर सकता है।
परीक्षित तर्क है:
md5(salt + candidate_password)
वर्डलिस्ट के प्रत्येक पासवर्ड के लिए, स्क्रिप्ट हैश की गणना करती है और डेटाबेस से निकाले गए हैश से तुलना करती है।
अवधारणात्मक उदाहरण:
candidate_hash = md5("1dac0d92e9fa6bb2" + "dieema123")
यदि परिणाम निकाले गए हैश के बराबर है, तो पासवर्ड मिल गया है।
Time-based SQL Injection आमतौर पर धीमी होती है, क्योंकि प्रत्येक वर्ण का परीक्षण कई अनुरोधों द्वारा किया जाना चाहिए।
यह संस्करण समय कम करने के लिए निम्नलिखित का उपयोग करता है:
फिर भी, समय निम्नलिखित के आधार पर भिन्न हो सकता है:
TIME_DELAY में कॉन्फ़िगर किया गया मान।यदि बहुत अधिक गलत सकारात्मक या गलत नकारात्मक हैं, तो कोड में TIME_DELAY का मान बढ़ाएँ।
CTF के लिए संशोधित Python 3 संस्करण Derick G. Andrighetti द्वारा।
मूल रूप से Certimeter Group के Daniele Scanu द्वारा प्रकाशित एक पुराने सार्वजनिक Python 2 PoC पर आधारित।
शैक्षिक उपयोग।
यह सामग्री अध्ययन, प्रयोगशाला प्रदर्शन और CTF गतिविधियों के उद्देश्यों के लिए तैयार की गई है।