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