
CVE-2021-41773 Apache path traversal और RCE शोषण का विस्तृत विवरण, एक TryHackMe प्रयोगशाला वातावरण से चरण-दर-चरण कमांड और मूल कारण विश्लेषण के साथ।
| आइटम | विवरण |
|---|
| भेद्यता | CVE-2021-41773 — Apache 2.4.49 पथ ट्रैवर्सल / RCE |
| लक्ष्य सेवा | पोर्ट 8080 पर Apache HTTP सर्वर |
| कमजोर संस्करण | Apache/2.4.49 (Unix) |
| मूल कारण | ap_normalize_path() में टूटा हुआ सामान्यीकरण क्रम |
| प्रभाव | मनमाना फ़ाइल पढ़ना → mod_cgi के माध्यम से दूरस्थ कोड निष्पादन |
| उपयोग किए गए उपकरण | curl |
Apache 2.4.49 ने ap_normalize_path() द्वारा URL प्रोसेस करने के तरीके को बदल दिया। Apache को फ़ाइल सिस्टम तक पहुँचने से पहले किसी भी अनुरोध पथ को अवरुद्ध करना चाहिए जिसमें ../ शामिल हो — लेकिन ट्रैवर्सल फ़िल्टर पूर्ण URL डिकोडिंग होने से पहले चलता है।
इसका मतलब है कि दोहरी-एन्कोडेड अनुक्रम .%2e/ का उपयोग करने वाला अनुरोध फ़िल्टर द्वारा ../ के रूप में पहचाना नहीं जाता है। हालाँकि, एक बार जब Apache पथ को OS को सौंपता है, तो .%2e/ को ../ में हल किया जाता है, और ट्रैवर्सल फ़िल्टर पहले ही बायपास किया जा चुका है।
अपने आप में यह वेब रूट के बाहर मनमाना फ़ाइल पढ़ने की अनुमति देता है। जब mod_cgi के साथ संयुक्त किया जाता है तो प्रभाव गंभीर हो जाता है: यदि ट्रैवर्सल पथ CGI-सक्षम निर्देशिका (जैसे /cgi-bin/) के अंदर /bin/sh जैसे निष्पादन योग्य तक हल होता है, तो Apache इसे CGI स्क्रिप्ट के रूप में निष्पादित करता है और HTTP POST बॉडी को उसके stdin में पास करता है — जिससे दूरस्थ कमांड निष्पादन होता है।
लक्ष्य के Server प्रतिक्रिया हेडर की पहचान इस प्रकार की गई:
Apache/2.4.49 (Unix)
यह संस्करण सीधे CVE-2021-41773 से प्रभावित है।
/cgi-bin/ की उपलब्धता जाँचें/cgi-bin/ का अनुरोध किया और 403 Forbidden प्रतिक्रिया (न कि 404) प्राप्त की, जो दर्शाता है कि निर्देशिका मौजूद है और mod_cgi संभवतः सक्षम है — इस CVE के माध्यम से RCE के लिए एक पूर्व शर्त।
एन्कोडेड ट्रैवर्सल अनुक्रम को ठीक वैसे ही भेजने के लिए curl का उपयोग --path-as-is फ़्लैग के साथ किया गया, बिना curl द्वारा क्लाइंट-साइड पहले इसे सामान्य किए:
curl -s --path-as-is "http://<TARGET_IP>:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh" \
--data 'echo Content-Type: text/plain; echo; cat /flag.txt'
--path-as-is की आवश्यकता क्यों है: डिफ़ॉल्ट रूप से, curl URL को सामान्य करता है और अनुरोध भेजे जाने से पहले ही .%2e/ अनुक्रमों को हटा देता है। --path-as-is curl को बताता है कि URL को ठीक वैसे ही भेजे जैसे लिखा गया है, एन्कोडेड ट्रैवर्सल को सुरक्षित रखता है ताकि यह सर्वर तक बरकरार पहुँचे।
पेलोड /cgi-bin/ से बाहर रूट फ़ाइल सिस्टम में चला गया, इंजेक्ट की गई POST बॉडी के माध्यम से /bin/sh को CGI स्क्रिप्ट के रूप में निष्पादित किया, और /flag.txt की सामग्री लौटा दी।
फ़्लैग प्रारूप की पुष्टि: THM{...}
(सार्वजनिक लेखों पर TryHackMe के दिशानिर्देशों के अनुसार फ़्लैग को संपादित किया गया।)
mod_cgi + पथ ट्रैवर्सल = RCE। अकेले फ़ाइल पढ़ना बुरा है; CGI-निष्पादन योग्य निर्देशिका के साथ संयुक्त, यह कमांड निष्पादन बन जाता है।--path-as-is (या समकक्ष रॉ-अनुरोध उपकरण) आवश्यक है।mod_cgi अक्षम करें।यह लेख एक प्रयोगशाला वातावरण (TryHackMe) का दस्तावेजीकरण करता है। किसी भी अनधिकृत सिस्टम तक पहुँच नहीं बनाई गई।