綠盟對上線專案進行掃描,目標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>節點做如下配置:
- <Hostname="localhost"appBase="webapps"
- unpackWARs="true"autoDeploy="true"
- xmlValidation="false"xmlNamespaceAware="false">
- <Alias>10.1.8.158</Alias><!--10.1.8.158 本地區域網-->
- <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"
- prefix="localhost_access_log."suffix=".txt"resolveHosts="false"
- pattern="%a %A %b %B %h %H %l %m %p %s %S %t %u %U %v %D %T"/>
- </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請求攻擊驗證通過