S2-052复现过程(附POC利用)

作者: secflag 分类: 渗透测试 发布时间: 2017-09-11 07:51
漏洞编号:CVE-2017-9805(S2-052)
影响版本:Struts 2.5 – Struts 2.5.12
漏洞概述:问题出现在struts2-rest-plugin插件XStreamHandler处理器中的toObject()方法,其中未对传入的值进行任何限制,在使用XStream反序列化转换成对象时,导致任意代码执行漏洞。
0x01 搭建环境

直接部署struts-2.5.12-all中的struts2-rest-showcase项目即可,从下图可以看出,插件的默认配置支持xml扩展。
运行看看,默认的xhtml扩展
转换成xml也成功,但是注意Content-Type需要改成application/xml类型。
0x02 构造PoC

本帖隐藏的内容

用marshalsec(https://github.com/mbechler/marshalsec)生成Payload,工具简单使用方式如下:
java -cpmarshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t][<gadget_type> [<arguments…>]]
看看工具作者提供的paper,针对XStream支持很多种Payload,找一个Struts2也支持的即可。
本文选择的是ImageIO,对应的gadget_type可以通过查看marshalsec的源码得到:
生成Payload
0x03 复现验证
0x04 加固建议
  • 升级Apache struts 2.5.13版本
  • 在不使用时删除StrutsREST插件,或仅限于服务器普通页面和JSONs

    Struts Struts

<constantname=”struts.action.extension”value=”xhtml,,json” />