Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
strutt-cve-2014-0114 — Apache Struts 1 क्लास पैरामीटर हेरफेर (CVE-2014-0114) के लिए तकनीकी विश्लेषण और प्रूफ-ऑफ-कॉन्सेप्ट, जो Tomcat पर रिमोट कोड निष्पादन और JBoss/Wildfly पर डिनायल-ऑफ-सर्विस का प्रदर्शन करता है। | Kitploit
उपकरण/GitHubGitHub/aenlr/strutt-cve-2014-0114
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगपेपर और शोधलर्निंग और शिक्षा
GitHubaenlr/strutt-cve-2014-0114

strutt-cve-2014-0114

Apache Struts 1 क्लास पैरामीटर हेरफेर (CVE-2014-0114) के लिए तकनीकी विश्लेषण और प्रूफ-ऑफ-कॉन्सेप्ट, जो Tomcat पर रिमोट कोड निष्पादन और JBoss/Wildfly पर डिनायल-ऑफ-सर्विस का प्रदर्शन करता है।

रिपॉजिटरी देखें
2117 साल पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

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

CVE-2014-0114 - Struts 1 में भेद्यता

POST या GET अनुरोध के पैरामीटरों को उन गुणों (properties) के रूप में संभाला जाता है जिन्हें फ़ॉर्म को आधार मानकर सेट किया जाना है। पैरामीटर किसी नेस्टेड ऑब्जेक्ट का पथ हो सकते हैं।

Apache Struts 1.x को Form Beans पर getClass() कॉल करने हेतु हेरफेर किया जा सकता है। उदाहरण के लिए, फ़ॉर्म के classloader पर सीधे विशेषताओं (attributes) में हेरफेर किया जा सकता है: https://example.com/?class.classLoader.defaultAssertionStatus=true।

सतह के नीचे, Apache Struts 1.x commons-beanutils का उपयोग करता है, जो संस्करण 1.8 (और पहले) में class विशेषता को बाहर नहीं करता है।

Struts 2 में भी इसी तरह की कमियाँ रही हैं, लेकिन यहाँ हम Struts 1.x पर ध्यान केंद्रित करते हैं, जिसके लिए फ्रेमवर्क का कोई पैच उपलब्ध नहीं है और जिसका अंतिम संस्करण 2008 में जारी किया गया था (2013 से EOL)।

Tomcat - रिमोट कोड एक्ज़ीक्यूशन (RCE)

यदि एप्लिकेशन Tomcat (Catalina) में चलता है, तो लॉगिंग में इस तरह हेरफेर किया जा सकता है कि हमलावर एक JSP फ़ाइल बना सके, जो सर्वर से अनुरोध किए जाने पर निष्पादित हो जाती है। JSP फ़ाइल Java प्रक्रिया चलाने वाले उपयोगकर्ता के रूप में मनमाना Java कोड निष्पादित कर सकती है।

विवरण के लिए Julián Vilas का प्रदर्शन देखें।

JBoss/Wildfly - डिनायल ऑफ़ सर्विस (DOS)

(JBoss EAP 7.1 के साथ परीक्षण किया गया)

DOS हमले को अंजाम देने की एक सरल विधि है, जो सबसे बुरी स्थिति में JBoss को पूरी तरह से अनुपलब्ध कर देती है और पुनः आरंभ (restart) की आवश्यकता होती है। सबसे अच्छी स्थिति में, JBoss धीमी प्रतिक्रिया देता है।

निष्पादन

class विशेषता के माध्यम से Class#protectionDomain.codeSource.location तक पहुँचा जा सकता है। JBoss में यह vfs प्रोटोकॉल वाला एक URL ऑब्जेक्ट है।

vfs:// प्रकार के URL के लिए, JBoss ने एक URLStreamHandler पंजीकृत किया है जो URL#getContent कॉल होने पर org.jboss.vfs.VirtualFile प्रकार का ऑब्जेक्ट लौटाता है।

class.protectionDomain.codeSource.location.content.pathName निर्देशिका <SÖKGVÄG>/<applikation>/WEB-INF/classes की ओर इशारा करता है।

parent के माध्यम से एक स्तर ऊपर की निर्देशिका का ऑब्जेक्ट प्राप्त किया जा सकता है:

class.protectionDomain.codeSource.location.content.parent.pathName -> <SÖKVÄG>/<applikation>/WEB-INF

प्रश्न: फ़ाइल सिस्टम के रूट तक पहुँचने के लिए कितने parent संदर्भों की आवश्यकता होती है?

प्रश्न: फ़ाइल सिस्टम की रूट निर्देशिका के लिए class.protectionDomain.codeSource.location.content.parent.parent.[...].childrenRecursively[0].pathName का अनुरोध करने पर क्या होता है?

उत्तर: JBoss फ़ाइल सिस्टम की सभी फ़ाइलों से गुज़रेगा और प्रत्येक फ़ाइल एवं निर्देशिका के लिए एक org.jboss.vfs.VirtualFile आवंटित करेगा।

अनुवर्ती प्रश्न: यदि दो अनुरोध एक साथ फ़ाइल सिस्टम की सभी फ़ाइलों का अनुरोध करें तो क्या होता है? तीन अनुरोध? पाँच? दस? सौ?

...

उत्तर:

पर्याप्त देर तक प्रतीक्षा करने पर एक त्रुटि लॉग होती है

root@kitploit:~
10:09:59,381 ERROR [io.undertow.request] (default task-13) UT005023: Exception handling request to /strutt/Login.do: javax.servlet.ServletException: javax.servlet.ServletException: BeanUtils.populate
	at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
	at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
	at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:326)
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:812)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: javax.servlet.ServletException: BeanUtils.populate
	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:475)
	at org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
	at org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
	at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	... 42 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2155)
	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:504)
	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:408)
	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:760)
	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
	at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:903)
	at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:830)
	at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:433)
	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:473)
	... 49 more
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
	at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:68)
	at java.lang.StringBuilder.<init>(StringBuilder.java:101)
	at org.jboss.vfs.VirtualFile.getPathName(VirtualFile.java:139)
	at org.jboss.vfs.VirtualFile.getPathName(VirtualFile.java:99)
	at org.jboss.vfs.spi.RootFileSystem.getFile(RootFileSystem.java:65)
	at org.jboss.vfs.spi.RootFileSystem.isDirectory(RootFileSystem.java:107)
	at org.jboss.vfs.VirtualFile.isDirectory(VirtualFile.java:291)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:520)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)

10:09:59,420 ERROR [stderr] (Periodic Recovery) Exception in thread "Periodic Recovery" java.lang.OutOfMemoryError: GC overhead limit exceeded

कुछ ही अनुरोधों के लिए Garbage Collection को संभालने में CPU पूरी क्षमता से चलता है और Java प्रक्रिया अन्य कुछ अधिक नहीं कर पाती।

यह कुछ हद तक एप्लिकेशन पर भी निर्भर करता है। यदि कोई कोड पथ ट्रिगर किया जा सकता है जो लॉक (lock) लेता है, तो एप्लिकेशन/सिस्टम हैंग हो सकता है।

संदर्भ

CVE

  • https://nvd.nist.gov/vuln/detail/CVE-2014-0114 (Struts 1)
  • https://nvd.nist.gov/vuln/detail/CVE-2014-0112 (Struts 2)
  • https://nvd.nist.gov/vuln/detail/CVE-2014-0094 (Struts 2)

Julián Vilas की प्रस्तुति

https://www.youtube.com/watch?v=fpsrusRpP0E

https://www.slideshare.net/testpurposes/deep-inside-the-java-framework-apache-struts

Metasploit

https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/http/struts_code_exec_classloader.rb

टूल डाउनलोड करें