Author:gyyyy@江南天安

S2-052复现过程

根据漏洞作者博客中的描述,问题出现在struts2-rest-plugin插件XStreamHandler处理器中的toObject()方法,其中未对传入的值进行任何限制,在使用XStream反序列化转换成对象时,导致任意代码执行漏洞。

0x00 搭建环境

直接部署struts-2.5.12-all中的struts2-rest-showcase项目即可,从下图可以看出,插件的默认配置支持xml扩展

运行看看,默认的xhtml扩展

转换成xml也成功,但是注意Content-Type需要改成application/xml类型

0x01 构造PoC

用marshalsec(https://github.com/mbechler/marshalsec)生成Payload,工具简单使用方式如下

java -cp marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]

看看工具作者提供的paper,针对XStream支持很多种Payload,找一个Struts2也支持的即可

本文选择的是ImageIO,对应的gadget_type可以通过查看marshalsec的源码得到

生成Payload

0x02 复现验证

源链接

Hacking more

...