struts2 框架 远程执行漏洞 解决方案详解
2013-06-03 11:42
211 查看
Struts2/XWork < 2.2.0远程执行任意代码漏洞
该漏洞是利用xwork(struts2的核心部件)可以动态构建执行方法的原理(xwork.MethodAccessor.denyMethodExecution),
通过修改一些值能够调用被保护的Java代码,并且执行任意的Java代码:如执行下述代码,将会调用:
')(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
命令后,程序运行正常,漏洞处理完成。
该漏洞是利用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
命令后,程序运行正常,漏洞处理完成。
相关文章推荐
- Struts2再爆远程命令执行漏洞![W3bSafe]Struts2-048 Poc Shell及防御修复方案抢先看!
- Struts2远程命令执行漏洞分析及防范
- Struts2 S2 – 032远程代码执行漏洞分析报告
- 【S2-053】Struts2远程命令执行漏洞(CVE-2017-12611)
- Struts2远程执行漏洞
- Struts2 REST 插件 XStream 远程代码执行漏洞 S2-052 复现过程
- Struts2再爆远程命令执行漏洞!Struts2-048 Poc Shell及防御修复方案抢先看!
- struts2远程命令执行漏洞
- Apache Struts2 远程命令执行漏洞
- 利用最新struts2远程执行命令漏洞渗透网站的演示
- struts2远程命令执行漏洞S2-045
- Apache Struts2远程命令执行漏洞呈爆发趋势
- Struts2 S2-016,S2-017远程代码执行漏洞解决,修复
- Struts2 S2 – 032远程代码执行漏洞分析报告 .
- Struts2远程代码执行漏洞预警
- struts2之高危远程代码执行漏洞,可造成服务器被入侵,下载最新版本进行修复
- Struts2远程命令执行漏洞 S2-045 源码分析
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- Struts2框架缺陷造成的远程执行漏洞-解决方案
- Apache Struts2 多个前缀参数远程命令执行漏洞及测试方法