1. 程式人生 > >綠盟對上線專案進行掃描,目標URL存在http host的頭攻擊漏洞,解決方案和驗證

綠盟對上線專案進行掃描,目標URL存在http host的頭攻擊漏洞,解決方案和驗證

近期在使用綠盟對線上專案進行安全掃描時,發現系統存在host頭攻擊漏洞。在此記錄解決的過程以便後期回顧


上述問題出現的原因為在專案中使用了 request.getServerName 導致漏洞的出現 

不要使用request中的serverName,也就是說host header可能會在攻擊時被篡改,依賴request的方法是不可靠的,形如JSP頭部中的:

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+

"/";

這樣的使用方法就會被漏洞檢測工具查出來,認定有頭攻擊漏洞。

修復方案:

【基於tomcat的修復方案】

開啟tomcat的conf目錄中的server.xml檔案,在<Host>節點做如下配置:

  1. <Hostname="localhost"appBase="webapps"
  2.             unpackWARs="true"autoDeploy="true"
  3.             xmlValidation="false"xmlNamespaceAware="false">
  4.           <Alias>10.1.8.158</Alias><!--10.1.8.158 本地區域網-->
  5.    <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"
  6.               prefix="localhost_access_log."suffix=".txt"resolveHosts="false"
  7.               pattern="%a %A %b %B %h %H %l %m %p %s %S %t %u %U %v %D %T"/>
  8. </Host>

此種方式僅支援Tomcat6.0.x以上版本的修復、網上有基於Filter的修復方式,試了幾個都沒起用。

漏洞驗證

修改完server.xml後需要重啟Tomcat服務,使用vim命令檢視檔案內容 確認是否已修改

所需工具:burpsuite、360

漏洞修復的步驟:

1.需要安裝burpsuite工具 burpsuite 為滲透測試工具 具體介紹自行百度

2.設定360的代理,為後續抓包使用

3.在Proxy頁面訪問漏洞連結時使用burp抓包,右鍵將抓到的資料包傳送到repeater,切換到repeater選項卡點選go,檢視返回的內容

4.在Proxy頁面將抓到的資料包再次右鍵傳送到repeater,修改host的值,點選go,檢視返回結果

判斷:若是修改host值後,返回的結果不一樣,則存在host頭攻擊漏洞,反之一樣則不存在。

修改host baidu.com後,如果響應包返回400 則是不存在的

具體驗證步驟:

1.設定360瀏覽器代理:


360瀏覽器:工具->代理伺服器->代理伺服器設定


設定好代理:127.0.0.1:8080 -> 確定

2. Burpsuite下載:

http://www.vuln.cn/8847   

3.開始抓包驗證漏洞

抓包方法參照http://www.vuln.cn/8847 介紹

未修改server.xml前驗證結果:

抓包:


將抓包結果傳送至repeater,進行響應結果的檢視  返回200



再次將抓包結果傳送至repeater,修改其Host後進行響應結果的檢視: 依然成功



修改server.xml之後再次進行漏洞測試:

抓包:


將抓包結果傳送至repeater,進行響應結果的檢視:返回200


再次將抓包結果傳送至repeater,修改其Host後進行響應結果的檢視: 返回400


結果:修改其host請求頭之後,響應失敗。

修改host後請求結果為400     host請求攻擊驗證通過