Struts2 S2-016漏洞修复总结
发布时间:2016-08-20 09:09:43 作者:佚名 我要评论
这篇文章主要介绍了Struts2 S2-016漏洞修复总结,需要的朋友可以参考下
Struts2的S2-016漏洞是之前比较重大的漏洞,也是一些老系统的历史遗留问题
此漏洞影响struts2.0-struts2.3的所有版本,可直接导致服务器被远程控制从而引起数据泄漏,影响巨大
漏洞修复总结有4种方式:
1、升级版本
这也是Apache官方给出的建议,把Struts2的版本升级到2.3.15以上的版本,这种方式只需要替换一些jar包,归纳如下:
commons-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>org.hdht.commonweb.listener.MyServletContextListener</listener-class>
</listener>
最后发布项目,重启服务器
3、修改Struts2的源码
找到项目中的struts2-core-2.2.3.jar,反编译得到源码,在eclipse中新建一个java项目,把反编译的源码导进去
修改org\apache\struts2\dispatcher\mapper\DefaultActionMapper.java这个文件中的handleSpecialParameters方法
在while循环(for循环)中加入下面代码:
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步中的压缩包,解压之后得到三个文件,把这三个文件夹添加到新项目的 org\apache\struts2\dispatcher\mapper包中,如下图
然后,再修改org\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包,归纳如下:
commons-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>org.hdht.commonweb.listener.MyServletContextListener</listener-class>
</listener>
最后发布项目,重启服务器
3、修改Struts2的源码
找到项目中的struts2-core-2.2.3.jar,反编译得到源码,在eclipse中新建一个java项目,把反编译的源码导进去
修改org\apache\struts2\dispatcher\mapper\DefaultActionMapper.java这个文件中的handleSpecialParameters方法
在while循环(for循环)中加入下面代码:
复制代码
代码如下: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步中的压缩包,解压之后得到三个文件,把这三个文件夹添加到新项目的 org\apache\struts2\dispatcher\mapper包中,如下图
然后,再修改org\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漏洞;
相关文章
- 今天我要讲的是:如何成为一名真正的优秀的道德黑客?不管是新手还是老手,有兴趣的朋友们都可以看一看2023-07-03
- 这篇文章主要介绍了白帽黑客、灰帽黑客、黑帽黑客三者的区别介绍,需要的朋友可以参考下2023-07-03
什么是DDoS攻击?CC攻击?cc攻击与ddos攻击区别小结
CC和DDoS都是我们最长听到的黑客攻击手段,那么它们有什么区别呢?CC攻击会造成什么后果呢?也可通过这篇文章了解更多的CC攻击知识:什么是CC攻击?怎么防御CC攻击?谁的威2023-07-03- 这篇文章主要介绍了Struts2 S2-016漏洞修复总结,需要的朋友可以参考下2016-08-20
- Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴、京东等互联网、政府、企业门户网站2016-08-20
- 还记得我们之前说过的有个白帽子提交了世纪佳缘的漏洞然后被世纪佳缘告了的事情吗?这件事情引起了国内很多白帽黑帽的关注,如今事情又发酵,中国最大的两大漏洞平台——乌2016-07-20
- 未来的互联网最重要的不是速度,不是容量,而是安全。黑客这个词很多人已经耳熟能详,虽然他们是一群神秘的人,但不能判断他们是不是好人,越厉害的往往威胁越大。其实有一2016-07-15
- 支付宝花呗是支付宝提供的第三方信用平台,根据你的消费购物信用给你透支额度,给很多不想办信用卡的人带来了很多方便,但是,最近出现的利用花呗套现的人,却在不知不觉中2016-07-14
- 有一天打开电脑,发现电脑已经被锁住,窗口弹出说明:如果你不给钱,就把你的电脑清空,这就是遇到了勒索软件。近年来,这种勒索已经频频出现在安卓手机上,手机里的重要资2016-07-11
- 互联网的发展已经步入稳定期,未来不会像之前那样呈现爆发性增长的状况了,那么未来的网络谁是主角?是安全。云计算与大数据在为我们的生活工作带来方便的同时,也面临着从2016-06-28
最新评论