Struts2 远程代码执行漏洞(S2-046)漏洞复现

2017-03-28  本文已影响0人  陌小皓
漏洞复现

继 3 月 7 日爆发的 S2-045 远程命令执行漏洞风波之后,今日 Struts2 官方发布另一个高危漏洞 S2-046,CVE 编号依然是 CVE-2017-5638,据官方披露,最新的漏洞与 S2-045 类似,只是攻击字段发生变化。修复方案依然与 S2-045 相同,升级至 2.3.32 或者 2.5.10.1 版本即可防御针对这两个漏洞攻击。

S2-046

Struts2 是一个基于 MVC 设计模式的 Web 应用框架,它本质上相当于一个 servlet,在 MVC 设计模式中,Struts2 作为控制器 (Controller) 来建立模型与视图的数据交互。Struts2 的使用范围及其广泛,国内外均有大量厂商使用该框架。


漏洞描述:

据漏洞提交者纰漏,S2-046 的利用条件有以下三个方面:

1、系统必须使用 Jakarta 插件,检查 Struts2 配置文件中是否有以下配置:<constant name =“struts.multipart.parser”value =“jakarta-stream”/>
2、上传文件的大小(由 Content-LSength 头指定)大于 Struts2 允许的最大大小(2GB)
3、文件名内容构造恶意的 OGNL 内容。
如果满足以上要求,Struts2 受影响版本将创建一个包含攻击者控制的异常文件名,使用 OGNL 值堆栈来定位错误消息,OGNL 值堆栈将插入任何 OGNL 变量($ {}或%{})作为 OGNL 表达式,然后实现任意代码执行。

目前网络上已披露出针对 S2-046 的 POC

https://github.com/pwntester/S2-046-PoC

漏洞复现:

我们在本地搭建环境进行测试:

查看 Struts2 的配置文件,发现存在
<constant name =“struts.multipart.parser”value =“jakarta-stream”/>
Struts2 的配置文件
下面进行网站上传测试,构造数据包如下,设定 Content-LSength 值大于 2GB,并构造恶意文件名,如下图所示:
构造数据包

通过响应数据包可看到恶意代码成功执行,攻击成功,如下图所示:

代码成功执行
友情提示:

1.请升级到 Apache Struts 2.3.32 或 2.5.10.1 版本,下载地址:
http://archive.apache.org/dist/struts/2.3.32/
http://archive.apache.org/dist/struts/2.5.10.1/
2.测试的时候设定 Content-LSength 值不大于 2GB也可以利用成功,原因未知。

上一篇下一篇

猜你喜欢

热点阅读