#漏洞分析
##漏洞背景
Apache的Struts2是一个优雅的,可扩展的开源MVC框架,主要用于创建企业级的JavaWeb应用程序。在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下

![](https://shung.oss-cn-beijing.aliyuncs.com/blog/20210309160429.png)

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

![](https://shung.oss-cn-beijing.aliyuncs.com/blog/20210309160440.png)

找到itegration中的struts1 intergeration

![](https://shung.oss-cn-beijing.aliyuncs.com/blog/20210309160449.png)

打开后演示如下:

![](https://shung.oss-cn-beijing.aliyuncs.com/blog/20210309160459.png)

随便填完submit然后抓包

![](https://shung.oss-cn-beijing.aliyuncs.com/blog/20210309160512.png)

修改 content-type,poc还是利用的OGNL,跟之前的s2-045和s2-046差不多

![](https://shung.oss-cn-beijing.aliyuncs.com/blog/20210309160522.png)

可以看到成功执行了whoami命令获得了system权限

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

##漏洞触发点
漏洞出在`org.apache.struts2.s1.Struts1Action`类的execute方法中,,

![](https://shung.oss-cn-beijing.aliyuncs.com/blog/20210309160534.png)

首先这里`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表达式执行任意命令。

#修复建议
##影响版本
`Apache Struts 2.3.x`系列中启用了`struts2-struts1-plugin`插件的版本

##漏洞检测 (检测是否存在漏洞的方法)
检查Struts2框架的版本号

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

##手工修复
不启用struts2-struts1-plugin插件

建议升级到最新版本2.5.10.1

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

`messages.add("msg",new ActionMessage("struts1.gangsterAdded", gform.getName()));`

一定不要使用如下的方式

`messages.add("msg", newActionMessage("Gangster " + gform.getName() + " wasadded"));`

最后修改:2021 年 03 月 09 日
如果觉得我的文章对你有用,请随意赞赏