Subdomain Enumeration

子域名枚舉是網路偵察(Reconnaissance)中的一個關鍵步驟,目的是找到一個主域名下所有相關的子域名,接著攻擊者就可根據子域名清單安排攻擊計劃。

想像一個大公司(例如 example.com),它可能會有許多不同的部門和服務,例如:

  • www.example.com (主要網站)
  • blog.example.com (部落格)
  • shop.example.com (線上商店)
  • dev.example.com (開發伺服器)
  • vpn.example.com (VPN 服務)

這些子域名可能託管在不同的伺服器上,擁有不同的安全配置。一個看似安全的網站,其子域名可能存在配置錯誤或舊版本的服務,從而成為駭客的突破口。因此,找到這些「隱藏」的子域名,對於滲透測試人員來說至關重要。

子域名枚舉用途

  • 擴大攻擊面(Attack Surface): 駭客可以透過子域名枚舉,發現主域名之外的潛在漏洞。
  • 發現被遺忘的資產: 許多公司會有未被更新或監控的舊子域名,這些「幽靈資產」往往成為未受保護的入口。
  • 獲取敏感資訊:dev.example.comstaging.example.com 這樣的子域名,可能包含測試資料、原始碼或未公開的服務,這些都可能成為敏感資訊洩漏的來源。

子域名枚舉的兩種主要方法

子域名枚舉可以分為兩大類:被動式主動式

1. 被動式枚舉 (Passive Enumeration)

這種方法不與目標伺服器直接互動,因此不會留下任何日誌記錄。它利用公開可用的資料來尋找子域名。

  • DNS 歷史紀錄: 像 VirusTotal、SecurityTrails 等網站會收集 DNS 歷史數據。查詢這些資料庫,可以找到過去或現在的子域名。
  • 空間搜尋引擎: Shodan、Censys 和 Fofa 等工具會持續掃描整個網際網路,並索引網站的 SSL 憑證資訊。許多子域名會共用同一個 SSL 憑證,因此透過查詢憑證上的 Subject Alternative Names (SANs) 欄位,就能找到相關的子域名。
  • Certificate Transparency (CT) logs:這些憑證通常在其主題備用名稱 (SAN) 欄位中包含關聯子網域的列表,從而為潛在目標提供了寶庫。例如:curl -s "https://crt.sh/?q=facebook.com&output=json"
  • Google Hacking (Google Dorks): 使用 Google 的 site: 運算符,可以強制搜尋 Google 索引中的特定子域名。例如:site:*.example.com

2. 主動式枚舉 (Active Enumeration)

這種方法需要直接向目標的 DNS 伺服器發送查詢請求,會留下記錄,但通常能找到更完整的結果。

  • 字典爆破(Brute-Force): 這是最常見的方法。工具會使用一個龐大的子域名字典(例如 wwwapimailadmintestdev 等),逐一對目標域名進行 DNS 查詢。如果查詢成功,就代表該子域名存在。
  • DNS 區域傳輸(Zone Transfer): 這是一種較少見的漏洞。如果 DNS 伺服器配置不當,攻擊者可以要求伺服器傳輸整個區域的 DNS 記錄,從而獲取所有子域名的完整列表。

常見工具

  • 被動式: AmassSublist3rSubfinder。這些工具通常會整合多種來源,如空間搜尋引擎和 DNS 歷史資料庫。
  • 主動式: MassdnsGobusterDNSRecondnsenum。這些工具善於進行字典爆破,並能快速有效地進行 DNS 查詢。

在實際的偵察工作中,滲透測試人員會將被動式和主動式方法結合使用,先進行安靜的被動式偵察,獲取公開資訊,然後再用主動式工具進行更深入的探測,以達到最完整的枚舉效果。


子域名枚舉指令

空間搜尋引擎

屬於被動式偵察方法,這些語法主要利用服務憑證(SSL/TLS)、主機名稱(host)或網頁內容來進行查詢

Fofa

Fofa 的語法簡潔但功能強大,主要依賴於 hostcertdomain 等關鍵字。

  • 查詢所有與主域名相關的主機這個語法會搜尋任何主機名稱中包含 example.com 的主機。host="example.com"
  • 查詢 SSL 憑證中的主體(Subject)這是尋找子網域最精確的方式。憑證主體通常包含主網域和通配符子網域(*.example.com)。cert.subject="example.com"
  • 查詢 SSL 憑證中的備用名稱(SANs)這個語法會查詢憑證中所有列出的主機名稱(SANs),這通常包含了所有子網域。cert.subject.cn="*.example.com" || cert.subject.cn="example.com"
  • 結合 domain 關鍵字domain 關鍵字可以直接指定要搜尋的網域,這是非常方便且常用的語法。domain="example.com"

Shodan

Shodan 的語法也非常直觀,主要使用 ssl 相關的過濾器來尋找憑證資訊。

  • 查詢 SSL 憑證的通用名稱(Common Name, CN)這是 Shodan 尋找子網域的標準方法。ssl.cert.subject.cn: "example.com"
  • 查詢 SSL 憑證的備用名稱(SANs)這與 Fofa 類似,能夠找出憑證中包含的所有相關網域。ssl.cert.sans: "example.com"
  • 尋找主機名稱(Hostname)這可以找出服務標語(banner)中列出的主機名稱。hostname: "example.com"

Censys

Censys 的語法更為精細,因為它會對每個服務的每個欄位都建立索引,所以你可以進行非常精確的查詢。

  • 查詢 SSL/TLS 憑證中的主體名稱services.tls.certificates.leaf_data.subject.organization: "Example Inc." 這會尋找憑證中組織名稱為 Example Inc. 的所有主機。
  • 查詢子網域名稱(Subdomain)這是 Censys 獨有的功能之一,可以非常直接地查詢子網域。services.dns.subdomain: "example.com"或者使用通配符來尋找所有子網域:services.dns.subdomain: "*.example.com"
  • 結合 hostname 查詢這個語法會尋找任何主機名稱中包含 example.com 的主機。services.http.response.request.host: "example.com"


dnsenum

一個開源的、用於DNS 枚舉的工具。它的主要功能是自動化收集目標域名相關的 DNS 資訊,以供後續的偵察和滲透測試使用。該工具從不同層面來收集目標的網路資訊:

  • DNS 記錄枚舉(DNS Record Enumeration):這是最基礎也是最重要的一步,讓你了解目標的網路架構。
  • 區域傳輸嘗試(Zone Transfer Attempts):這是尋找「配置不當」伺服器的關鍵。雖然成功的機率不高,但一旦成功,其回報是巨大的。
  • 子域名爆破(Subdomain Brute-Forcing):這是一種主動式偵察,能發現那些沒有公開在 DNS 記錄中、只有內部使用的子域名。
  • Google 爬取(Google Scraping):這是結合被動式偵察的優勢,利用 Google 索引來尋找公開的子域名。
  • 反向查詢(Reverse Lookup):這對於識別同一個 IP 位址上託管的其他域名(也就是虛擬主機)非常有幫助。
  • WHOIS 查詢(WHOIS Lookups):這能讓你了解網域的註冊資訊,有時可以發現聯絡人、地址等敏感信息。

指定想要列舉的目標網域: dnsenum --enum example.com


DNS區域傳輸

屬於主動式偵察方法,要求負責的DNS 伺服器完整區域傳輸。如果伺服器配置錯誤並允許傳輸,將收到該網域的完整 DNS 記錄列表,包括所有子網域

dig axfr @nsztm1.digi.ninja zonetransfer.me

; <<>> DiG 9.18.12-1~bpo11+1-Debian <<>> axfr @nsztm1.digi.ninja zonetransfer.me
; (1 server found)
;; global options: +cmd
zonetransfer.me.	7200	IN	SOA	nsztm1.digi.ninja. robin.digi.ninja. 2019100801 172800 900 1209600 3600
zonetransfer.me.	300	IN	HINFO	"Casio fx-700G" "Windows XP"
zonetransfer.me.	301	IN	TXT	"google-site-verification=tyP28J7JAUHA9fw2sHXMgcCC0I6XBmmoVi04VlMewxA"
zonetransfer.me.	7200	IN	MX	0 ASPMX.L.GOOGLE.COM.
...
zonetransfer.me.	7200	IN	A	5.196.105.14
zonetransfer.me.	7200	IN	NS	nsztm1.digi.ninja.
zonetransfer.me.	7200	IN	NS	nsztm2.digi.ninja.
_acme-challenge.zonetransfer.me. 301 IN	TXT	"6Oa05hbUJ9xSsvYy7pApQvwCUSSGgxvrbdizjePEsZI"
_sip._tcp.zonetransfer.me. 14000 IN	SRV	0 0 5060 www.zonetransfer.me.
14.105.196.5.IN-ADDR.ARPA.zonetransfer.me. 7200	IN PTR www.zonetransfer.me.
asfdbauthdns.zonetransfer.me. 7900 IN	AFSDB	1 asfdbbox.zonetransfer.me.
asfdbbox.zonetransfer.me. 7200	IN	A	127.0.0.1
asfdbvolume.zonetransfer.me. 7800 IN	AFSDB	1 asfdbbox.zonetransfer.me.
canberra-office.zonetransfer.me. 7200 IN A	202.14.81.230
...
;; Query time: 10 msec
;; SERVER: 81.4.108.41#53(nsztm1.digi.ninja) (TCP)
;; WHEN: Mon May 27 18:31:35 BST 2024
;; XFR size: 50 records (messages 1, bytes 2085)