我是如何发现一个影响20个Uber子域名的XSS
风吹花 渗透测试 7002浏览 · 2019-03-18 01:17

前言

你好,我们又见面了,这是我的第一篇bug bounty文章,我一般不会单纯为了赏金去查找bug,特别是web bug bounties,但最近我对它非常感兴趣,所以我决定去查找UBER中的bug。

声明

在开始之前,如果您还不熟悉这个主题,我强烈建议您阅读有关SAML认证的文章,否则,您将很难理解这个bug。

你可以在这里阅读关于SAML的内容(https://developers.onelogin.com/saml)

信息收集

我开始收集相关资料,并且我注意到他们的内部系统都在此范围内(uberinternal.com的子域名),所以我开始执行子域名枚举,为此,我使用了aquatone,它发现了许多域名,并且收集了一些域名的截图。

需要注意的一点是,大多数内部域名都重定向到uber.onelogin.com进行身份验证。

众所周知,onelogin使用SAML身份验证,这非常有趣,因为在执行SAML的大量的应用程序中都发现了身份验证bypass,包括影响uber本身的一些bug,您可以在这里找到这些错误(https://hackerone.com/reports/223014以及https://hackerone.com/reports/136169) 。

我的第一个目标是寻找SAML身份验证bypass,我打算从uchat系统开始,但遗憾的是,有人已经找到了这个bug,这也不是我第一次因为时机不好而丢失了一个bug,所以没关系,让我们继续吧。

当您通过SAML登录时,将会向身份验证服务发送一个请求,在我们的案例中,这就是uber.onelogin.com,在登录之后,uber.onelogin.com将返回一个响应,以便成功登录应用程序,在这种情况下,我希望在whatever.uberinternal.com找到的是一个收到来自onelogin的相应的页面。

因此,让我们看一下调用一个需要身份验证的页面时发生的重定向,您可以在下图中看到它向uber.onelogin.com传递了经过base64编码的参数SAMLRequest

有一个在线工具可以让我们解码参数的值,并且我们可以看到这个链接将从uber.onelogin.com中接收响应。

此外,如果您想尝试使用burpsuite,还有一个很好用的SAML插件,它有一些非常好的功能来测试SAML。

这个插件很好,但是,我想批量地做到这一点,所以我创建了一个工具,可以获取URL列表和它们返回的SAML,你可以在我的GitHub帐户SAMLExtractor中找到这个工具。

接下来的事情是尝试bypass该链接上的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。最终它通过单击页面中的链接触发了XSS,并且因为该页面也容易受到点击劫持的影响,这意味着你可以在攻击场景中将两者结合起来(报告中对此进行了详细说明)。

批量漏洞挖掘

请记住,当我告诉您我创建了一个可以获取URL列表,然后返回回调URL的工具时,我决定向该工具提供所有uberinternal.com子域名,以查看是否有其他域名使用相同的库。最终我发现确实有其他域名使用。

我接下来要做的是创建一个脚本,它可以调用易受攻击的页面oidauth/prompt,并且尝试XSS攻击,如果我的输入被响应,则证明它存在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,在第一次提交之后,我发现了另外两个易受攻击的子域名,我在另一份报告中提交了这些子域名。

报告链接:
Reflected XSS on multiple uberinternal.com domains(https://hackerone.com/reports/326449)
Reflected XSS in https://eng.uberinternal.com and https://coeshift.corp.uber.internal/(https://hackerone.com/reports/354686)

赏金:

第一份报告 2k$
第二份报告 500$

原文链接:https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/

0 条评论
某人
表情
可输入 255
目录