網上處理方法基本千篇一律。就是在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版本。