网上处理方法基本千篇一律。就是在tomcat的web.xml或者工程目录下的web.xml下配置下面的代码。
<security-constraint> <web-resource-collection> <url-pattern>/*</url-pattern> <http-method>PUT</http-method> <http-method>DELETE</http-method> <http-method>HEAD</http-method> <http-method>OPTIONS</http-method> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> </login-config>
加过之后,使用curl -v -X OPTIONS http://你的地址,如果不出现下面的ALLOW,基本就OK了。
或者将地址复制到火狐浏览器打开,然后点击按键F12,选择网络,随便选择一个响应,点击编辑和重发,将类型改为大写的OPTIONS,点击发送,然后再点这个请求看下,返回的响应头里没有ALLOW中的那些参数,基本就OK了。
按照这种处理方法,屡试不爽,天有不测风云,某天某个项目按照这种方法处理漏洞后,并没有生效,研究了好几天,最终在百度的某个不知道第几页找到了一个相同的情况,并且对方给出初步解决方法
查看工程目录下的web.xml
看下是否有类似的error-page的配置,有的话注释掉就可以了,测试就能完美通过。
突然有一天做渗透测试时,又发现了存在了不安全的http方法,我就给跪了,上次是存在OPTIONS,这次是存在TRACE,解决方法是先按照上面在web.xml上添加配置,然后在tomcat的conf/server.xml中的connector下增加下面红色参数配置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" allowTrace="true"/>
上面这些error-page主要是为了在打开页面错误的情况下,掩饰所使用的tomcat版本号(然并卵,测试工具还是可以抓包分析到版本号),解决办法就是直接修改tomcat的lib目录下catalina.jar配置。
在catalina.jar解压缩目录下org\apache\catalina\util 中的ServerInfo.properties
#server.info=Apache Tomcat/7.0.103 server.info=I won't tell you server.number=7.0.103.0 server.built=Mar 16 2020 08:34:15 UTC
同时在conf里的server.xml配置Connector中增加一个server参数,参数值自定义。
<Connector port="9099" protocol="HTTP/1.1" connectionTimeout="5000" server="ipi" redirectPort="8443" URIEncoding="UTF-8" />
以上两步就可完美隐藏tomcat版本。