
CTF_WRITEUPS/TryHackMe /CVE-2021-41773/
CTF_WRITEUPS/TryHackMe /CVE-2021-41773/
एक संक्षिप्त इतिहास
5 अक्टूबर 2021 को, Apache HTTP Server v2.4.49 पर पथ पारगमन हमले का विवरण देने वाला एक CVE जारी किया गया। CVE-2021-41773 नंबर दिया गया, इसे निम्नलिखित विवरण के साथ जारी किया गया:
Apache HTTP Server 2.4.49 में पथ सामान्यीकरण में किए गए बदलाव में एक दोष पाया गया। एक हमलावर पथ पारगमन हमले का उपयोग करके URLs को अपेक्षित दस्तावेज़ रूट के बाहर फ़ाइलों से मैप कर सकता है। यदि दस्तावेज़ रूट के बाहर की फ़ाइलें "require all denied" द्वारा सुरक्षित नहीं हैं, तो ये अनुरोध सफल हो सकते हैं। इसके अतिरिक्त (sic) यह दोष CGI स्क्रिप्ट जैसी व्याख्या की गई फ़ाइलों के स्रोत को लीक कर सकता है। यह मुद्दा जंगली में शोषण किया जा रहा है। यह मुद्दा केवल Apache 2.4.49 को प्रभावित करता है, पुराने संस्करणों को नहीं।
आइए इसे तोड़ें और देखें कि हमारे लिए इसका वास्तव में क्या अर्थ है:
बहुत सारे फिक्स बाद में...
तो Apache ने इस बग को ठीक किया और v2.4.50 जारी किया। कहानी का अंत, है ना? खैर, बिल्कुल नहीं। केवल 2 दिन बाद, 7 अक्टूबर को, पिछले CVE का हवाला देते हुए एक नया CVE जारी किया गया। इसमें उल्लेख किया गया कि पिछले पथ पारगमन हमले का फिक्स अधूरा था, और हम अभी भी पारगमन कर सकते हैं यदि प्रश्न में पथ अपने URLs को फ़ाइल सिस्टम पर मैप करने के लिए एलियास निर्देश का उपयोग करता है। CVE को नंबर CVE-2021-42013 दिया गया, निम्नलिखित विवरण के साथ:
यह पाया गया कि Apache HTTP Server 2.4.50 में CVE-2021-41773 का फिक्स अपर्याप्त था। एक हमलावर पथ पारगमन हमले का उपयोग करके URLs को एलियास-जैसे निर्देशों द्वारा कॉन्फ़िगर की गई निर्देशिकाओं के बाहर फ़ाइलों से मैप कर सकता है। यदि इन निर्देशिकाओं के बाहर की फ़ाइलें सामान्य डिफ़ॉल्ट कॉन्फ़िगरेशन "require all denied" द्वारा सुरक्षित नहीं हैं, तो ये अनुरोध सफल हो सकते हैं। यदि इन एलियास्ड पथों के लिए CGI स्क्रिप्ट भी सक्षम हैं (sic), तो यह रिमोट कोड एक्ज़ीक्यूशन (RCE) की अनुमति दे सकता है। यह मुद्दा केवल Apache 2.4.49 और Apache 2.4.50 को प्रभावित करता है, पुराने संस्करणों को नहीं।
पहले की तरह, हम यहां कुछ बातें सीख सकते हैं:
जब हम इस पागलपन को संसाधित कर रहे हैं, हम अगले कार्य में आवश्यक कॉन्फ़िगरेशन पर गौर करेंगे।
नीचे दिए गए प्रश्नों के उत्तर दें
थ्योरी का एक टुकड़ा
पथ पारगमन एक हमला है जिसका उद्देश्य पथ समाधान और/या सामान्यीकरण में दोषों का दुरुपयोग करके सामान्य रूप से दुर्गम संसाधनों तक पहुँचना है। हम आमतौर पर .. सिंटैक्स का उपयोग करके कल्पित रूट से पीछे (पारगमन के रूप में भी जाना जाता है) यात्रा करके इस प्रकार के हमले का शोषण करते हैं।
सामान्यीकरण? क्या?
आम तौर पर, किसी फ़ाइल को खोजने के लिए किसी कोड को पथ प्रदान करते समय, एक निरपेक्ष पथ आवश्यक होता है। आइए इसे विहित पथ कहते हैं। जब इसके बजाय एक सापेक्ष पथ दिया जाता है, तो इसे एक विहित रूप में सामान्यीकृत किया जाना चाहिए ताकि OS लाइब्रेरीज़ जो उस पथ का उपयोग करती हैं, फिर प्रश्न में संसाधन ढूंढ सकें। बेशक यह एक अति सरलीकरण है, लेकिन मूल बात वही रहती है।
सामान्य तौर पर, हमारे लिए यह सामान्यीकरण करने के लिए प्लेटफ़ॉर्म लाइब्रेरीज़ मौजूद हैं, लेकिन C/C++ में हम आमतौर पर सब कुछ स्वयं करते हैं। जबकि यह कुछ लचीलापन प्रदान कर सकता है, यह आसानी से दोष भी पेश कर सकता है यदि हमारा कार्यान्वयन सही न हो।
URLs को सामान्यीकृत करना
एक HTTP सर्वर को सही फ़ाइल प्रस्तुत करने के लिए URL को फ़ाइल सिस्टम पर एक विहित पथ में अनुवाद करना होता है। जबकि दस्तावेज़ रूट से परे पारगमन से बचने के लिए निश्चित रूप से कुछ फ़िल्टर मौजूद हैं, कुछ उपयोग मामलों को आसानी से छोड़ा जा सकता है। इस मामले में, शोषण न केवल URL एन्कोडिंग (हम इस पर थोड़ी देर बाद आएंगे) बल्कि एलियास मॉड्यूल के पथ सामान्यीकरण में एक दोष (कथित तौर पर) का लाभ उठाता है।
URL एन्कोडिंग पर एक छोटी सी जानकारी
RFC 3986 धारा 2 में परिभाषित, URL एन्कोडिंग एक योजना है जिसका उपयोग URL के भीतर विशेष या आरक्षित वर्णों को एन्कोड करने के लिए किया जाता है। उदाहरण के लिए, URL में रिक्त स्थान को + वर्ण के रूप में एन्कोड किया जाता है (विशेष रूप से क्वेरी पैरामीटर में)। यदि हम एक वास्तविक प्लस को एन्कोड करना चाहते हैं, तो हमें इसे "प्रतिशत-एन्कोडिंग" के रूप में ज्ञात विधि का उपयोग करके एन्कोड करना होगा। इसमें केवल वर्ण के US-ASCII हेक्साडेसिमल कोड को % चिह्न से उपसर्ग करना शामिल है। हमारे उदाहरण में, + प्रतीक को %2B के रूप में एन्कोड किया जा सकता है।
किसी भी वर्ण को URL-एन्कोड किया जा सकता है, और पूरी तरह से URL-एन्कोडेड URLs कार्यात्मक रूप से गैर-एन्कोडेड संस्करण के समतुल्य होते हैं। RFC से: यदि दो URIs केवल प्रतिशत-एन्कोडेड ऑक्टेट में उपयोग किए गए हेक्साडेसिमल अंकों के मामले में भिन्न हैं, तो वे समतुल्य हैं।
तो Apache के साथ क्या हुआ?
Apache सर्वर में पथ सामान्यीकरण मॉड्यूल में एक हालिया बदलाव ने तब एक विशेष रूप से तैयार किए गए URL को फ़िल्टर को बायपास करने और दस्तावेज़ रूट से परे पारगमन करने की अनुमति दी, जिससे सिस्टम पर मनमानी फ़ाइल पढ़ने की अनुमति मिली, यदि कॉन्फ़िगरेशन इसकी अनुमति देता है। इसके अलावा, यदि CGI मॉड्यूल सक्षम था, तो मनमानी फ़ाइल निष्पादन भी संभव है!
नीचे दिए गए प्रश्नों के उत्तर दें
A) सर्वर पर संसाधित होने के लिए मनमानी रिमोट फ़ाइलों को शामिल करता है। B) सर्वर पर संसाधित होने के लिए मनमानी स्थानीय फ़ाइलों को शामिल करता है। C) सर्वर द्वारा मनमानी फ़ाइलों को उजागर करने की अनुमति देता है। D) उपरोक्त में से कोई नहीं।
मज़े के लिए Apache को हैक करना
तो अब जब थ्योरी खत्म हो गई है, तो आइए इस दोष का शोषण करने के लिए आगे बढ़ें। सबसे पहले, हमें Apache का एक कमजोर संस्करण चाहिए। शुक्र है कि इसके लिए हमारे पास डॉकर है :)```
user@machine$ docker pull httpd:2.4.49
2.4.49: Pulling from library/httpd
07aded7c29c6: Already exists
05bb40c8f148: Already exists
0827b74117da: Already exists
35a526fdcc7d: Pull complete
59fed288cd32: Pull complete
Digest: sha256:dcba0d12e2362fb0c50ec524ae8aa1cca4a4ba7216617a57e7bbca20767e79cc
Status: Downloaded newer image for httpd:2.4.49
docker.io/library/httpd:2.4.49
**कॉन्फ़िगरेशन**