前天晚上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: