Struts2-045漏洞处理时遇到的坑(升级Struts2.5需要特别注意的配置),


最近公司的ssh搭建老项目出现了问题,被人抓到了漏洞获取了权限,幸好是名白客没有进行大肆破坏,找到原因是Struts2框架在之前就爆出的045漏洞,分享出自己在解决时遇到的坑。

关于检测Struts2漏洞的方法:

可以下载K8大神的Struts漏洞检测工具http://qqhack8.blog.163.com/blog/static/1141479852014631102759126/

关于045漏洞的危害:

几乎无条件,所有url都会被此漏洞利用,哪怕你没有使用上传功能

关于045漏洞原因分析:

可以阅读http://blog.csdn.net/rossrocket/article/details/67674290,非常详细易懂,主要是利用上传时在Content-Type中注入OGNL表达式,Struts在出现异常后会用OGNL方式去解析Content-Type

关于045漏洞涉及的版本:

2.3-2.5,也就是说2.5.10以上都是安全版本,我们项目中使用的是2.3.28.1,所以被抓到了漏洞

解决方案:

重点来了,简单来说,就是升级到Struts2的jar包为安全版本,我这里使用的是官网最新版本2.5.14.1

附上官方下载链接http://struts.apache.org/download.cgi#struts2514.1

遇到的坑:

主要是关于Struts 2.3升级为2.5时需要的配置,2.5有几个配置需要特别注意

1、Struts 2.5 所需必要jar包

2、web.xml的核心过滤器的修改

将核心拦截器

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

更改为(少了一个.ng的路径)

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

3、struts.xml的头部DTD约束修改

更改为2.5的约束,不然无法使用<global-allowed-methods>标签

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

4、struts.xml里添加动态方法允许范围

添加标签

<global-allowed-methods>regex:.*</global-allowed-methods>

这里注意这个标签在<package>标签的顺序,Sturuts的配置文件里要严格按照顺序来写

一般是在 <global-exception-mappings>这个标签之上

 

注:如有什么侵权的,请回复,马上删除

相关内容