Struts2 S2-016漏洞修复总结
网络安全 2021-07-03 09:43www.168986.cn网络安全知识
Struts2的S2-016漏洞是之前比较重大的漏洞,也是一些老系统的历史遗留问题
此漏洞影响struts2.0-struts2.3的所有版本,可直接导致服务器被远程控制从而引起数据泄漏,影响巨大
漏洞修复有4种方式
1、升级版本
这也是Apache官方给出的建议,把Struts2的版本升级到2.3.15以上的版本,这种方式只需要替换一些jar包,归纳如下
mons-lang3-3.2.jar
freemarker-2.3.22.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.24.jar
struts2-spring-plugin-2.3.24.jar
xwork-core-2.3.24.jar
只需要用上述jar包(版本可能会有差距)替换老系统中的旧版本jar包;
这种方式存在一定的缺陷,如果系统非常复杂,可能会有版本不兼容,jar版本冲突,导致系统功能不能 使用的情况;
2、覆盖JAR包
下载上述图片,把后缀名改为zip,把里面解压出来的三个文件夹添加到漏洞的系统的src目录下
然后再web.xml文件中添加代码
<listener>
<listener-class>.hdht.monweb.listener.MyServletContextListener</listener-class>
</listener>
发布项目,重启服务器
3、修改Struts2的源码
找到项目中的struts2-core-2.2.3.jar,反编译得到源码,在eclipse中新建一个java项目,把反编译的源码导进去
修改\apache\struts2\dispatcher\mapper\DefaultActionMapper.java这个文件中的handleSpecialParameters方法
在while循环(for循环)中加入狼蚁网站SEO优化代码
if (key.endsWith(".x") || key.endsWith(".y")) {
key = key.substring(0, key.length() - 2);
}
保存,这个新项目可能会有错误,需要导入两个jar包,xwork-core-2.1.6.jar和servlet-api.jar
把这个新项目导出成jar包,把下图中的7个类,替换掉原先struts2-core-2.2.3.jar中的7个类
4、结合上面的第2和第3种方式
还是需要用到struts2的源码,同第3步,反编译得到源码,导入到一个新的项目中
下载第2步中的压缩包,解压之后得到三个文件,把这三个文件夹添加到新项目的 \apache\struts2\dispatcher\mapper包中,如下图
然后,再修改\apache\struts2\dispatcher\mapper\DefaultActionMapper.java这个文件中的handleSpecialParameters方法
在while循环中加入如下代码
if (JavaEEbugRepair.repair_s2_017(key)) {
return;
}
if ((key.contains("action:")) || (key.contains("redirect:")) || (key.contains("redirectAction:"))) {
return;
}
保存,把新项目导出成jar包
把原来jar中的7个类替换,加入新包repair,再把替换之后的jar复制到项目中,替换之前的jar包
以上4种方式基本能处理所有项目的S2-016漏洞;
此漏洞影响struts2.0-struts2.3的所有版本,可直接导致服务器被远程控制从而引起数据泄漏,影响巨大
漏洞修复有4种方式
1、升级版本
这也是Apache官方给出的建议,把Struts2的版本升级到2.3.15以上的版本,这种方式只需要替换一些jar包,归纳如下
mons-lang3-3.2.jar
freemarker-2.3.22.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.24.jar
struts2-spring-plugin-2.3.24.jar
xwork-core-2.3.24.jar
只需要用上述jar包(版本可能会有差距)替换老系统中的旧版本jar包;
这种方式存在一定的缺陷,如果系统非常复杂,可能会有版本不兼容,jar版本冲突,导致系统功能不能 使用的情况;
2、覆盖JAR包
下载上述图片,把后缀名改为zip,把里面解压出来的三个文件夹添加到漏洞的系统的src目录下
然后再web.xml文件中添加代码
复制代码
代码如下:<listener>
<listener-class>.hdht.monweb.listener.MyServletContextListener</listener-class>
</listener>
发布项目,重启服务器
3、修改Struts2的源码
找到项目中的struts2-core-2.2.3.jar,反编译得到源码,在eclipse中新建一个java项目,把反编译的源码导进去
修改\apache\struts2\dispatcher\mapper\DefaultActionMapper.java这个文件中的handleSpecialParameters方法
在while循环(for循环)中加入狼蚁网站SEO优化代码
复制代码
代码如下:if (key.endsWith(".x") || key.endsWith(".y")) {
key = key.substring(0, key.length() - 2);
}
保存,这个新项目可能会有错误,需要导入两个jar包,xwork-core-2.1.6.jar和servlet-api.jar
把这个新项目导出成jar包,把下图中的7个类,替换掉原先struts2-core-2.2.3.jar中的7个类
4、结合上面的第2和第3种方式
还是需要用到struts2的源码,同第3步,反编译得到源码,导入到一个新的项目中
下载第2步中的压缩包,解压之后得到三个文件,把这三个文件夹添加到新项目的 \apache\struts2\dispatcher\mapper包中,如下图
然后,再修改\apache\struts2\dispatcher\mapper\DefaultActionMapper.java这个文件中的handleSpecialParameters方法
在while循环中加入如下代码
复制代码
代码如下:if (JavaEEbugRepair.repair_s2_017(key)) {
return;
}
if ((key.contains("action:")) || (key.contains("redirect:")) || (key.contains("redirectAction:"))) {
return;
}
保存,把新项目导出成jar包
把原来jar中的7个类替换,加入新包repair,再把替换之后的jar复制到项目中,替换之前的jar包
以上4种方式基本能处理所有项目的S2-016漏洞;
网络安全培训
- 网络安全带来的危害 网络安全的弊处
- 如何加强网络安全防范
- 网络安全防护知识内容摘要
- 什么网络安全指的是什么 网络安全指的是什么意
- 网络安全十大公司排名 网络安全十大公司排名绿
- 手机网络安全警示格言 手机网络安全警示教育片
- 网络安全培训心得体会 网络安全知识培训
- 如何树立正确的网络意识 怎么样正确对待网络
- 网络安全大赛是什么意思 网络安全大赛比赛规则
- 世界网络安全公司排名 世界十大网络安全上市公
- 网络安全注意事项知识 网络安全注意事项知识短
- 网络安全常识十条口诀 小学生安全十句话
- 网络安全等级保护三级 网络安全三级等保标准
- 如何增强网络安全防范意识 如何增强网络安全防
- 网络安全注意事项有哪些 网络安全应注意事项
- 网络安全培训感悟 网络安全培训后的收获和感想