美文网首页
Struts2 远程代码执行漏洞(S2-046)漏洞复现

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

作者: 陌小皓 | 来源:发表于2017-03-28 22:37 被阅读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也可以利用成功,原因未知。

    相关文章

      网友评论

          本文标题:Struts2 远程代码执行漏洞(S2-046)漏洞复现

          本文链接:https://www.haomeiwen.com/subject/oopsottx.html