S2-052
复现学习。
前言
今年Struts
爆出了很多的严重漏洞,作为一个安全研究员,总是等到别人的POC
和漏洞分析出来后,才能去复现学习。心中好疼,决定自己学习一下之前的漏洞,如何进行分析其中的漏洞原理和POC
的编写,然后对新出来的漏洞进行学习。
S2-052 环境搭建
zip、tar.gz和Windows Service Installer三种安装包,其中:
Zip是Windows下的免安装版本,只需要解压后做一定的手动配置就可以正常的使用;
tar.gz是Linux下的安装包;
Windows Service Installer很明显就是Windows下的Install程序,双击后就可以自动安装了
高级系统设置–>环境变量–>系统变量–>添加 变量名:TOMCAT_HOME
变量值:你的TOMCAT所在目录
从官网下载Struts下载所有源码包,找到struts2-rest-showcase.war
直接部署到tomcat
的webapps
目录下。
访问环境
漏洞分析
官方描述为:
The REST Plugin is using a XStreamHandler with an instance of XStream for deserialization without any type filtering and this can lead to Remote Code Execution when deserializing XML payloads.
其描述信息为,REST
插件使用到XStreamHandler
处理xml
数据,由于未对xml
数据做任何过滤,在进行发序列xml
数据转换为Object
时导致RCE
。
查看rest
插件的相关配置。
\plugins\rest\src\main\resources\struts-plugin.xml
从这个文件中可以看到XStreamHanler
就是Content-Type:xml
的默认处理语句,而且看到xml
是默认支持格式,也就是说存在rest
插件就会存在反序列化漏洞。
看官方的补丁。
https://github.com/apache/struts/commit/19494718865f2fb7da5ea363de3822f87fbda264
在官方的修复方案中,主要就是将xml中的数据白名单化,把Collection和Map,一些基础类,时间类放在白名单中,这样就能阻止XStream反序列化的过程中带入一些有害类。
在9月6号的STRUTS_2_3_34
版本中的struts-STRUTS_2_3_34\plugins\rest\src\main\java\org\apache\struts2\rest\handler
的org.apache.struts2.rest.handler
包下多了几个类文件。
XStreamHandler类修改了createXStream方法,同时增加了几个方法,作用是拒绝不安全的类执行。
由补丁发现REST插件将XStream处理的数据进行了处理,在调用 “xstream.fromXML(in, target);” 反序列化之前对其进行了检查。
复现
点击编辑,进入修改页面,点击”提交”抓包,然后修改Content-Type: application/xml
格式,post数据替换为poc中的data即可弹出计算器了。
#####