網絡安全-使用HTTP動詞篡改的認證旁路

這個東西去年的安全掃描都沒有,今天就掃出來了,很是奇怪的一個東西。好吧,找資料找緣由。結果可能應爲搜索名詞的緣由,這個問題在羣友的幫助下解決了。html

在我理解中servlet只有post和get方法,而後結果怎麼出來這麼多奇奇怪怪的方法呢。這些方法幹啥的呢?java

 

首先找到的是一個禁用http下不安全的方法的博客,具體誰的博客我也沒關注。先按照他的方法修改,修改方法也挺簡單,改下tomcat的web.xml就好。web

 

 

  1. <security-constraint>  
  2.     <web-resource-collection>  
  3.         <http-method>HEAD</http-method>  
  4.         <http-method>PUT</http-method>  
  5.         <http-method>DELETE</http-method>  
  6.         <http-method>OPTIONS</http-method>  
  7.         <http-method>TRACE</http-method>  
  8.         <url-pattern>/*</url-pattern>  
  9.     </web-resource-collection>  
  10.     <auth-constraint>  
  11.         <role-name></role-name>  
  12.     </auth-constraint>  
  13. </security-constraint>  
<security-constraint>
    <web-resource-collection>
        <http-method>HEAD</http-method>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name></role-name>
    </auth-constraint>
</security-constraint>

爲啥要加這個呢!找了下web.xml的說明tomcat

 

WebDAV (Web-based Distributed Authoring and Versioning)是基於 HTTP 1.1 的一個通訊協議。它爲 HTTP 1.1 添加了一些擴展(就是在 GET、POST、HEAD 等幾個 HTTP 標準方法之外添加了一些新的方法),使得應用程序能夠直接將文件寫到 Web Server 上,而且在寫文件時候能夠對文件加鎖,寫完後對文件解鎖,還能夠支持對文件所作的版本控制。這個協議的出現極大地增長了 Web 做爲一種創做媒體對於咱們的價值。基於 WebDAV  能夠實現一個功能強大的內容管理系統或者配置管理系統。 安全

好吧,這樣就理解了,既然是一個通信協議增長了這些方法,那麼按博主的方法改掉就行了。post

 

惋惜事與願違,使用AppScan掃描仍是存在這個問題。那麼就納悶了,爲啥會出現這樣的狀況呢?測試

因而找到了ui

AppScan問題「HTTP動詞篡改致使的認證旁路」的解決方法

這篇博客,這個裏面提供的思路不錯,看得出來他也配置了web.xml。這樣看起來要升級tomcat的節奏?
若是要升級tomcat我講面臨和那個博主同樣的問題,公司層面很差解決,並且公司也不僅是用tomcat。其餘的應該也存在問題。
 
從上面能夠明顯看出來這個漏洞和WebDAV 這個東西其實關係並不大,主要問題在於篡改,WebDAV 只是提供了一些方法,這些方法雖然會致使一些修改或者什麼的問題。可是若是是篡改了一個不存在的方法,其實結果也是同樣。好吧,其實上面那個博客最大的好處不是認識到了問題的根源,而是找到一個測試神器burpsuite。不再用苦逼的猜了。
 
好吧,那麼就剩下一個辦法,那就是本身寫攔截器。攔截住除開get和post的方法。爲啥不在web.xml配置這個?由於我試過了配置了以後我本身都登錄不上。
誰配置成功了能夠告訴我,我是拿如今這個6.0的tomcat毫無辦法。之後考慮升級到9.0。
寫攔截器去了,祝福我能成功。
 
ok,今天加了攔截器,成功幹掉了這個問題。
  1. <span style="white-space:pre">    </span> String method = req.getMethod();  
  2.         if(!"GET".equals(method)&&!"POST".equals(method)&&!"HEAD".equals(method))  
  3.         {  
  4.             log.error("The request with Method["+method+"] was forbidden by server!");  
  5.             response.setContentType("text/html;charset=GBK");  
  6.             response.setCharacterEncoding("GBK");  
  7.             resp.setStatus(403);  
  8.         response.getWriter().print("<font size=6 color=red>對不起,您的請求非法,系統拒絕響應!</font>");  
  9.             return;  
  10.         }  
<span style="white-space:pre">	</span> String method = req.getMethod();
        if(!"GET".equals(method)&&!"POST".equals(method)&&!"HEAD".equals(method))
        {
        	log.error("The request with Method["+method+"] was forbidden by server!");
        	response.setContentType("text/html;charset=GBK");
        	response.setCharacterEncoding("GBK");
        	resp.setStatus(403);
		response.getWriter().print("<font size=6 color=red>對不起,您的請求非法,系統拒絕響應!</font>");
        	return;
        }
在burpsuite上面驗證,也成功的反應出了正確的消息頭。
這裏請記住
  1. resp.setStatus(403);  
resp.setStatus(403);

 

否則是沒法經過AppScan的掃描的url

相關文章
相關標籤/搜索