Struts2 S2 – 032远程代码执行漏洞分析报告 .

Struts2 S2 – 032远程代码执行漏洞分析报告

一、漏洞基本信息

CVE编号:CVE-2016-3081
漏洞名称:Struts2 S2 – 032远程代码执行
漏洞发布日期:2016.4.15
受影响的软件及系统:Struts2版本:Struts2 2.0.0 -2.3.28( 2.2.3(2.3.20.2和2.3.42.2不受影响)

漏洞概述:Apache Struts 2是世界上最流行的Java Web服务器框架之一。然而近日国内安全企业安恒信息的安全研究员Nike.zheng在Struts 2上发现存在高危安全漏洞(CVE-2016-3081,S02-32),黑客可以利用漏洞直接执行任意代码,绕过文件限制,上传文件,执行远程命令,控制服务器,直接盗取用户的所有资料,该漏洞广泛影响所有struts版本。

二、漏洞原理分析

      Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与 ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

1 前提:开启动态方法调用。

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

    假如动态方法调用已经开启,然后我们要调用对应的login方法的话 我们可以通过http://localhost:8080/struts241/index!login.action来执行动态的方法调用。这种动态方法调用的时候method中的特殊字符都会被替换成空,但是可以通过http://localhost:8080/struts241/index.action?method:login来绕过无法传入特殊字符的限制

     接收到的参数会经过处理存入到ActionMappingmethod属性中。DefaultActionProxyFactoryActionMapppingmethod属性设置到ActionProxy中的method属性(虽然做了escapeEcmaScriptescapeHtml4过滤,但是我们可以通过变量传递方式绕过,具体可以参考poc)。如下图

     而DefaultActionInvocation.java中会把ActionProxy中的method属性取出来放入到ognlUtil.getValue(methodName + (), getStack().getContext(), action);方法中执行ognl表达式,如下图

     沙盒绕过,通过ognl表达式静态调用获取ognl.OgnlContextDEFAULT_MEMBER_ACCESS属性,并将获取的结果覆盖_memberAccess属性,这样就可以绕过SecurityMemberAccess的限制。

三、漏洞检测方法

1漏洞检测地址1  http://0day.websaas.cn/

2漏洞检测地址2https://www.seebug.org/monster/

3、漏洞检测地址3:http://0day.thorsrc.com/

3、使用工具直接检测1https://github.com/sowish/S2-032

4、使用工具直接检测2Struts032漏洞利用工具.zip

5、使用工具直接检测3:https://github.com/brianwrf/hackUtils/

6、使用工具批量检测:https://github.com/sowish/S2-032/

四、漏洞修复方案

1禁用动态方法调用:

修改 Struts2 的配置文件,将“struts.enable.DynamicMethodInvocation” 设置为false,如

<constant name=struts.enable.DynamicMethodInvocationvalue=false/>

2如条件允许前提下,可升级Struts版本至Struts 2.3.20.2Struts 2.3.24.2或者Struts 2.3.28.1来修复漏洞,新版本下载地址:https://struts.apache.org/download.cgi#struts2328

五、漏洞修复结果验证

1漏洞检测地址1  http://0day.websaas.cn/

2漏洞检测地址2https://www.seebug.org/monster/

3、使用工具直接检查1https://github.com/sowish/S2-032

4、使用工具直接检查2Struts032漏洞利用工具.zip

你可能感兴趣的:(Struts2 S2 – 032远程代码执行漏洞分析报告 .)