Struts2和Webwork远程命令执行漏洞分析(2) |
| 发布时间: 2012/7/7 14:25:43 |
|
第二次修补
直到某天,可能是在版本xwork2.1.2时,官方偷偷修改安全配置,默认让SecurityMemberAccess(管理ognl权限的类)的allowStaticMethodAccess为false,这导致静态方法不能执行,并且不知什么原因,偷偷修改正则,也同时放开了对参数名称中空格字符的限制。 漏洞被爆 这次出了远程代码执行(Struts2/XWork < 2.2.0 Remote Command Execution Vulnerability),漏洞的发现者就是看到了\u0023的限制其实无效,研究出了绕过默认安全配置的方法,并且利用ognl允许静态方法执行,达到了远程代码执行的效果。 原理简介: 1、 用户提交了\u0023被转义为\\u0023,通过了对参数名称的验证后,最终ognl处理之前,又变成了\u0023,也就是#,符合了ognl语法。 2、 通过Ognl语句执行,可以在struts2和webwork运行起来时,把ognl上下文中的一些默认配置覆盖掉,漏洞发现者给出了不少可以覆盖的数值。 3、 虽然默认配置是禁止静态方法执行的,但是xwork的配置,其实是可以覆盖的,一旦覆盖掉“用于禁止静态方法执行”的value,当然又可以执行了。 4、 Runtime.getRuntime().exec()这段,其实可以当做静态方法调用,导致执行系统命令。Ognl语句调用静态方法:@Runtime@getRuntime().exec(“calc”)。 漏洞发现者给出了shellcode,但是经过我的测试,shellcode并不能影响所有版本,而是仅仅针对xwork2.1.2及以上的版本有效,xwork2.1.2及以上核心被应用在struts2和webwork某些版本中,所以他们间接受到了影响,但是修补代码,是xwork去做的。 本文出自:亿恩科技【www.enkj.com】 |
京公网安备41019702002023号