Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
SC3010-Computer-Security — Struts2 और PowerShell का उपयोग करके CVE-2017-5638 OGNL इंजेक्शन भेद्यता को पुनः बनाना। | Kitploit
उपकरण/GitHubGitHub/aipeacs/sc3010-computer-security
स्थैतिक विश्लेषणभेद्यता विश्लेषणकोड विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षापेलोड डेवलपमेंटलैब और अभ्यासArchived
GitHubaipeacs/sc3010-computer-security

SC3010-Computer-Security

281 महीना पहलेअभी तक समीक्षित नहीं

Struts2 और PowerShell का उपयोग करके CVE-2017-5638 OGNL इंजेक्शन भेद्यता को पुनः बनाना।

रिपॉजिटरी देखें

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

SC3010-Computer-Security — CVE-2017-5638 आक्रमण पुनर्निर्माण

यह रिपॉज़िटरी SC3010 Computer Security पाठ्यक्रम परियोजना का हिस्सा है।
यह CVE-2017-5638 को पुनः बनाती है, जो Apache Struts 2 (संस्करण 2.3.5–2.3.31 और 2.5–2.5.10) में एक गंभीर Remote Code Execution भेद्यता है, जिसका प्रसिद्ध रूप से 2017 Equifax डेटा उल्लंघन में लगभग 147 मिलियन लोगों के व्यक्तिगत रिकॉर्ड चुराने के लिए शोषण किया गया था।

यह भेद्यता एक ही डिज़ाइन त्रुटि से उत्पन्न होती है: जब Apache Struts किसी multipart/form-data अपलोड अनुरोध को पार्स करने में विफल होता है, तो यह कच्चे Content-Type हेडर को — बिना सैनिटाइज़ किए — एक स्ट्रिंग में एम्बेड करके एक त्रुटि संदेश बनाता है, जिसे फिर OGNL एक्सप्रेशन इवैल्यूएटर के माध्यम से पास किया जाता है। इसलिए, जो हमलावर Content-Type हेडर के अंदर OGNL एक्सप्रेशन डालता है, वह Tomcat प्रक्रिया उपयोगकर्ता के रूप में सर्वर-साइड पर निष्पादित हो जाता है।

इस रिपॉज़िटरी में शामिल हैं:

  • एक कार्यशील भेद्य Java/Maven सर्वर (Struts2 2.3.28) जिसमें फ़ाइल-अपलोड एंडपॉइंट है।
  • एक PowerShell शोषण स्क्रिप्ट जो पूरी इंजेक्शन → RCE श्रृंखला का प्रदर्शन करती है।
  • Apache Struts 2.3.28 से एनोटेटेड संदर्भ स्रोत फ़ाइलें जो कॉल श्रृंखला के प्रत्येक चरण का मानचित्रण करती हैं।

पृष्ठभूमि ज्ञान

  • OGNL इंजेक्शन कैसे काम करता है?

रिपॉज़िटरी संरचना

SC3010-Computer-Security/
├── simulation/
│   ├── backend/          # Vulnerable Apache Struts2 2.3.28 server (Java/Maven)
│   └── attack-script/    # Exploit script for CVE-2017-5638
│       └── exploit_cve_2017_5638.ps1   # PowerShell (cross-platform)
├── struts-src-code/          # Apache Struts2 reference source + legal notices
│   ├── licenses/             # LICENSE, NOTICE, and component licenses
│   └── src/
│       ├── struts2-core/     # Request pipeline classes + vulnerable JakartaMultiPartRequest
│       ├── xwork2/           # ActionContext.java, OgnlUtil.java
│       └── ognl/             # OgnlContext.java
├── diagrams/                 # State-machine + sequence diagrams, annotated OGNL payload
└── _notes/                   # Background reading

एक्सप्लॉइट सिमुलेशन

  • सेटअप और उपयोग निर्देशों के लिए simulation/README.md देखें।

अटैक स्टेट मशीन आरेख

नीचे दिया गया आरेख Struts2 रिक्वेस्ट पाइपलाइन में प्रत्येक निर्णय शाखा को दर्शाता है। लाल पथ वह है जिसे हमलावर बाध्य करता है; धूसर → ... शाखाएँ सुरक्षित पथ हैं जो एक्सप्लॉइट के दौरान लागू नहीं होती हैं।

flowchart TD
    Start(["Attacker sends HTTP POST /upload.action<br/>Content-Type: &#37;&#123;OGNL_PAYLOAD&#125;.multipart/form-data"])
    Start --> PIPE

    PIPE["<b>Struts2 filter → wrap → parse pipeline</b><br/>doFilter() → PrepareOperations.wrapRequest()<br/>→ Dispatcher.wrapRequest() → new MultiPartRequestWrapper()"]
    PIPE --> D_CT{"Content-Type contains<br/>multipart/form-data?"}
    D_CT -- "No → normal request ..." --> OUT_NORM([non-upload path ...])
    D_CT -- "Yes (attacker appends<br/>.multipart/form-data to payload)" --> PARSE

    PARSE[/"<b>JakartaMultiPartRequest.parse()</b><br/>→ Commons FileUpload.parseRequest()"/]
    PARSE --> D_VALID{"FileUpload can parse<br/>Content-Type?"}
    D_VALID -- "Yes → normal file upload ..." --> OUT_OK([files extracted, action executes ...])
    D_VALID -- "No — malformed Content-Type<br/>throws InvalidContentTypeException<br/>(message = raw Content-Type string)" --> CATCH

    CATCH["parse() catch block<br/>calls buildErrorMessage(e, &#123;&#125;)"]
    CATCH --> FIND

    FIND[/"<b>buildErrorMessage()</b><br/>→ LocalizedTextUtil.findText(class, errorKey, locale, e.getMessage(), args)"/]
    FIND --> D_KEY{"Resource bundle has key<br/>struts.messages.upload.error.*?"}
    D_KEY -- "Yes → safe localised message ..." --> OUT_SAFE([error displayed safely ...])
    D_KEY -- "No — falls back to<br/>e.getMessage() as the default<br/>(attacker's raw Content-Type)" --> TRANSLATE

    TRANSLATE["TextParseUtil.translateVariables()<br/>scans string for &#37;&#123;...&#125; expressions"]
    TRANSLATE --> D_OGNL{"String contains<br/>&#37;&#123;...&#125; OGNL expression?"}
    D_OGNL -- "No → plain error string ..." --> OUT_PLAIN([safe error message ...])
    D_OGNL -- "Yes — evaluates OGNL<br/>inside attacker content" --> SANDBOX

    SANDBOX[/"<b>OGNL sandbox bypass</b><br/>#ognlUtil.getExcludedClasses().clear()<br/>#ognlUtil.getExcludedPackageNames().clear()"/]
    SANDBOX --> ACCESS

    ACCESS[/"<b>Unrestricted reflection</b><br/>#context.setMemberAccess(DEFAULT_MEMBER_ACCESS)"/]
    ACCESS --> RCE

    RCE[/"<b>RCE</b><br/>Runtime.getRuntime().exec(cmd)"/]
    RCE --> Done([Command executed as Tomcat process user])

    style Start fill:#d32f2f,color:#fff
    style Done fill:#d32f2f,color:#fff
    style OUT_NORM fill:#9e9e9e,color:#fff
    style OUT_OK fill:#9e9e9e,color:#fff
    style OUT_SAFE fill:#9e9e9e,color:#fff
    style OUT_PLAIN fill:#9e9e9e,color:#fff
    style SANDBOX fill:#b71c1c,color:#fff
    style ACCESS fill:#b71c1c,color:#fff
    style RCE fill:#b71c1c,color:#fff
    style CATCH fill:#e65100,color:#fff
    style TRANSLATE fill:#e65100,color:#fff

पूर्ण स्टेट-मशीन के शाखा स्पष्टीकरणों सहित, देखें diagrams/cve-2017-5638-state-machine.md।
सीक्वेंस डायग्राम दृश्य और एनोटेटेड OGNL पेलोड विश्लेषण के लिए, देखें diagrams/cve-2017-5638-attack-chain.md।


तृतीय-पक्ष सॉफ़्टवेयर सूचनाएँ

यह रिपॉज़िटरी शैक्षणिक सुरक्षा अनुसंधान उद्देश्यों के लिए Apache Struts 2.3.28 स्रोत कोड के कुछ भागों को पुनः प्रस्तुत करती है।

Apache Struts, Copyright © 2000–2016 The Apache Software Foundation है।
Apache License, Version 2.0 के अंतर्गत लाइसेंस प्राप्त।
लाइसेंस की एक प्रति struts-src-code/licenses/LICENSE.txt पर उपलब्ध है।
Apache License द्वारा आवश्यक पूर्ण एट्रिब्यूशन सूचना struts-src-code/licenses/NOTICE.txt में है।

Apache Struts 2 अतिरिक्त तृतीय-पक्ष घटकों को बंडल करता है, जिनमें से प्रत्येक अपने स्वयं के लाइसेंस द्वारा शासित है:

घटकलाइसेंस फ़ाइल
OGNL (Object-Graph Navigation Library)struts-src-code/licenses/OGNL-LICENSE.txt
XWorkstruts-src-code/licenses/XWORK-LICENSE.txt
FreeMarkerstruts-src-code/licenses/FREEMARKER-LICENSE.txt

स्रोत संदर्भ:

  • apache/struts @ STRUTS_2_3_28 — Struts2 कोर और XWork
  • jkuhnert/ognl — OGNL 3.0.x
  • Gemini — सामान्य OGNL भाषाओं पर परामर्श।
टूल डाउनलोड करें