您的位置:首页 > 编程语言 > Java开发

struts2 框架 远程执行漏洞 解决方案详解

2013-06-03 11:42 211 查看
Struts2/XWork < 2.2.0远程执行任意代码漏洞

该漏洞是利用xwork(struts2的核心部件)可以动态构建执行方法的原理(xwork.MethodAccessor.denyMethodExecution),
通过修改一些值能够调用被保护的Java代码,并且执行任意的Java代码:如执行下述代码,将会调用:
java.lang.Runtime.getRuntime().exit(1),造成程序运行异常;

')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.den]http://mydomain/MyStruts.action?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.den

yMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRunti

me()))=1

二、解决方案:
本次修改是将struts版本从2.1升级到2.3从而解决该问题
本次修复过程整理如下:
步骤:
1.删除commons-lang-2.6.jar、jfreechart-1.0.13.jar、jfreechart-1.0.13-experimental.jar、jfreechart-1.0.13-swt.jar、ognl-2.6.11.jar
、struts2-core-2.1.6.jar、struts2-jfreechart-plugin-2.1.6.jar、struts2-spring-plugin-2.1.6.jar、xwork-core-2.1.4.jar;
2.上传commons-lang3-3.1.jar、ognl-3.0.5.jar、struts2-core-2.3.4.jar、struts2-spring-plugin-2.3.4.jar、xwork-core-2.3.4.jar;
3.删除struts-default.xml文件;
4.修改struts.xml,将2.0修改为2.3。
修改完成后重启tomcat。

三、测试:
执行')(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://localhost:8080/index/index.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

命令后,程序运行正常,漏洞处理完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: