子域名劫持漏洞的挖掘指南、子域名劫持怎麼檢測

海子002發表於2020-12-14

HackerOne實時更新的公開漏洞推送Hacktivity訊息中,我們可以發現,其中的子域名劫持漏洞(Subdomain Takeover)佔比不少。自從2014年Detectify實驗室釋出了一系列子域名劫持攻擊姿勢的文章之後,眾測行業出現了大量此類問題相關的上報漏洞。

子域名劫持漏洞的基本前提可以大致的解釋為,發生了錯誤配置情況,對應主機指向了一個當前未在用的特定服務,這樣一來,攻擊者就能透過在該特定的第三方服務中註冊賬戶,宣告對該子域的接管許可權,由此,在該子域上部署網路服務,實現對該子域有目的的利用。作為一位白帽和安全分析師,我每天都會遇到這類漏洞問題。今天,我就來和大家聊聊子域名錯誤配置導致的子域名劫持漏洞相關的理解、挖掘、利用和上報,文章假設讀者具備了一定的DNS知識和子域名設定基礎。

子域名劫持漏洞介紹

如果你此前不瞭解子域名劫持漏洞,想從基本原理聽起,我這裡就設計了一個簡單的例項場景。在該場景中,假設example.com是你在參與漏洞眾測的目標網站,經過對example.com的所有子域名進行列舉之後,發現了其中一個子域名subdomain.example.com,該子域名錯誤配置指向了一個GitHub頁面。由此,我們可以先來看看該子域名的DNS記錄,在這裡假設該子域名所屬的GitHub頁面存在多條指向GitHub特定IP地址的A記錄:

$ host subdomain.example.comsubdomain.example.com has address 192.30.252.153subdomain.example.com has address 192.30.252.154$ whois 192.30.252.153 | grep "OrgName"OrgName: GitHub, Inc.

網頁訪問subdomain.example.com後,我們可以發現以下404響應頁面:

看到這裡,大多數白帽可能會覺得有戲了。這個404頁面表示,在域名對應網站的頂級根目錄下沒被註冊部署任何網頁內容,因此,我們可以嘗試去註冊把該子域名接管為我們個人的GitHub庫所有。但是,請注意,出現這種情況,並不代表所有對應的域名都存在劫持漏洞。因為有一些域名應用可能還需要檢查具體的HTTP和HTTPS響應情況,以此來判斷域名控制許可權,而另外有些域名就不存在劫持漏洞。

這裡,假設就存在子域名劫持漏洞吧。當我們把該子域名新增進入個人 GitHub 專案之後,就能把它部署上我們自己的Web內容了,也就是說,我們就能把子域名接管為我們自己所有了。如下可以讓subdomain.example.com指向任何你部署的網頁內容:

二階子域名劫持漏洞

這裡所說的二階子域名劫持漏洞,有點像過期壞鏈劫持(Broken Link Hijacking),這種情況下的子域名,並不屬於目標網站所有,但卻是用來執行目標網站的網頁內容的。也就是說,如目標網站網頁內容中某個資源需要從外部匯入的第三方資源,舉例來說,像js檔案一樣,那麼,攻擊者就可以透過JavaScript的Blob物件型別進行匯入,從而宣告對目標網站相關子域名的控制許可權。

這種在網頁頁面的主機劫持可以導致儲存型跨站漏洞,攻擊者可以針對目標網站頁面,利用這種模式來載入任意的客戶端程式碼。我在此提出這種威脅,就是希望我們不要把想像力只限制在子域名身上,還可以延伸到程式碼審查和目標網站的主機對映等方面。

像下圖網站中,存在匯入的第三方資源,那麼,能否存在subdomain.example.com可被劫持,從而我可以變換script.js實現對example.com的間接劫持呢?

當然,也要說明的是,如果你想對某個子網站域名進行劫持,那麼可以花點時間,去看看該網站上各個頁面中的第三方匯入資源是否能被劫持利用。

子域名列舉和探測

現在,我們對如何在錯誤配置的子域名上部署我們自己的網頁內容有了大致瞭解,接下來,我就來介紹發現漏洞子域名的各種技術、技巧和工具。

在深入之前,我們需要區分檢索( Scraping )和暴力猜解(Brute Forcing)的不同,因為這兩種方法都能幫助你發現子域名,但最終結果卻有所不同。檢索是一種被動的偵測方式,它利用DNS Dumpster和VirusTotal等外部服務和資源,來收集屬於某個特定主機的子域名。這種方式能快速檢索出外部服務資源中之前載入過的子域記錄,算是一種不費太多精力的子域名發現方式。如以下DNS Dumpster網站中記錄的reddit.com子域名情況:

檢索( Scraping )方式中不僅中以包含索引頁面,還可以新增進目標網站的GIT庫、內容安全策略頭、原始碼和漏洞跟蹤訊息等反饋源,只要你能想得到,檢索列表是非常之多的。我就經常更新我自己的檢索列表資源庫,反正你應用的技術越多越奇特,那麼最終你發現的結果也會與眾不同。所以,從這一點來說,在做漏洞眾測時,我們一定要具備創新精神。

Sublist3r算是檢索( Scraping )方式的一個簡單子域名發現工具了,它利用了輕量級的Python指令碼,從各種搜尋引擎、SSL證照和DNS記錄網站中來收集目標子域名。具體的安裝和應用

檢索( Scraping )方式中不僅中以包含索引頁面,還可以新增進目標網站的GIT庫、內容安全策略頭、原始碼和漏洞跟蹤訊息等反饋源,只要你能想得到,檢索列表是非常之多的。我就經常更新我自己的檢索列表資源庫,反正你應用的技術越多越奇特,那麼最終你發現的結果也會與眾不同。所以,從這一點來說,在做漏洞眾測時,我們一定要具備創新精神。

Sublist3r算是檢索( Scraping )方式的一個簡單子域名發現工具了,它利用了輕量級的Python指令碼,從各種搜尋引擎、SSL證照和DNS記錄網站中來收集目標子域名。具體的安裝和應用

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990085/viewspace-2741950/,如需轉載,請註明出處,否則將追究法律責任。

相關文章