首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Struts2破绽分析,漏洞波及全系版本

2013-11-01 
Struts2漏洞分析,漏洞波及全系版本Struts漏洞分析Apache Struts团队已经发布了Struts 2.3.15.1安全更新版

Struts2漏洞分析,漏洞波及全系版本
Struts漏洞分析
   Apache Struts团队已经发布了Struts 2.3.15.1安全更新版本。在Struts2.3.15.1版本之前,存在着严重的安全漏洞,如果现在一些比较大的网站是用JAVA做的,没有把版本升级,还用的是Strtus2.3.15.1版本之前的话,那么你们就要小心,服务器被黑了哦。 下面就来说一下之前版本,Struts2的漏洞是如何产生的,我们自己去做,该如何的去解决这个安全漏洞:
    我听有人说: “这算什么漏洞”,我想说的是:“你在浏览器就能把别个服务器搞蹦掉,让它停掉没工作了,这能不是高危漏洞么”。

   1. 我用的是struts_2.1.8.1这个版本,如果你用最新的安全版本,是不会出现这个安全问题的。在浏览器输入如下地址:

http://www.xxxx.com/xxx.action?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1 

输入以后,服务器端就会崩溃。http://www.xxxx.com/xxx.action这个就不说是什么了,你这都不知道就不要看了。   【说明: url中的\u0023实际上是代表#号,%20实际上是代表空格,\u003实际上是代表等于】
   2.产生漏洞的原因如下:     上面的地址被浏览器会翻译成:?('#_memberAccess['allowStaticMethodAccess']')(meh)=true&(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))&(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1     当提交这个url后,经过了一个拦截器名为ParameterInterceptor。其中有这么一行源代码:  

_memberAccess是OgnlContext中的一个属性,这是一个权限类SecurityMemberAccess,该权限类中有一个方法allowStaticMethodAccess:是否允许访问静态方法。通过上面的url,把该属性的值设置为了true(默认值为false),

context['xwork.MethodAccessor.denyMethodExecution']这个值为false,Ognl才能够执行自定义的变量,在map栈中的其中一个值,这个是一个boolean值,设置为true,ognl表达式就能够调用静态的方法

(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1则是一个shellcoade,ognl表达式执行静态方法,这样就调用java中的命令了。当执行(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1这个代码的时候相当于java.lang.Runtime.getRuntime().exit(1);,执行完毕后,使得我们的整个程序停掉了。

   3.为什么会产生这样的漏洞呢?

      struts2提供了存储数据valueStack

      struts2提供了访问数据的ognl表达式

     ognl表达式不但可以访问到valueStack中的值,而且还可以改变valueStack中的值调用valueStack.setValue

      ognl表达式还能执行静态方法,并且嵌入一些shellcoade代码。

 4.如果我们去做,怎么去解决?

    做一个自定义的拦截器,用拦截器过滤url,含有\u0023这个字符串,就不让它执行以后的相应的操作。自定义的拦截器一定要在ParameterInterceptor执行之前执行就哦了。

    

<interceptors>  <interceptor name="definitionInterceptor" calss=".....definitionInterceptor"></interceptor>  <intercpeotr-stack name="myStack">     <interceptor-ref name="definitionInterceptor"></interceptor-ref>     <interceptor-ref name="defaultStackr"></interceptor-ref>  </interceptor-stack></interceptors><default-interceptor-ref name="myStack"></default-interceptor-ref>
有不懂的地方,可以给我留言。
3楼ch6564091101小时前
很好,我刚刚尝试了下京东网,没有问题,人家已经更新了估计
Re: a324325252分钟前
回复ch656409110n这个问题7月就已被干掉,各大网站都已升级,不要想着黑别人哦。
2楼jacal1昨天 22:22
学习了
1楼u012280292昨天 16:36
刚学struts2 表示看不懂那段url
Re: a3243252昨天 20:46
回复u012280292n初学者还是别先看,待你学明白struts之后在来看看

热点排行