Skip to content

Latest commit

 

History

History
58 lines (35 loc) · 2.1 KB

apache-struts2-s2-052-rce.md

File metadata and controls

58 lines (35 loc) · 2.1 KB

Struts2远程代码执行(S2-052)漏洞分析

Category Research Language Vuln Component Vuln Type Vuln ID Tag Tag Timestamp Progress

漏洞编号

CVE-2017-9805

漏洞介绍

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

环境搭建

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

01.png

运行看看,默认的是XHTML扩展。

02.png

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

03.png

构造PoC

marshalsec工具生成Payload,工具简单使用方式如下:

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

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

04.png

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

05.png

生成Payload。

06.png

复现验证

07.png