Struts2漏洞分析「建议收藏」

Struts2漏洞分析「建议收藏」当在浏览器输入如下地址时:      http://www.xxxx.com/aaa.action?(‘\u0023_memberAccess[\’allowStaticMethodAccess\’]’)(meh)=true&(aaa)((‘\u0023context[\’xwork.MethodAccessor.denyMethodExecution\’]\u003d\u0023foo’)

大家好,又见面了,我是你们的朋友全栈君。

当在浏览器输入如下地址时:

       http://www.xxxx.com/aaa.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 

输入以后,服务器端就会崩溃

原因如下:

1、 首先这个url翻译后?后面的内容如下:

?(‘#_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

2、 当提交这个url后,经过了一个拦截器名为ParameterInterceptor

其中有这么一行源代码:

Struts2漏洞分析「建议收藏」

   意思为:可以改变值栈中的值。例如

               在action中有一个属性name(该name有set方法)

        利用stack.setValue(“name”,”aaa”);就把name属性的值改为aaa字符串。

在上述的url中,有两个至关重要的值:

在map栈中:

     下图:

Struts2漏洞分析「建议收藏」

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

context[‘xwork.MethodAccessor.denyMethodExecution’]则是

Struts2漏洞分析「建议收藏」

只有这个值为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);,这个时候整个程序关闭了,所以web容器也被关闭了。

为什么会存在这样的漏洞:

1、 struts2提供了存储数据的内存结构valueStack

2、 struts2也提供了访问数据的方式ognl表达式

3、 ognl表达式不但可以访问到valueStack中的值,而且还可以改变valueStack中的值

调用valueStack.setValue即可

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

这样的结构很灵活,很方便程序员对数据进行操作,因为太灵活,所以在这里就存在安全性的隐患了。可以把一些特别的代码(导致系统崩溃)嵌入到ognl表达式中。

 

说明:

       上述url中的\u0023代表#号,%20代表空格,\u003代表等于

 

解决方案:

     做一个自定义的拦截器,拦截器过滤url,如果含有\u0023这个字符串,则不能执行以后的操作。这个拦截器的执行一定要在ParameterInterceptor执行之前

       Struts2漏洞分析「建议收藏」

在xml配置如下:

       Struts2漏洞分析「建议收藏」

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161713.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TiDB压测(单表两亿数据)

    TiDB压测(单表两亿数据)

    2021年5月13日
  • PotPlayer 旋转视频【快捷键:Alt + K 循环旋转】

    PotPlayer 旋转视频【快捷键:Alt + K 循环旋转】(1)视频->图像旋转->旋转xx°(2)PotPlayer旋转视频—【快捷键:Alt+K循环旋转】

    2022年5月21日
  • 随着数据科学家的崛起,谁的地位将发生动摇_算法是谁发明的

    随着数据科学家的崛起,谁的地位将发生动摇_算法是谁发明的作者简介Introduction杨滔,桃树科技(TaoData)创始人,专注于下一代人工智能产品的研发、应用与商业化。拥有超过十年机器学习研究与应用经验。奥克兰大学机器学习博士,悉尼科技大学博士后。曾任阿里巴巴集团数据科学家,建立淘宝网数据科学团队,首创聚划算爆款模型。曾任F团首席科学家,建立F团数据化运营体系。往期回顾如何成为一名卓越的数据科学家——开篇七剑如何成为一名卓越的数据科学家——七剑

    2022年9月30日
  • nurtas aidarbekov_true image2018

    nurtas aidarbekov_true image2018Up主作为CV穷人代表,这一次想要触碰一下papers里最为活跃却又以“Huge”令穷人望而生畏的超级数据集:ImageNet中的ILSVRC2012.还记得依靠氪金“霸道总裁式”碾压一切“noise2image”的BigGAN吗?来不及时间解释了,快上车!##下载可怜穷人的BigGAN-4~8gpusversion>>gitcl…

    2022年10月9日
  • Java中如何把两个数组合并为一个

    Java中如何把两个数组合并为一个http://freewind.me/blog/20110922/350.html在Java中,如何把两个String[]合并为一个?看起来是一个很简单的问题。但是如何才能把代码写得高效简洁,却还是值得思考的。这里介绍四种方法,请参考选用。一、apache-commons这是最简单的办法。在apache-commons中,有一个ArrayUtils.addAll(Object[],

    2022年6月29日
  • Springboot-软件授权License

    Springboot-软件授权License在我们做系统级框架的时候,我们要一定程度上考虑系统的使用版权,不能随便一个人拿去在任何环境都能用,所以我们需要给我们系统做一个授权认证机制,只有上传了我们下发的lic文件并验证通过,才能正常使用。1、Smart-license简介smart-license是一款用于安全加固的开源项目。主要服务于非开源产品、商业软件、具备试用功能的付费软件等,为软件提供授权制的使用方式。1.License,通过smart-license生成的授权文件,导入至要授权使用的软件产品中。2.源数据,需要进行L

    2022年7月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号