Struts2漏洞

Struts 2.3.15版本被曝出存在重要的安全漏洞,主要问题如下

 

1、可远程执行服务器脚本代码

 

      用户可以构造http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}链接,command goes here可以换成是破坏脚本的路径和参数,比如fdisk -f等,造成破环系统无法圆形的目的。

 

2、重定向漏洞

       用户可以构造如知名网站淘宝的重定向连接,形如<a href="http://www.淘宝.com/item00001.html?redirect:http://黑客/getyourPassword">打折新款</a>,引导用户点击后进入钓鱼网站,在界面上让其进行登陆用以获取用户的密码。

 

二、解决方法

 

思路:更换Struts2 Jar包。

以下是具体的步骤:

1、登录Struts2官网,http://struts.apache.org/download.cgi#struts23151(具体的下载页面),下载版本为2.3.15.1的,struts-2.3.15.1-all.zip。

2、从struts-2.3.15.1-all\struts-2.3.15.1\lib中拷贝出

(1)javassist-3.11.0.GA.jar

(2)commons-io-2.0.1.jar

(3)commons-lang3-3.1.jar

(4)freemarker-2.3.19.jar

(5)ognl-3.0.6.jar

(6)commons-fileupload-1.3.jar

(7)xwork-core-2.3.15.1.jar

(8)struts2-core-2.3.15.1.jar

(9)struts2-spring-plugin-2.3.15.1.jar

注:保留原有的commons-lang-2.6.jar,其余的替换旧版本。(删除对应旧版本,然后将上述9个Jar包拷贝进去)

3、重新编译。完毕

 

 

struts2漏洞S2-016、S2-017修补方案:

 

方案1:
方案介绍:
手工修改Ognl.jar源码,增加恶意代码过滤。此方法只能修补S2-016漏洞,但是对以后可能产生的ognl漏洞有预防作用。
操作步骤:
1.1 找到项目中ognl-version.jar,然后找到其对应的源码。把源码解压后,导入到eclipse。找到Ongl.java中修改如下代码:
1.2 将上面修改后的项目通过eclipse导出为ognl-my.jar, 将它放到lib目录。
1.3 删除原来ognl-version.jar
1.4 重启服务器。

 

方案2:
方案介绍:
重写struts2 DefaultActionMapper的handleSpecialParameters方法,增加action、redirect、redirectAction等参数的过滤。此方法可修补S2-016、S2-017漏洞。
操作步骤:
2.1 新建com/website/struts2/MyDefaultActionMapper.java,代码如下:
2.2 复制MyDefaultActionMapper.class 到 /com/website/struts2/目录。
2.3 用struts.xml添加如下代码:
2.4 重启服务器。

 

注意:
1.方案1中的“恶意代码”和方案2中的“action、redirect、redirectAction”均为hardcode,如有需要可改为从配置文件读取。
2.方案1原则上对系统没有影响,方案2进行了redirect和redirectAction可跳转性测试,但未进行全站测试。
3.方案1和方案2可以同时执行,也可只执行单独一个。

 

 

你可能感兴趣的:(Struts2漏洞)