使用request.getServerName() 可能被操縱 容易產生跨站漏洞(檢測到目標URL存在http host頭攻擊漏洞)

本文主旨總結:使用request.getServerName()的請注意  這個方法的數據來源是不可信的可能被操縱 容易產生跨站漏洞

作爲一個快樂的補鍋匠,這次補鍋是真的快樂,因爲解除了一個拿到手一臉懵逼,然後慢慢了解的一塊內容:安全漏洞。當然是綠盟掃描出來的了。廢話不多話,講重點。

首先綠盟掃描出來的漏洞是這樣的:檢測到目標URL存在http host頭攻擊漏洞

如下圖:

大概意思就是如果人家改了下host,就可以調到人家指定的網址了(淺入理解,大神看到一定要指點我下。)

比如這樣:curl -H 'Host:www.zujuge.com' http://127.0.0.1:8080/import

得到的就是一個跳轉頁面,因爲這個import不存在啊。而跳轉頁面包含如下代碼

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println(request.getScheme());
System.out.println(request.getServerName());
System.out.println(request.getServerPort());
%>

<script type="text/javascript">
      window.top.location.href="<%=basePath %>login.jsp";
</script>

也就是說request.getServerName()獲取了密令訪問時候塞的host值,所以導致跳轉到不屬於本服務的網站。

解決方法簡單,直接把<%=basePath %>換成<%=path %>

這個挺有意思的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章