
TryHackMe.com के Steel Mountain बॉक्स पर एक लेख और CVE-2014-6287 के लिए एक्सप्लॉइट
TryHackMe.com के Steel Mountain बॉक्स पर एक राइट-अप और CVE-2014-6287 के लिए एक्सप्लॉइट
मैं इस कमजोरी की मूल खोज और दोहन का कोई श्रेय नहीं लेता। निम्नलिखित लोगों को धन्यवाद!
खोज:
Daniele Linguaglossa
Metasploit मॉड्यूल लेखक:
Muhamad Fadzil Ramli
TryHackMe रूम और लेखक:
https://tryhackme.com/room/steelmountain
https://tryhackme.com/p/tryhackme
संदर्भ:
https://nvd.nist.gov/vuln/detail/CVE-2014-6287
https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/windows/http/rejetto_hfs_exec.rb
https://subscription.packtpub.com/book/networking_and_servers/9781786463166/1/ch01lvl1sec20/vulnerability-analysis-of-hfs-2-3
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6287
https://www.tutorialspoint.com/pascal/pascal_functions.htm
मैं किसी भी तरह से एक अनुभवी सुरक्षा पेशेवर नहीं हूँ। इसका मतलब है कि मैं कुछ गलत जानकारी दे सकता हूँ। यदि आप एक अनुभवी पेशेवर/अनुभवी शोधकर्ता हैं और आपको कुछ गलत दिखता है, तो कृपया मुझे सूचित करें ताकि मैं वापस आ सकूं, अपनी गलती का अध्ययन कर सकूं और सही जानकारी प्रदान कर सकूं। यह मेरे और उन अन्य नौसिखिए शोधकर्ताओं के लिए फायदेमंद है जो इस राइट-अप पर ठोकर खा सकते हैं। यदि आपको मेरी लिखी कोई गलत जानकारी मिले, तो कृपया मुझसे [email protected] पर संपर्क करें ताकि मैं इसे ठीक कर सकूं। धन्यवाद!
Rejetto फ़ाइल सर्वर (जिसे HFS के नाम से भी जाना जाता है) एक फ़ाइल साझाकरण प्रोग्राम है जो नेटवर्क पर फ़ाइलों को प्रकाशित और साझा करने के लिए उपयोग किया जाता है। संस्करण 2.3 में, एक कमजोरी थी जिसने हमलावर को CVE-2014-6287 में वर्णित अनुसार सर्च पैरामीटर में एक नल बाइट दर्ज करके सिस्टम कमांड निष्पादित करने की अनुमति दी। कोड अपने regex (रेगुलर एक्सप्रेशन) कॉन्फ़िगरेशन के साथ नल-बाइट को ठीक से प्रोसेस नहीं करता है और इसलिए रिमोट कोड निष्पादन कमजोरी की ओर ले जाता है।
यह कमजोरी findMacroMarker फ़ंक्शन में पाई जा सकती है जो parserLib.pas फ़ाइल से उत्पन्न होती है। .pas पास्कल प्रोग्रामिंग भाषा के लिए फ़ाइल एक्सटेंशन है। इस लेखन के समय, मैंने पास्कल में कुछ भी कोड नहीं किया है। आइए कोड स्निपेट देखें और समझें कि यह क्या करता है!
function findMacroMarker(s:string; ofs:integer=1):integer;
begin result:=reMatch(s, '{[.:]|[.:]}||', 'm!', ofs) end;
कोड की पहली पंक्ति findMacroMarker नामक फ़ंक्शन की घोषणा है जो दो पैरामीटर लेता है। पास्कल में, पैरामीटर के डेटा प्रकार को घोषित करना आवश्यक है, इसलिए s:string का अर्थ है कि वेरिएबल s एक string है, यही बात integer डेटा प्रकार वाले वेरिएबल ofs पर भी लागू होती है। पैरामीटर के दाईं ओर, हम कोलन वर्ण देखते हैं जिसके बाद integer आता है। इसे फ़ंक्शन प्रकार के रूप में जाना जाता है। सेमीकोलन उस कोड लाइन के अंत को चिह्नित करता है। अगली कोड लाइन में पहला शब्द begin है। यह कंपाइलर को बताता है कि फ़ंक्शन कहाँ शुरू होता है। आगे बढ़ते हुए हम result नामक एक वेरिएबल देखते हैं जिसके बाद असाइनमेंट ऑपरेटर := आता है। result वेरिएबल को reMatch फ़ंक्शन को असाइन किया गया है। मैं इंटरनेट पर reMatch के बारे में कुछ नहीं ढूंढ पाया इसलिए मुझे लगता है कि यह HFS में कहीं और लिखा गया एक कस्टम फ़ंक्शन है। हमारे लिए भाग्यशाली बात यह है कि फ़ंक्शन स्वयं व्याख्यात्मक है। reMatch स्पष्ट रूप से रेगुलर एक्सप्रेशन मैच के लिए संक्षिप्त है, जिसके बाद वह regex पैटर्न है जिसे यह खोज रहा है, जो reMatch फ़ंक्शन के पैरामीटर के साथ-साथ कोड की पहली पंक्ति में परिभाषित प्रारंभिक वेरिएबल पैरामीटर में शामिल है। दूसरी पंक्ति के अंत में, end शब्द का उपयोग कंपाइलर के लिए फ़ंक्शन के अंत को परिभाषित करने के लिए किया जाता है।
कमजोरी उपरोक्त reMatch फ़ंक्शन में वर्णित regex पैटर्न में पाई जाती है। regex नलबाइट %00 को ठीक से संभालने में विफल रहता है। जब हम एक प्रीपेंडेड नलबाइट के साथ एक सिस्टम कमांड पास करते हैं, तो फ़ंक्शन बग का सामना करेगा और होस्ट कंप्यूटर पर कमांड निष्पादित करेगा। इस कमजोरी का दोहन करने के लिए, हमें बस इतना करना है कि GET अनुरोध के सर्च पैरामीटर में नलबाइट के बाद {.exec|code.} (code वह कमांड है जिसे आप निष्पादित करना चाहते हैं) इस प्रकार URL के माध्यम से पास करें:
http://(IP-Address/DomainName)/?search==%00{.exec|CommandGoesHere.}।
आइए rustscan के साथ पोर्ट स्कैन से शुरू करें। मैं अटैक सरफेस का त्वरित दृश्य प्राप्त करने के लिए rustscan पसंद करता हूँ।

यहां हमारे पास काफी संख्या में खुले पोर्ट हैं। अब हम nmap के साथ गहराई से खोज करेंगे और पता लगाएंगे कि पोर्ट की इस श्रृंखला पर कौन सी सेवाएं सुन रही हैं ताकि हम अपनी शोषण योग्य सेवा ढूंढ सकें।

हमारे पास उच्च पोर्ट पर Microsoft Windows RPC नामक एक सेवा चल रही है। RPC का अर्थ रिमोट प्रोसीजर कॉल है। यह विंडोज प्रक्रियाओं को नेटवर्क पर या कंप्यूटर के भीतर ही संचार करने की अनुमति देता है। आगे बढ़ते हुए, हमारे पास पोर्ट 80 और 8080 पर कुछ अलग-अलग वेबसर्वर चल रहे हैं। पोर्ट 5985 और 47001 पर, Microsoft Httpapi Httpd मौजूद है जो एप्लिकेशन को Microsoft IIS (इंटरनेट सूचना सर्वर) की आवश्यकता के बिना HTTP पर संचार करने की अनुमति देता है। Nmap पोर्ट 3389 पर एक संभावित वेबसर्वर का पता लगाता है, हालांकि, मैं HTTP या SSL पर कनेक्ट नहीं कर पाया। आइए पोर्ट 80 पर वेबसर्वर से कनेक्ट करें क्योंकि यह HTTP प्रोटोकॉल के लिए मानक पोर्ट है।

पोर्ट 80 पर, हमें एक वेबपेज प्रस्तुत किया जाता है जो स्टील माउंटेन कंपनी का लोगो और महीने के कर्मचारी लेबल वाला एक फोटो दिखाता है। यदि हम वेब डेवलपर टूल खोलते हैं, तो हम देख सकते हैं कि फोटो BillHarper.png लेबल किया गया है जो हमें हमारे पहले प्रश्न का उत्तर देता है। आइए अन्य सुनने वाली सेवाओं से कनेक्ट करें और देखें कि हम क्या पा सकते हैं।

जब हम पोर्ट 5985 पर सेवा से कनेक्ट करते हैं, तो हमें HTTP त्रुटि कोड 404 मिलता है। 404 त्रुटि कोड का मतलब है कि सर्वर अनुरोधित संसाधन नहीं ढूंढ सका। यहां कोई दिलचस्पी की बात नहीं है। आइए अगले पर चलते हैं।

हाँ! अब यह दिलचस्प लगता है। पोर्ट 8080 पर, हमारे पास किसी प्रकार की फ़ाइल साझाकरण सेवा है। आइए चारों ओर देखें और देखें कि क्या हम इस सेवा के बारे में अधिक जानकारी प्राप्त कर सकते हैं। यदि हम नीचे बाएं कोने में देखते हैं, तो हम एक नाम और एक संस्करण संख्या जैसा कुछ देख सकते हैं: HttpFileServer 2.3। आइए आगे और पता लगाएं।

यदि हम HttpFileServer 2.3 लेबल वाले लिंक पर क्लिक करते हैं, तो हम पोर्ट 8080 पर चल रहे सॉफ़्टवेयर के नाम के लिए एक वेबपेज पर निर्देशित होते हैं। इस मामले में, हमारे पास Rejetto HFS HTTP File Server है। आइए दूसरे पोर्ट 47001 की जाँच करें ताकि हम अपने सभी आधारों को कवर कर सकें। यदि हमें कुछ उपयोगी नहीं मिलता है, तो हम Rejetto पर वापस आ सकते हैं और ज्ञात CVE खोजना शुरू कर सकते हैं।

लगता है पोर्ट 47001 पर हमारे पास एक और 404 है। आइए Rejetto HFS 2.3 के लिए CVE खोजना शुरू करें।
