嗨,你好!
歡迎來看我寫的我的第一個漏洞賞金,我不是天天去做漏洞賞金任務,特別是網路漏洞賞金,但它最近開始引起我的興趣,所以我決定開始在Uber中尋找漏洞。
我開始收集關於的Uber信息,我注意到它們的內部系統在某個域名範圍中(http://uberinternal.com的子域),所以我開始執行子域枚舉,為此,我使用了aquatone,它發現了許多域,並收集了一些域的截圖。
需要注意的是,大多數內部域都重定向到http://uber.onelogin.com用於認證登錄。
眾所周知,onelogin使用SAML身份驗證,這非常有趣,因為在實現SAML的應用程序中發現過大量驗證繞過漏洞,包括影響uber本身的一些漏洞。
我的第一個方向就是尋找SAML身份繞過漏洞,信不信由你,我本來打算從uchat系統開始,但是很遺憾,有人比我先發現了漏洞,這不是我第一次因為時機不對而丟失漏洞,所以沒關係。讓我們繼續前進。
當您使用SAML登錄時,一個請求被發送到身份驗證服務,在我們的例子中是域名http://uber.onelogin.com,一旦成功登錄http://uber.onelogin.com,它將會返回一個響應給指定的任意http://uberinternal.com的子域名,我感興趣的正是從Onelogin返回的響應頁面。
因此,讓我們看一下在調用需要身份驗證的頁面時發生的重定向,您可以在下面的圖像中看到,它向http://uber.onelogin.com傳遞了一個經過base64編碼的SAMLRequest參數。
要解碼返回參數的值,只需要一個在線工具,我們可以看到從http://uber.onelogin.com接收的響應中的鏈接。
此外,如果你想嘗試一下,burpsuite還有一個好的SAML插件,它也有一些很好的先進的特性來測試SAML。
以上所述雖然很好,但是,我想做大量的目標測試,所以我創建了一個工具,收集一個URL列表,並返回URL對應的SAML,你可以在我的GITHUB帳戶找到工具SAMLExtractor。
下一步是嘗試繞過那個SAML認證,但是我運氣不夠好,所以我決定做別的事情,我決定搜索一下oidauth/目錄,看看有沒有更有趣的文件,因為我通過下面的命令使用dirsearch。
./dirsearch.py -u https://carbon-prototype.uberinternal.com:443/oidauth/ -ejson
在執行目錄暴力破解之後,我找到了下面的頁面:
https://carbon-prototype.uberinternal.com:443/oidauth/logout
這是一個註銷頁面,但為什麼它很有趣呢。因為很多開發人員在註銷頁面中實現重定向,有時您可以在其中找到XSS漏洞,因此我打開了上面的鏈接,它將我重定向到以下頁面
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
其中base參數是獲取一個URL,那麼用經典javascript:alert(123)替換它,好看看它是否可以觸發XSS?它通過單擊頁面中出現的鏈接來觸發,並且同時因為該頁面也容易受到點擊劫持的攻擊,所以這意味著您可以在攻擊中結合這兩個漏洞來利用(這在報告中詳細解釋)。
記住前面我告訴您我創建了一個工具,該工具可以獲取URL列表,然後返回回調(SAML)URL。我決定向該工具提供http://uberinternal.com的所有子域,看看是否還有其他域使用相同的庫。
接下來,我創建了一個腳本,調用存在漏洞的頁面oidauth/prompt,嘗試XSS攻擊,如果攻擊生效,它就會給我一個存在漏洞的消息。
import requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) from colorama import init ,Fore, Back, Style init()
with open("/home/fady/uberSAMLOIDAUTH") as urlList: for url in urlList: url2 = url.strip().split("oidauth")[0] + "oidauth/prompt?base=javascript%3Aalert(123)%3B%2F%2FFady&return_to=%2F%3Fopenid_c%3D1520758585.42StPDwQ%3D%3D&splash_disabled=1" request = requests.get(url2, allow_redirects=True,verify=False) doesit = Fore.RED + "no" if ("Fady" in request.content): doesit = Fore.GREEN + "yes" print(Fore.WHITE + url2) print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + doesit)
之後,我核實了存在漏洞的頁面,並將第一份報告發送到Uber,在第一份報告之後,我有發現了兩個以上易受攻擊的子域,又發送了一個單獨的報告。
來源:我是如何發現影響約20個Uber子域的XSS漏洞的|NOSEC安全訊息平臺 - NOSEC.ORG
白帽匯從事信息安全,專註於安全大數據、企業威脅情報。
公司產品:FOFA-網路空間安全搜索引擎、FOEYE-網路空間檢索系統、NOSEC-安全訊息平臺。
為您提供:網路空間測繪、企業資產收集、企業威脅情報、應急響應服務。