滲透測試嚮導—子域名枚舉技術
作為一名滲透測試者或專業的漏洞賞金獵人,大多數情況下,當開始測試時僅僅知道一個域名或一系列域名。但是我們必須要展開廣泛的偵查才能發現更多有意義的東西,例如伺服器、web 應用程序、屬於目標組織的域等等,以便有更多的機會發現漏洞。
我寫了篇介紹開源情報收集技術的博文,這種方法被廣泛的應用在偵查階段。
子域名枚舉是信息偵查階段中關鍵的一部分。本文以簡潔的方式介紹了幾種子域名枚舉技術。
在 Gitbook 上將發表這一主題的文章來深入探討這些技術。我們在2017年 Bugcrowd LevelUp 會議的「 Esoteric sub-domain enumerationtechniques 」 議題中也談到了這些技巧。
什麼是子域名枚舉?
子域名枚舉是查找一個或多個域的子域的過程。這是偵察階段的重要組成部分。
為什麼要進行子域名枚舉?
- 子域名枚舉可以在測試範圍內發現更多的域或子域,這將增大漏洞發現的幾率。
- 有些隱藏的、被忽略的子域上運行的應用程序可能幫助我們發現重大漏洞。
- 在同一個組織的不同域或應用程序中往往存在相同的漏洞。
子域名枚舉方法
- Google 和 Bing 等搜索引擎支持各種高級搜索來優化搜索查詢。這些搜索語法通常被稱為「Google dorks」。
- 我們可以在 Google 搜索中使用「site:」 關鍵字來查找某個域的所有子域。谷歌還支持額外參數來排除我們不感興趣的子域名,例如 「site:*.http://wikimedia.org -www -store -jobs -uk」,就排除了 www.wikimedia.org、store.wikimedia.org、jobs.wikimedia.org、uk.wikimedia.org 等域。
- Bing 搜索引擎也支持一些高級搜索。與 Google 一樣,Bing 也支持 「site:」 運算符,或許您可能希望排除 Google 搜索的結果。
2、 有許多擁有大量 DNS 數據集的第三方服務,可通過他們來檢索給定域的子域。
- VirusTotal 運行自己的被動 DNS 複製服務,它是通過存儲用戶提交的 URL 解析結果來建立的。為了檢索域的信息,你只需要在搜索欄中輸入域名
- DNSdumpster 是另一個有趣的工具,可以挖掘出指定域潛藏的大量子域。
- Sublist3r 是一個流行的工具,它使用各種資源來枚舉子域。通過諸如 Google,Yahoo,Bing,百度和 Ask 等許多搜索引擎來枚舉。Sublist3r 還使用 Netcraft,Virustotal,ThreatCrowd,DNSdumpster 和 ReverseDNS 等第三方服務來枚舉子域。
3、 證書透明度(Certificate Transparency,CT)是一個實驗性的 IETF 開源標準和開源框架,證書頒發機構(Certificate Authority,CA)必須將每個 SSL 或 TLS 證書發布到公共日誌中。SSL 或 TLS 證書通常包含域名,子域名和電子郵件地址。這使得它們成為攻擊者的信息寶庫。我在「證書透明度」一書中撰寫了一系列技術性博客文章,深入介紹了這一技術,您可以在這裡閱讀本系列文章。
使用收集 CT(Certificate Transparency)日誌的搜索引擎,是發現某個域證書最簡單的方法。以下是一些流行的搜索引擎:
1. https://crt.sh/
2. https://censys.io/
3. https://developers.facebook.com/tools/ct/
4. https://google.com/transparencyreport/https/ct/
我們編寫了幾個腳本來簡化使用 CT 日誌搜索引擎查找子域的過程。腳本在我們的 github 倉庫中可用。
使用 CT 進行子域枚舉的不利之處在於,在 CT 日誌中找到的域名可能不再存在,因此無法解析為 IP 地址。您可以使用像 massdns 這樣的工具,結合 CT 日誌來快速識別可解析的域名。
# ct.py - extracts domain names from CT Logs(shippedwith massdns)# massdns - will find resolvable domains & adds them to a file ./ct.py icann.org | ./bin/massdns -r resolvers.txt -tA -q -a -o -w icann_resolvable_domains.txt -
4、 基於字典的枚舉是另一種查找具有通用名稱的子域的技術。DNSRecon 是一個功能強大的 DNS 枚舉工具,它的一個特點是使用預定義的單詞表進行基於字典的子域枚舉。
$ python dnsrecon.py -n ns1.insecuredns.com -d insecuredns.com -D subdomains-top1mil-5000.txt -t brt
5、 置換掃描是識別子域的另一個有趣的技術。在這項技術中,我們使用已知域或子域的組合來確定新的子域。
- Altdns 是一個可以發現符合既定模式的子域的工具
$ python altdns.py -i icann.domains -o data_output -wicann.words -r -s results_output.txt
6、 找到自治系統編號(ASN)將有助於我們識別屬於某個組織的網路塊,該分塊可能具有有效的域。
- 使用 dig 或 host 來解析給定域的 IP 地址。
- 可以找到 IP 地址 ASN 的工具:
https://asn.cymru.com/cgi-bin/whois.cgi
- 可以找到域名 ASN 的工具:
http://bgp.he.net/
- 找到的 ASN 號碼可用於查找域的網路塊。Nmap 腳本可以來實現 :
https://nmap.org/nsedoc/scripts/targets-asn.html
$ nmap --script targets-asn --script-args targets-asn.asn=17012 > netblocks.txt
7、 區域傳輸是 DNS 的一種事務,DNS 伺服器將全部或部分區域文件的副本傳遞給另一台 DNS 伺服器。如果區域傳輸沒有被安全的配置,任何人都可以啟動一個名稱伺服器的區域傳輸並獲得區域文件的副本。在設計上,區域文件包含大量有關該區域和駐留在區域中主機的信息。
$ dig +multi AXFR @ns1.insecuredns.com insecuredns.com
8、 由於 DNSSEC 處理不存域的方式,可以「漫遊」 DNSSEC 區域並枚舉該區域中的所有域。你可以從這裡了解更多關於這個技巧。
- 對於使用 NSEC 記錄的 DNSSEC 區域,可以使用 ldns-walk等工具執行區域漫遊。
$ ldns-walk @ ns1.insecuredns.com insecuredns.com
- 某些 DNSSEC 區域使用 NSEC3 記錄,這些記錄使用哈希域名來防止攻擊者收集純文本域名。攻擊者可以收集所有的子域哈希值,並在線下破解哈希值。
- 像 nsec3walker這樣的工具可以幫助我們自動化收集 NSEC3 哈希和破解哈希。安裝 nsec3walker href="https://dnscurve.org/nsec3walker.html">之後,可以使用以下命令來枚舉 NSEC3 保護區的子域。
# Collect NSEC3 hashes of a domain$ ./collect icann.org > icann.org.collect# Undo the hashing, expose the sub-domain information.$ ./unhash < icann.org.collect > icann.org.unhash# Listing only the sub-domain part from the unhashed data$ cat icann.org.unhash | grep "icann" | awk {print $2;}del.icann.org.access.icann.org.charts.icann.org.communications.icann.org.fellowship.icann.org.files.icann.org.forms.icann.org.mail.icann.org.maintenance.icann.org.new.icann.org.public.icann.org.research.icann.org.
9、 有些項目收集互聯網的掃描數據,並將其提供給研究人員和安全社區。這些數據集是子域信息的寶庫。儘管在這個龐大的數據集中查找子域猶如大海撈針,但也是值得的。
- 正向 DNS 數據集作為 Project Sonar 的一部分發布。這些數據是通過提取來自多個源的域名並且給每個域發送 ANY 請求來收集的。這些數據是 gzip 格式的 json 文件。我們可以解析數據集來查找給定域的子域。數據集是很大的(壓縮後約 20 + GB,未壓縮約有 300 + GB)。
# Command to parse& extract sub-domains for a given domain$ curl -silent https://scans.io/data/rapid7/sonar.fdns_v2/20170417-fdns.json.gz | pigz -dc | grep 「.icann.org」 | jq
比較
我們用上面談到的方法來對 http://icann.org 進行檢測並比較一下不同方法帶來的結果。下面的條形圖展示了使用不同的方法找到唯一且可解析的子域的數目。與我們聯繫可以了解收集這些信息的方法。
整理和收集
我們為子域名枚舉技術、相關工具和一些資源做了個簡單的整理,將所有方法呈現出來方便查找使用:
https://gist.github.com/yamakira/2a36d3ae077558ac446e4a89143c69ab
參考
- https://github.com/appsecco/bugcrowd-levelup-subdomain-enumeration
- https://blog.appsecco.com/open-source-intelligence-gathering-101-d2861d4429e3
- https://www.databreaches.net/hackers-post-450k-credentials-apparently-pilfered-from-yahoo/
- http://info.menandmice.com/blog/bid/73645/Take-your-DNSSEC-with-a-grain-of-salt
- https://www.peerlyst.com/posts/bsideslv-2017-breaking-ground-with-underflow-bsides-las-vegas
原文:https://blog.appsecco.com/a-penetration-testers-guide-to-sub-domain-enumeration-7d842d5570f6
推薦閱讀:
※Kali Linux滲透測試介紹
※Acunetix Web Vulnerability Scanner 11批量添加掃描/刪除小腳本
※我所了解的內網滲透——內網滲透知識大總結
※38個信息安全項目列表