struts2 S2-052 复现及分析

前天晚上9点钟apache发布了S2-052的公告,10点多看到了,于是问了一下injector大佬,跟大佬一起研究了一波,感谢大佬带飞。
漏洞公告:http://struts.apache.org/docs/s2-052.html

分析

公告上说漏洞出现在struts2的rest插件,使用了XStream实例和XStreamHandler类未经过滤直接调用反序列化函数导致的RCE。

先定位到XStreamHandler类,找到了反序列化函数toObject,这个函数未做任何过滤直接调用了Xtream类的fromXML函数,可以将XML数据反序列化为Object:

根据调用关系,定位到ContentTypeInterceptor类的intercept函数,可以看到当后端收到请求时,会判断请求类型,如果是XML类型并且content-length大于0,则调用toObject方法将XML数据反序列化:

实验环境搭建

linux

安装java8:

add-apt-repository ppa:webupd8team/java
apt-get update
apt-get install oracle-java8-installer

下载tomcat并解压,拷贝到/opt/tomcat下:

wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.81/bin/apache-tomcat-7.0.81.tar.gz
cp -R apache-tomcat-7.0.81 /opt/tomcat

下载struts2存在漏洞的版本(这里是2.5.12)并解压:

wget http://archive.apache.org/dist/struts/2.5.12/struts-2.5.12-apps.zip
unzip struts-2.5.12-apps.zip

将struts2-showcase.war和strusts2-rest-showcase.war拷贝到/opt/tomcat/webapps/下:

cp struts-2.5.12/apps/struts2-showcase.war /opt/tomcat/webapps/
cp struts-2.5.12/apps/struts2-rest-showcase.war /opt/tomcat/webapps/

启动tomcat:

cd /opt/tomcat/bin
./startup.sh

访问http://your-ip:8080/struts2-rest-showcase 即可

复现

发送恶意XML数据,反弹shell: