基于Struts(S2-048)漏洞的复现与分析

2019-09-10 07:22缪卓洁罗海波邹炜成洪家豪
科学导报·学术 2019年49期
关键词:调用表达式插件

缪卓洁 罗海波 邹炜成 洪家豪

摘  要:文章介绍了 Struts 2.3.x 系列中 Struts2 -048 号漏洞的背景、漏洞影响、对于漏洞的分析和漏洞复现的操作示例。为了了解在漏洞暴露而且被利用时对于企业利益的严重危害,本文通过在 Struts 2.3.x 系列其中的 Struts 2.3.32 的 showcase 应用中演示对 Struts2 整合 Struts1 的插件中存在一处任意代码执行漏洞的攻击行为并且从 Struts(Struts2-048)远程命令执行漏洞还原的过程中,分析出漏洞产生原因是由于启用了插件 struts2-struts1-plugin 而且在其插件内部(struts2-struts1-plugin-2.3.x.jar)中的代码存在不受信任的输入并传入到 ActionMessage 类中导致恶意命令执行的过程。在漏洞问题下罗列出现有的解决方案,并简述其补救措施和其他相关技术概念。从而表明了该漏洞的危害性和需尽快修复的紧急程度。

关键词:Struts2漏洞;Struts2;S2-048;OGNL;Webwork

1  原理技术概要

1.1 Webwork

它是Struts系列的前身,来源于一个开源组织 opensymphony,且是从Xwork项目的基础上发展而来,Webwork简洁且功能强大,完全从web层脱离,它提供了包括前端拦截、表单属性验证、类型转换以及强大的表达式语言OGNL等核心功能。Webwork在处理http请求和响应时使用Servlet Dispatcher将http请求转化为业务层、会话层和应用层范围的映射,请求参数映射为Webwork2支持的多视图表示,视图部分可以使用JSP、Velocity、Free Marker、Jasper Repots、XML等。

1.2 Struts2

Struts2架构继承了Webwork的架构流程,而并未沿用Struts1的设计核心,但从处理流程上看,Struts2还是以控制器为重点,包括核心控制器和业务逻辑控制器。

处理流程简述为:客户端提交一个 HttpServletRequest 请求,接着请求被提交到一系列的过滤器,然后经过 FilterDispatcher 时会询问 ActionMapper 是否需要调用某个Action来处理这个请求,如果 ActionMapper 决定需要调用某个 Action,FilterDispatcher 则把请求的处理交给 ActionProxy。

ActionProxy 通过Configuration Manager向文件struts.xml查询框架的配置文件,找到需要调用的Action类。ActionProxy 创建一个 ActionInvocation 实例,同时 ActionInvocation 通过代理模式调用Action。但在调用之前,ActionInvocation 会根据配置加载 Action 相关的所有Interceptor。

Action执行完毕后,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。

1.3 OGNL

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样可以更好的取得数据。

Webwork2和现在的Struts2.x系列中使用OGNL取代原来的EL来做界面数据绑定,所谓界面数据绑定,也就是把界面元素(例如一个textfield,hidden)和对象层某个类的某个属性绑定在一起,修改和显示自动同步。

2  漏洞复现和分析

2.1 复现环境准备和工具介绍

步骤1:准备Struts 2.3.x 的项目文件;步骤2:部署showcase和MAVEN并启动项目;步骤3:准备exp漏洞利用shell脚本或者poc,下载地址为:。步骤4:在虚拟机验证漏洞。

2.2 漏洞复现和分析

(1)漏洞分析

漏洞产生的原因是在struts2-struts1-plugin包中Struts1Action.java中execute函数调用了getText函数,这个函数会执行OGNL表达式,更加增大该漏洞级别的是getText的输入内容还是攻击者可控的,即可以构造后台服务器的执行指令通过该方法去执行,相当于直接使用后台服务器账号直接登入执行命令操作。

(2)漏洞复现

开启showcase服务并启动虚拟机,发送exp的shell脚本到虚拟机中,打开命令行先ping一下与部署应用的主机网络,无异常则执行exp脚本。依次输入 3,http://192.168.122.1:8080/integration/saveGangster.action,ipconfig 这三个参数。结果如图1:

第一个参数3代表选择验证第三个漏洞 Struts2-048;第二参数是一个链接,代表着你想验证的showcase应用的访问地址;第三个参数为注入的执行命令,可以写如ipconfig,netstat -ano等windows命令。执行脚本后发现部署着showcase应用的服务器的IP,网关等信息全都显示出来。是一个十分危急的漏洞,需要尽快修复。

3 结论

本文在简单介绍Struts2框架的基本概念和知識之后,基于Struts2框架存在的各类缺陷和漏洞,以及各类web开发框架被广泛应用的事实,对应用程序开发使用Struts2开发框架的安全升级进行总结和给出解决方案,并指出在使用这个框架时,应对其进行更多的安全考量和评估,其中重点阐述了Struts2-048漏洞,并通过源码详细分析了它的调用过程和简单阐述了这个漏洞的利用方式,同时给出了针对存在该漏洞的某站点的实际利用结果示例。

参考文献

[1]  廖文军,朱晓乾,万开. 浅析Struts2两个安全漏洞的原理、利用与防范[C]. 电子测试:上海通用识别技术研究所,2014,61 - 63.

[2]  天融信科技. Struts(S2-048)远程命令执行漏洞分析[J]. 搜狐科技,2017-07-08.

[3]  Struts2漏洞[J]. 中国信息安全,2013-08-15.

[4]  360:Struts2漏洞拉响网站安全红色警报[J]. 计算机与网络. 2012-07-26

猜你喜欢
调用表达式插件
用好插件浏览器标签页管理更轻松
灵活选用二次函数表达式
请个浏览器插件全能管家
基于Android Broadcast的短信安全监听系统的设计和实现
基于jQUerY的自定义插件开发
寻找勾股数组的历程
利用RFC技术实现SAP系统接口通信
议C语言中循环语句
美国社交网站的周末大战
怎样确定一次函数表达式