Struts2高危漏洞S2-048动态分析

没穿底裤 2020年1月1日00:01:40评论450 views字数 1447阅读4分49秒阅读模式
摘要

综述
2017年7月7日,Apache Struts发布最新的安全公告,Apache Structs2的strus1插件存在远程代码执行的高危漏洞,漏洞编号为CVE-2017-9791(S2-048)。攻击者可以构造恶意的字段值通过Struts2的struts2-struts1-plugin的插件,远程执行代码

综述
2017年7月7日,Apache Struts发布最新的安全公告,Apache Structs2的strus1插件存在远程代码执行的高危漏洞,漏洞编号为CVE-2017-9791(S2-048)。攻击者可以构造恶意的字段值通过Struts2的struts2-struts1-plugin的插件,远程执行代码

漏洞分析
(1) 漏洞简介
Apache Struts2.3.x系列版本中struts2-struts1-plugin存在远程代码执行漏洞,进而导致任意代码执行。
(2) 漏洞分析
官方的漏洞描述如下:

从官方的漏洞描述我们可以知道,这个漏洞本质上是在struts2-struts1-plugin这个jar包上。这个库是用将struts1的action封装成struts2的action以便在strut2上使用。本质原因还是在struts2-struts1-plugin包中Struts1Action.java中execute函数调用了getText函数,这个函数会执行ognl表达式,更可恶的是getText的输入内容还是攻击者可控的。以下分析基于struts2的官方示例struts2-showcase war包。首先Struts1Action的execute方法代码如下,从红框中信息可以看出其实质是调用SaveGangsterAction.execute方法,然后再调用getText(msg.getKey()….)。

Struts2高危漏洞S2-048动态分析
在struts2-showcase的integration模块下有SaveGangsterAction.java的execute方法的实现。具体如下:
Struts2高危漏洞S2-048动态分析
在这个方法中就带入有毒参数gforn.getName()放到了messages结构中,而gform.getName()的值是从客户端获取的。Gangsterform.getName()的实现如下:
Struts2高危漏洞S2-048动态分析

我们这里传入了${1+1}。有毒参数已经带入,就差ognl表达式。继续回到Struts1Action.java的execute方法下半部分,这里有getText()的入口,能清晰看到参数已经被污染,具体如下图:
Struts2高危漏洞S2-048动态分析

下面进入getText的实现函数:这个调用栈比较深,首先我们给出栈图:
Struts2高危漏洞S2-048动态分析

从Struts1action.execute函数开始,到ActionSupport的getText()方法,方法如下:
Struts2高危漏洞S2-048动态分析
接着进入TextProviderSuppport.getText,接着调用其另一个重载类方法getText(),示例如下:
Struts2高危漏洞S2-048动态分析
如图所示,进入LocalizeTextUtil.findText,继续分析其实现:从名字上也能看出其是根据用户的配置做一些本地化的操作。代码如下:
Struts2高危漏洞S2-048动态分析
熟悉struts2的童鞋跟到这一步就能发现这就是一个很典型的ognl表达式入口,先是得到一个valueStack,再继续递归得到ognl表达式的值。这里不再描述,详情可参考官方链接:https://struts.apache.org/maven/struts2-core/apidocs/com/opensymphony/xwork2/util/LocalizedTextUtil.html

给一个事例
Struts2高危漏洞S2-048动态分析
输入框内输入 ${1+1}
Struts2高危漏洞S2-048动态分析
Struts2高危漏洞S2-048动态分析

PS:毕竟只是针对STRUTS的插件而已.google了几个.发现好像都是一样的
Struts2高危漏洞S2-048动态分析

from:http://xxlegend.com/2017/07/08/S2-048%20%E5%8A%A8%E6%80%81%E5%88%86%E6%9E%90/

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
没穿底裤
  • 本文由 发表于 2020年1月1日00:01:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Struts2高危漏洞S2-048动态分析http://cn-sec.com/archives/75002.html

发表评论

匿名网友 填写信息