S2-048 远程代码执行漏洞检测与利用

漏洞背景

Apache的Struts2是一个优雅的,可扩展的开源MVC框架,主要用于创建企业级的Java Web应用程序。在Struts 2.3.X系列的Showcase插件中演示Struts2整合Struts 1的插件中存在一处任意代码执行漏洞。当你的Web应用使用了 Struts 2 Struts 1插件, 则可能导致Struts2执行由外部输入的恶意攻击代码。

漏洞影响

Apache Struts 2.3.x系列中启用了struts2-struts1-plugin插件的版本

漏洞复现

这里我们测试的是2.3.24版本中的showcase演示演示示例

下载struts-2.3.24-apps.zip,解压当中的showcase 的war包到tomcat下

漏洞示例触发位置在SaveGangsterAction.java中

找到itegration中的struts1 intergeration

打开后演示如下:

随便填完submit然后抓包

修改 name,还是利用的OGNL,可以看到获取了system权限,成功执行了OGNL表达式

漏洞条件

漏洞是在struts2中开启了struts1的插件,org.apache.struts2.s1.Struts1Action类是把封装了struts1的Action 以便兼容在struts2中。

漏洞触发点

漏洞出在org.apache.struts2.s1.Struts1Action类的execute方法中,

首先这里ActionForward forward = action.execute(mapping, actionForm, request, response);会把表单的请求处理回显给客户端

然后addActionMessage(getText(msg.getKey(), Arrays.asList(msg.getValues())));这里又调用了getText方法 会把action messages传递给com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage ,

最后在其中又调用了com.opensymphony.xwork2.util.TextParseUtil.translateVariables,它用来调用OGNL 表达式用处理字符串表达式。漏洞利用OGNL表达式执行任意命令。

漏洞检测 (检测是否存在漏洞的方法)

检查Struts2框架的版本号

补丁地址

暂无补丁,请升级到最新版Struts2

手工修复

不启用struts2-struts1-plugin插件

建议升级到最新版本2.5.10.1

开发者通过使用resource keys替代将原始消息直接传递给ActionMessage的方式。 如下所示

messages.add(“msg”, new ActionMessage(“struts1.gangsterAdded”, gform.getName()));

一定不要使用如下的方式

messages.add(“msg”, new ActionMessage(“Gangster ” + gform.getName() + ” was added”));

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值