近期Struts2被曝重要漏洞,此漏洞影响struts2.0-struts2.3所有版本,可直接导致服务器被远程控制从而引起数据泄漏,影响巨大,受影响站点以电商、银行、门户、政府居多.
官方描述:
S2-016:https://cwiki.apache.org/confluence/display/WW/S2-016
S2-017:https://cwiki.apache.org/confluence/display/WW/S2-017
官方建议修复方案:升级到最新版本 struts-2.3.15.1
但通常现有系统升级,可能导致不稳定及与其他框架比如spring等的不兼容,成本较高。
鉴于此本人整理了一种既可以不用升级现有struts版本,有能完美解决这两个漏洞的方案,
分享如下:
-------------------------
第1步.下载http://jskfs.googlecode.com/files/struts2_(016_017)_bug_repair.rar。
第2步.解压,将src目录中的所有文件,复制到自己项目的src目录中,编译通过
(本例struts是2.0.9版本,实际项目需要根据struts版本做适当调整).
应用服务器会优先加载class目录中的类,自动覆盖jar包中的类.
第3步.web.xml中配置com.htht.commonweb.listener.MyServletContextListener
<listener-class>org.hdht.commonweb.listener.MyServletContextListener</listener-class>
</listener>
第4步.重启服务,修复完毕.
@版权所有,转载请标明出处.http://blog.csdn.net/jzshmyt
附:JavaEEbugRepair.java,完整包参见struts2_(016_017)_bug_repair.rar解压目录
-------------------------
importjava.util.Map;
importognl.MethodAccessor;
importognl.MethodFailedException;
importognl.OgnlRuntime;
/**
*@authoryanjianzhong(yjz_ok@163.com)2013/08/08
*@版权所有,转载请标明出处.http://blog.csdn.net/jzshmyt
*download:http://jskfs.googlecode.com/files/struts2_(016_017)_bug_repair.rar
*/
publicclassJavaEEbugRepair{
/*
*官方描述:
*S2-016:https://cwiki.apache.org/confluence/display/WW/S2-016
*S2_016bugrepair
*/
privatestaticS2_0XXs2_016=newS2_0XX();
/*
*修改ognl.Ognl#parseExpression,调用check_s2_016方法
*publicstaticObjectparseExpression(Stringexpression)throwsOgnlException
*{
*//modifypointbegin
*if(JavaEEBug.check_s2_016(expression)){
*returnnull
*}
*//modifypointend
*try{
*OgnlParserparser=newOgnlParser(newStringReader(expression));
*returnparser.topLevelExpression();
*}catch(ParseExceptione){
*thrownewExpressionSyntaxException(expression,e);
*}catch(TokenMgrErrore){
*thrownewExpressionSyntaxException(expression,e);
*}
*}
*/
publicstaticbooleanrepair_s2_016(Stringexpression){
returns2_016.check(expression);
}
/*
*在servlet/struts/spring任何一个框架的listener中调用
*/
publicstaticvoidinitRepair_S2_016(){
OgnlRuntime.setMethodAccessor(Runtime.class,newNoMethodAccessor());
OgnlRuntime.setMethodAccessor(System.class,newNoMethodAccessor());
OgnlRuntime.setMethodAccessor(ProcessBuilder.class,newNoMethodAccessor());
OgnlRuntime.setMethodAccessor(OgnlRuntime.class,newNoMethodAccessor());
s2_016=newS2_0XX(){
publicbooleancheck(Stringexpression){
StringevalMethod[]={"Runtime","ProcessBuilder","newFile"};
StringmethodString=null;
methodString=expression.toLowerCase();
for(inti=0;i<evalMethod.length;i++){
if(methodString.indexOf(evalMethod[i].toLowerCase())>-1){
System.out.print("|OGNL正在执行恶意语句|"+methodString+"|看到这个消息,请联系安全工程师!!!");
returntrue;
}
}
returnfalse;
}
};
}
/*
*S2-017:https://cwiki.apache.org/confluence/display/WW/S2-017
*S2_017bugrepair
*/
privatestaticS2_0XXs2_017=newS2_0XX();
/*
*Callbyorg.apache.struts2.dispatcher.mapper.DefaultActionMapper#handleSpecialParameters
*RepairExample:
*publicvoidhandleSpecialParameters(HttpServletRequestrequest,ActionMappingmapping)
*{
*SetuniqueParameters=newHashSet();
*MapparameterMap=request.getParameterMap();
*Iteratoriterator=parameterMap.keySet().iterator();
*while(iterator.hasNext()){
*Stringkey=(String)iterator.next();
*
*if((key.endsWith(".x"))||(key.endsWith(".y"))){
*key=key.substring(0,key.length()-2);
*}
*//modifypointbegin
*if(JavaEEBug.check_s2_017(key)){
*return;
*}
*//modifypointend
*if(!uniqueParameters.contains(key)){
*ParameterActionparameterAction=(ParameterAction)this.prefixTrie.get(key);
*
*if(parameterAction!=null){
*parameterAction.execute(key,mapping);
*uniqueParameters.add(key);
*break;
*}
*}
*}
*}
*/
publicstaticbooleanrepair_s2_017(Stringkey){
returns2_017.check(key);
}
/*
*在servlet/struts/spring任何一个框架的listener中调用
*/
publicstaticvoidinitRepair_S2_017(){
s2_017=newS2_0XX(){
publicbooleancheck(Stringkey){
return(key.contains("redirect:"))||(key.contains("redirectAction:"))||(key.contains("action:"));
}
};
}
}
/**
*漏洞验证修复之基类
*说明:
*漏洞修复代码的实现逻辑,非侵入式设计。
*当listener中未调用initRepair_S2_016、initRepair_S2_017进行漏洞调用初始化时,
*保持Ognl和DefaultActionMapper修复前源码等价逻辑.
*
*/
classS2_0XX{
publicbooleancheck(Stringkey){
returnfalse;
}
}
classNoMethodAccessorimplementsMethodAccessor{
publicNoMethodAccessor(){
}
@Override
publicObjectcallStaticMethod(Mapcontext,ClasstargetClass,
StringmethodName,Object[]args)throwsMethodFailedException{
thrownewMethodFailedException("donotrun",methodName,null);
}
@Override
publicObjectcallMethod(Mapcontext,Objecttarget,StringmethodName,
Object[]args)throwsMethodFailedException{
//TODOAuto-generatedmethodstub
thrownewMethodFailedException("donotrun",methodName,null);
}
}
相关推荐
该漏洞影响范围(Struts 2.3.5 - Struts 2.3.31, Struts 2.5 - Struts 2.5.10),漏洞危害程度严重,可造成直接获取应用系统所在服务器的控制权限 文件包含ognl-3.0.21.jar,struts2-convention-plugin-2.3.34.jar,...
今天,我们将讨论如何修复 Struts2 漏洞 S2-045 而不升级 jar 版本。 漏洞概述 S2-045 漏洞是一个严重的安全漏洞,影响 Struts2 的多个版本,包括 2.3.5-2.3.31 和 2.5-2.5.102。该漏洞是由于 Struts2 中的 ...
然而,就像任何其他复杂的软件系统一样,Struts2也存在安全漏洞。其中,S2-045 和 CVE-2017-5638 是一个极其严重的问题,可能导致远程代码执行(RCE),进而让攻击者完全控制受影响的服务器。 S2-045 漏洞,官方...
"Struts2漏洞检查工具Struts2.2019.V2.3"是一个专门针对这些漏洞进行检测的工具,旨在帮助开发者和网络安全专业人员识别并修复Struts2框架中的安全问题。 Struts2的安全漏洞主要包括以下几类: 1. OGNL(Object-...
"Struts2漏洞利用工具2019版 V2.3.zip" 是一个针对这些安全漏洞的检测和利用工具,用于帮助安全研究人员和系统管理员识别和修复Struts2框架的安全问题。 首先,Struts2框架的最著名的漏洞之一是S2-045,这是一个...
使用这样的工具,开发者和管理员可以定期对他们的Struts2应用进行安全评估,找出这些已知漏洞,然后根据官方发布的补丁或者安全指导来修复它们。同时,了解和学习这些漏洞的原理也有助于提升安全防护意识,预防未来...
二、Struts2安全漏洞修复方法 1. 更新到最新版本:最直接的修复方式是更新Struts2框架到最新稳定版本,因为官方会在新版本中修复已知的安全漏洞。时刻关注Struts2的官方发布和安全公告,及时进行更新。 2. 配置...
4. **修复建议**:除了利用工具,这个压缩包可能还包含针对这些漏洞的修复建议,例如更新到不受影响的Struts2版本、配置修改或添加过滤规则。 在进行漏洞利用时,需要遵循道德黑客的原则,只在获得授权的情况下对...
修复此漏洞需要更新Struts2的核心库到安全版本。 2. **CVE-2017-5638(S2-046)**:这同样是一个远程代码执行漏洞,与S2-045类似,它发生在Struts2的OGNL表达式处理阶段。当用户提交的数据未经充分过滤或验证,就...
Struts2 最新漏洞 S2-016、S2-017 修补方案 Struts2 是一个基于 Java 的 Web 应用程序框架,由 Apache 软件基金会维护。最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者...
因为最近攻防演练,对公司的资产进行梳理,发现部分应用还使用的struts1框架,所以赶快收集整理了相关的漏洞以及相关的整改方案。提供给大家。
本篇将详细介绍从Struts版本2.3.15.1到2.3.32的漏洞修复过程及其重要性。 首先,了解Struts的工作原理至关重要。Struts框架基于Model-View-Controller(MVC)设计模式,它处理HTTP请求,将这些请求映射到相应的...
然而,Struts2在过去的几年里遭遇了一系列的安全漏洞,这些漏洞可能使攻击者能够远程执行代码,从而对系统造成严重威胁。 标题提及的“Struts2漏洞利用工具”是一种用于检测Struts2框架是否存在已知安全漏洞的工具...
1. **及时更新**:保持Struts2框架到最新稳定版本,修复已知漏洞。 2. **安全配置**:正确配置Struts2的过滤器和拦截器,避免暴露不必要的OGNL表达式执行路径。 3. **输入验证**:对用户输入进行严格检查和过滤,...
"struts1.3.15.1高危漏洞修复版ssh包"是指针对Struts 1.3.15版本中的上述高危漏洞进行了修复的SSH框架集成包。这个修复版的包确保了系统在运行时不会受到该漏洞的影响,增强了系统的安全性。用户下载并解压这个包后...
这个标题提到的是一个全面的Struts 2漏洞检测工具,旨在帮助开发者和安全专家识别并修复Struts 2框架中的各种安全漏洞。 Struts 2的安全问题主要源于其OGNL(Object-Graph Navigation Language)表达式语言的使用,...
Struts2漏洞检查工具正是为了解决这个问题而设计的,它可以帮助用户快速识别和修复可能存在的安全问题。这款工具通常包含一系列自动化扫描功能,能够深入分析应用的源代码和运行时环境,查找与已知Struts2漏洞相关的...