
TryHackMe room Source पर एक लेख और भेद्यता का शोषण करने के लिए एक पायथन स्क्रिप्ट
TryHackMe रूम Source का एक लेख और इस भेद्यता का शोषण करने के लिए एक पायथन स्क्रिप्ट
मैं इस भेद्यता की खोज का कोई श्रेय नहीं लेता। निम्नलिखित लोगों को धन्यवाद जिन्होंने ऐसे संसाधन प्रदान किए जिनसे मेरे जैसे लोग सीख सकते हैं!
भेद्यता की खोज:
Özkan Mustafa Akkuş
MSF मॉड्यूल:
https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/http/webmin_backdoor.rb
https://www.rapid7.com/db/modules/exploit/linux/http/webmin_backdoor/
MSF मॉड्यूल लेखक:
wvu
TryHackMe रूम:
https://tryhackme.com/room/source
THM लेखक:
https://tryhackme.com/p/DarkStar7471
संसाधन:
https://www.webmin.com/exploit.html
https://github.com/webmin/webmin/issues/947
https://www.perlmonks.org/?node_id=301355
मैं किसी भी तरह से एक अनुभवी सुरक्षा पेशेवर नहीं हूं। इसका मतलब है कि मैं कुछ गलत जानकारी प्रदान कर सकता हूं। यदि आप एक अनुभवी पेशेवर/अनुभवी शोधकर्ता हैं और आपको कुछ गलत लगता है, तो कृपया मुझे सूचित करें ताकि मैं वापस आ सकूं, अपनी गलतियों का अध्ययन कर सकूं और सही जानकारी प्रदान कर सकूं। यह मेरे साथ-साथ अन्य नौसिखिए शोधकर्ताओं के लिए भी लाभदायक है जो इस लेख पर ठोकर खा सकते हैं। यदि आपको मेरे द्वारा लिखी गई कोई गलत जानकारी मिलती है, तो कृपया मुझसे पर संपर्क करें ताकि मैं इसे ठीक कर सकूं। धन्यवाद!
1. इतिहास
Webmin यूनिक्स-जैसे सिस्टम प्रशासन के लिए एक वेब-आधारित उपकरण है। 2018 की पहली तिमाही में किसी समय, Webmin एक आपूर्ति श्रृंखला हमले की चपेट में आ गया, जिसमें एक अज्ञात हमलावर password_change.cgi फ़ाइल में दुर्भावनापूर्ण कोड डालने में सक्षम था, जिसने एक भेद्यता उत्पन्न की जिससे Webmin के उस संस्करण (1.890) को डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ होस्ट करने वाले किसी भी सिस्टम पर एक बैकडोर खुल सकता था। मैं इसे आपूर्ति श्रृंखला हमला कहता हूं क्योंकि सॉफ़्टवेयर के डेवलपर्स/वितरकों के उत्पाद का स्रोत कोड समझौता कर लिया गया था। जब आपूर्तिकर्ता ने समझौता किए गए उत्पाद को जारी किया, तो जिस किसी ने भी अपने सॉफ़्टवेयर को अपडेट किया, वह अब कमजोर कोड चला रहा होगा, जिससे हमलावर को उस कमजोर कोड को चलाने वाले किसी भी सिस्टम से समझौता करने की क्षमता मिल गई। उसी वर्ष, Webmin डेवलपर्स को पता चल गया कि क्या हुआ था और उन्होंने फ़ाइल को उसकी मूल स्थिति में वापस कर दिया, हालांकि, हमलावर फिर से कोड डालने में सक्षम था। इस बार, कोड तभी कमजोर होगा जब समाप्त पासवर्ड बदलने का विकल्प सक्षम हो। यह भेद्यता अगस्त 2019 तक खोजी नहीं जाएगी। भेद्यता को Webmin संस्करण 1.930 में पैच किया गया था।
2. कोड
कुछ खोजबीन के बाद, मैं कोड की वह पंक्ति ढूंढने में सक्षम हुआ जिसने Webmin संस्करण 1.890 को कमांड इंजेक्शन के लिए कमजोर बना दिया। मुझे सही जानकारी खोजने में कठिनाई हो रही थी क्योंकि वास्तव में इस मुद्दे से जुड़े दो अलग-अलग CVE हैं (CVE-2019-15231/CVE-2019-15107)। CVE-2019-15231 संस्करण 1.890 में डिफ़ॉल्ट कॉन्फ़िगरेशन भेद्यता से संबंधित है और CVE-2019-15107 संस्करण 1.920 तक के संस्करणों में समाप्त पासवर्ड बदलने के विकल्प को सक्षम करने की आवश्यकता वाली भेद्यता से संबंधित है। आइए संस्करण 1.890 के कोड पर एक नज़र डालें। password_change.cgi में पंक्ति 12 पर, हमारे पास कोड की निम्नलिखित पंक्ति है:
$in{'expired'} eq '' || die $text{'password_expired'},qx/$in{'expired'}/;
इस लेखन के समय, मैंने कभी perl में कुछ नहीं लिखा है। हम खोज इंजन का उपयोग करके कोड की इस पंक्ति को विच्छेदित करेंगे ताकि यह बेहतर ढंग से समझ सकें कि कोड क्या करता है और यह शोषण के लिए क्यों कमजोर है। || ऑपरेंड के बाईं ओर कोड का पहला टुकड़ा एक वेरिएबल ($in) प्रतीत होता है जो एक पैरामीटर (expired) लेता है और जांचता है कि क्या यह एक खाली स्ट्रिंग '' के बराबर (eq) है। बीच में, हमारे पास || ऑपरेंड है। || perl में लॉजिकल ऑपरेंड or का उपयोग करने का एक और तरीका है। perl में || का उपयोग करते समय, यदि ऑपरेंड का बायां भाग सत्य है, तो दाएं भाग का मूल्यांकन नहीं किया जाएगा। यदि बायां भाग असत्य है, तो दाएं भाग का मूल्यांकन किया जाएगा। || ऑपरेंड के दाईं ओर कोड के पहले भाग में, हम die $text{'password_expired'} देख सकते हैं। perl में, die एक फ़ंक्शन है जो स्क्रिप्ट प्रक्रिया को मार देगा और एक त्रुटि संदेश प्रदर्शित करेगा। संदेश संभवतः $text वेरिएबल होगा जो कहता है कि पासवर्ड समाप्त हो गया है। कोड का अंतिम भाग वह है जहां यह दिलचस्प हो जाता है। हम देखते हैं कि हमारे पास एक अल्पविराम , है जिसके बाद qx/$in{'expired'}/ और एक अर्धविराम ; है जो कोड की पंक्ति को समाप्त करता है। अल्पविराम कोड के लिए एक विभाजक के रूप में कार्य करता है, पहले बाएं भाग का मूल्यांकन किया जाएगा और फिर दूसरे भाग का मूल्यांकन किया जाएगा। perl में, qx एक फ़ंक्शन है जो होस्ट पर सिस्टम कमांड को निष्पादित करने की अनुमति देता है। // पैरामीटर की पहचान करने के लिए उपयोग किए जाने वाले सीमांकक हैं। इस मामले में, हमारे पास qx/$in{'expired'}/ है जो $in{'expired'} पैरामीटर को एक सिस्टम कमांड के रूप में निष्पादित करेगा। मेरा मानना है कि $in वेरिएबल php में $_GET के समान कुछ हो सकता है, निम्नलिखित कारण से। मेरे द्वारा लिखी गई शोषण स्क्रिप्ट में, हमारे पास expired नामक एक पैरामीटर है जो सर्वर पर पोस्ट अनुरोध के माध्यम से भेजे जाने से पहले पेलोड को संग्रहीत करता है। कोड इस तरह दिखता है data = {'expired':payload,}। $in वेरिएबल को हमारे द्वारा expired पर सेट किए गए मान को पुनः प्राप्त करने के लिए कुछ करना होगा ताकि qx फ़ंक्शन द्वारा पेलोड को निष्पादित किया जा सके। इस अनुभाग को समाप्त करने के लिए, कोड की कमजोर पंक्ति पाती है कि पोस्ट अनुरोध में हमारा expired पैरामीटर एक खाली स्ट्रिंग के बराबर नहीं है, इसलिए || ऑपरेंड अब कोड के दाएं भाग का मूल्यांकन करेगा और expired पैरामीटर में संग्रहीत हमारे पेलोड को निष्पादित करेगा। आइए TryHackMe.com से Source रूम के लिए लेख पर आते हैं।
आइए पोर्ट स्कैन से शुरू करें। हम एक व्यापक अवलोकन प्राप्त करने के लिए rustscan का उपयोग करेंगे क्योंकि nmap बहुत धीमा हो सकता है।

ऐसा लगता है कि हमारे पास 2 पोर्ट खुले हैं, 22 और 10000। अब हम यह पता लगाने के लिए nmap का उपयोग करेंगे कि प्रत्येक पोर्ट पर कौन सी सेवाएं चल रही हैं।

तो हमारे पास SSH अपने मानक पोर्ट पर चल रहा है और पोर्ट 10000 पर एक HTTP सेवा चल रही है। आइए पोर्ट 10000 पर चल रहे पेज पर जाएं और देखें कि वहां क्या है।

इस पेज तक पहुंचने के लिए आपको HTTPS का उपयोग करना होगा और SSL प्रमाणपत्र चेतावनी को बायपास करना होगा। ऐसा लगता है कि हमारे पास Webmin सेवा के लिए एक लॉगिन पेज है। जब मैंने मूल रूप से इस बॉक्स को किया था, तो मैंने कुछ अलग-अलग निर्देशिका ब्रूटफोर्स प्रयास किए थे, हालांकि कुछ भी दिलचस्प नहीं आया। आइए देखें कि क्या nmap स्कैन से हमें जो Webmin का संस्करण मिला है, उसके लिए searchsploit के माध्यम से कोई भेद्यता है।

तो ऐसा लगता है कि हमारे पास यहां कुछ अलग-अलग विकल्प हैं, हालांकि उनमें से कोई भी हमारे संस्करण के बराबर नहीं है। आइए MSF खोलें और देखें कि हमारे पास काम करने के लिए क्या है।

हमारे पास यहां चुनने के लिए कुछ अलग-अलग विकल्प हैं। आइए nmap से प्राप्त webmin संस्करण की खोज करें और देखें कि क्या कोई CVE आता है जो हमें इसे कम करने में मदद कर सकता है।

भेद्यता सारांश में, हम देखते हैं कि इसमें password_change.cgi फ़ाइल के बारे में कुछ उल्लेख किया गया है। आइए अपनी MSF खोज से नंबर 5 का उपयोग करें क्योंकि इसमें भी password_change.cgi फ़ाइल के साथ-साथ वही प्रकटीकरण तिथि का उल्लेख है।

लोल हम वास्तव में MSF का उपयोग नहीं करने जा रहे हैं। MSF अच्छा है लेकिन अपने स्वयं के कोड से किसी चीज़ का शोषण करने का तरीका समझना उतना मजेदार नहीं है! मैंने इस शोषण के लिए रूबी स्रोत कोड को एक संदर्भ के रूप में उपयोग किया ताकि पायथन में अपना स्वयं का शोषण कोड तैयार कर सकूं। आइए इसके बजाय उसका उपयोग करें!

बदा-बिंग बदा-बूम हमें रूम में रूट शेल मिल गया है! मैं फ़्लैग प्रकट नहीं करने जा रहा हूं। मुझे यकीन है कि आप उन्हें ढूंढ सकते हैं! पढ़ने के लिए धन्यवाद और आपका दिन शुभ हो!