Intro

本篇幫助自己快速釐清DNS/subdomain和VHOST的區別

差異

比較項目 DNS(Domain Name System) VHost(Virtual Host,虛擬主機)
所屬層級 網路層、名稱解析層 應用層(Web server 層,如 Apache/Nginx)
功能用途 域名解析為 IP 位址 根據 HTTP Header 中的 Host:分辨不同網站內容
作用位置 DNS Server(例如 8.8.8.8) Web Server(Apache、Nginx 等)
是否需要 IP 支援 需要,名稱最終會對應到一個 IP 地址 需要,但可多個 Host 共用同一個 IP
是否與 Web 有關 無需 Web 存在即可運作 專屬於 Web 伺服器處理請求
名稱出現在哪裡 使用者輸入網址、或由程式解析(如 dig, nslookup HTTP Header 的 Host: 欄位
是否需要設定在 DNS 中 是,否則網域無法解析 不需要(可不存在於 DNS,例如 CTF 中的隱藏站)
常見例子 example.combeta.example.com Host: admin.example.com 指向特定網站內容
查詢方式 dig, nslookup, ping, 瀏覽器直接輸入網址 curl -H "Host:", ffuf, gobuster vhost
是否可以多對一 每個名稱需個別對應 IP 或 CNAME 多個 VHost 可共用同一個 IP
與 HTTPS / 憑證關聯 是,證書需要對應正確的域名(SNI) 是,SNI 與 VHost 配合才能讓多 HTTPS 共用同一 IP
最多可幾層子網域? 沒有限制(總長度 ≤ 255 字元) 同上(但由 Web server 自己解析,不必有 DNS)
枚舉方式(滲透測試) Subdomain enumeration(用 dnsx, amass 等) Virtual Host 枚舉(用 ffuf, gobuster vhost 等)
是否能在 CTF 中隱藏資訊 DNS 中出現會被掃到 可以設為 DNS 不存在的隱藏 VHost,考驗滲透技巧

VHOST

虛擬主機又有兩種類別:Name-based 和 IP-based,其中 Name-based 比較常見。兩者的區別可直接通過下列配置看懂:

  • Name-based Virtual Host: 共用同一個IP
<VirtualHost *:80>
  ServerName www.example.com
  DocumentRoot /var/www/example
</VirtualHost>

<VirtualHost *:80>
  ServerName beta.example.com
  DocumentRoot /var/www/beta
</VirtualHost>
  • IP-based Virtual Host:使用不同IP
<VirtualHost 1.2.3.4:80>
  ServerName www.example.com
</VirtualHost>

<VirtualHost 1.2.3.5:80>
  ServerName admin.example.com
</VirtualHost>

簡單來說,Name-based虛擬主機是共用同一個IP,WebServer在同一個IP下根據不同Host劃分不同網站;而IP-based虛擬主機是直接使用不同IP對應不同網站。IP-based不常見的原因是因為要同時管理和擁有多個IP,花費大且沒必要,因此大多都是Name-based虛擬主機。在CTF中大多也都是Name-based虛擬主機因為通常來說都是給定一個domain要我們找關聯的VHOST。

總結

  1. 在CTF測驗中都是 VHOST,因為不太可能實際在DNS Server中塞這麼一筆資料並且對應真實存在的IP
  2. 在CTF測驗中不管是 DNS 或者 VHOST 都可以用 ffuf -H "Host: FUZZ.example.com" 來枚舉子域名或虛擬主機
  3. 簡單來說,DNS和VHOST的形式一樣,但背後表示的意義不同:DNS是用於將域名對應真實存在的IP,而VHOST則是WebServer用於在同一個IP下區分不同網站的手段

學習資料

  1. A Comprehensive Comparison between Virtual Hosts and Subdomains
  2. Apache IP-based Virtual Host
  3. Apache Name-based Virtual Host