Write-up地址:How I Discovered XSS that Affects around 20 Uber Subdomains

作者:fady mohammed osman

总算回家了,完全没想到这次要外出一个月,今天开始恢复更新。


前几天忘记在哪里看到了这个write up的中文翻译了,当时也没看,今天打算写总结的时候刚好发现了这篇write-up,决定就是这篇了。

这个在uber发现的漏洞实现上是由logout时重定向引起的反射型XSS,是作者在分析uber的SAML功能时发现的,本来作者是打算做bypass SAML authentication的,但是没有成功,之后才转向分析其他可能的漏洞。

什么是SAML

在说SAML(Security Assertion Markup Language)之前,要先说一下什么是SSO(Single Sign-On),SAML是SSO的一种解决方案。

所有使用互联网的用户应该都知道登录是怎么回事,通过注册并登录一个网站应用,你就可以享受专门针对你个人的网站应用服务了。由于HTTP的无状态性,为了避免对一个网站应用的多次登录,网站应用会使用session ID(例如cookies)来标识用户,这样你只要登录一次该网站应用,在session ID有效期间就不需要再次登录了。但存在一个问题——cookies只在同一个domain下才有效。对于一个大型的网站,它可能有多个应用,而不同应用有不用的domain,这个时候使用cookies就不合适了。

于是就出现了一个解决办法,网站单独建立一个身份提供者(Identity Provider),该应用创建、维护并管理用户认证,而不同的应用作为服务提供者(Service Provider),当用户登录一个应用时,应用会根据用户的origin将其重定向到身份提供者那里,身份提供者验证用户身份,返回一个响应,告诉服务提供者用户是否验证通过,若验证通过,用户就可以使用该应用了。提供一个典型的应用场景,打开淘宝(https://www.taobao.com/)和天猫(https://www.tmall.com/)页面,这时候两个都是未登录状态,如果你这时候登陆淘宝,再刷新天猫页面,会发现天猫页面也是登陆状态。

实现SSO有多重方式,OpenID、Oauth和SAML等,这里要说的就是SAML,顾名思义,SAML是一个基于XML的开源标准数据格式,它规定了身份提供者和服务提供者之间交换认证信息等数据的数据格式,也就是说使用SAML,在应用向身份提供者请求验证用户时,两者之间是通过xml传递信息的。

漏洞发现过程

在作者对uber的子域名进行扫描收集时,发现很多内部域名都会被重定向到uber.onelogin.com进行身份验证,onelogin是一个统一访问管理平台,提供基于SAML的SSO,而之前在使用SAML的应用中已经存在一些身份认证绕过的漏洞,所以作者尝试寻找uber中是否存在这些漏洞,但是发现已经有人提交过了。

根据上面对于SSO的介绍,我们知道当用户访问一个uber的内部网站(https://carbon-prototype.uberinternal.com:443/)时,会被重定向到uber.onelogin.com,即有一个请求发向uber.onelogin.com,而登陆后uber.onelogin.com又会向内部网站返回一个响应,作者观察了发向uber.onelogin.com的请求,里面有一个使用base64编码SAMLRequest的参数,通过解码可以获得接收响应的URL(https://carbon-prototype.uberinternal.com:443/oidauth/saml_consume),这时作者再一次试图绕过身份认证,但是失败了,因此作者对oidauth/这个目录进行扫描,想看一下有没有其他有趣的文件或目录

./dirsearch.py -u https://carbon-prototype.uberinternal.com:443/oidauth/ -ejson

然后

https://carbon-prototype.uberinternal.com:443/oidauth/logout

这个页面吸引了作者的注意力,因为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。

最后作者通过脚本,找到所有接收SAML响应的网址,然后请求该域名下的oidauth/prompt目录,看是否存在该反射型XSS漏洞


1. 对一个新的应用进行测试时,可以看是否存在在其他应用中已经发现的漏洞

2. 为什么会想到目录扫描:在请求包的数据中发现一个oidauth/目录

3. logout功能可能存在XSS漏洞,值得进一步测试

【11.18总结】从SAML出发在重定向中发现的XSS漏洞的更多相关文章

  1. github javascript相关项目star数排行榜(前30,截止2016.11.18):

    github javascript相关项目star数排行榜(前30,截止2016.11.18): 前端开源框架 TOP 100 前端 TOP 100:::::https://www.awesomes. ...

  2. 日常Java 2021/11/18

    用idea实现Javaweb登录页面 <%-- Created by IntelliJ IDEA. User: Tefuir Date: 2021/11/18 Time: 18:14 To ch ...

  3. 沉淀再出发:java中线程池解析

    沉淀再出发:java中线程池解析 一.前言 在多线程执行的环境之中,如果线程执行的时间短但是启动的线程又非常多,线程运转的时间基本上浪费在了创建和销毁上面,因此有没有一种方式能够让一个线程执行完自己的 ...

  4. 18.翻译系列:EF 6 Code-First 中的Seed Data(种子数据或原始测试数据)【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/seed-database-in-code-first.aspx EF 6 Code-F ...

  5. 沉淀再出发:java中的HashMap、ConcurrentHashMap和Hashtable的认识

    沉淀再出发:java中的HashMap.ConcurrentHashMap和Hashtable的认识 一.前言 很多知识在学习或者使用了之后总是会忘记的,但是如果把这些只是背后的原理理解了,并且记忆下 ...

  6. eclipse安装activiti5.18.0工作流插件 以及安装过程中activiti插件出现的问题及解决

    转: eclipse安装activiti5.18.0工作流插件 以及安装过程中activiti插件出现的问题及解决 2017年05月04日 18:44:21 JJ_nan 阅读数:2773   版权声 ...

  7. 沉淀再出发:在python3中导入自定义的包

    沉淀再出发:在python3中导入自定义的包 一.前言 在python中如果要使用自己的定义的包,还是有一些需要注意的事项的,这里简单记录一下. 二.在python3中导入自定义的包 2.1.什么是模 ...

  8. 沉淀再出发:java中的CAS和ABA问题整理

    沉淀再出发:java中的CAS和ABA问题整理 一.前言 在多并发程序设计之中,我们不得不面对并发.互斥.竞争.死锁.资源抢占等等问题,归根到底就是读写的问题,有了读写才有了增删改查,才有了所有的一切 ...

  9. 沉淀,再出发:python中的pandas包

    沉淀,再出发:python中的pandas包 一.前言 python中有很多的包,正是因为这些包工具才使得python能够如此强大,无论是在数据处理还是在web开发,python都发挥着重要的作用,下 ...

随机推荐

  1. linux 权限管理命令chmod、文件和目录的权限的意义

    chmod /bin/chmod chmod [{ugoa}{+-=}{rwx}] [文件或目录]chmod [mode=421] [文件或目录]-R 递归修改 只有 root 和 所有者 可以修改一 ...

  2. redis介绍(4)实战场景

    redis我主要在两方面说明: 集群下的session的管理 Tomcat 与 DB之间缓存

  3. LeetCode题解之Flipping an Image

    1.题目描述 2.题目分析 使用C++的迭代器 3.代码 vector<vector<int>> flipAndInvertImage(vector<vector< ...

  4. leetCode题解之Product of Array Except Self

    1.题目描述 2.题目分析 每个元素对应的积应该是 它 前面的每个元素的积,和后面的每个元素的积 3.代码 vector<int> productExceptSelf(vector< ...

  5. AWK与SED命令

    linux系统比较常用的AWK与SED命令,这两个命令主要是格式化文本文件信息.接下来将详细介绍这两个命令的基本用法以及可以实现的功能. 一.AWK命令 AWK语言的基本功能是在文件或者字符串中基于指 ...

  6. Django之modelform简介

    在django中内置了form类和model类,当页面中的form值和model字段值完全一样时,此时可以通过model生成一个完全一样的form,Django中的modelForm就因此而生. 目标 ...

  7. Java简单方法批量修改Windows文件夹下的文件名(简单IO使用)

    package test.tttt; import java.io.File; import java.util.ArrayList; import java.util.List; public cl ...

  8. MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)

    15.4.2 Change Buffer(变更缓冲)   The change buffer is a special data structure that caches changes to se ...

  9. 【转载】http和socket之长连接和短连接

    TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. 在应 ...

  10. 资料整理,SQL Server ,面试前复习笔记

    T-SQL 要掌握的知识点分类 SQL 面向数据库执行查询 SQL 从数据库取回数据 SQL 在数据库中插入新的记录 SQL 更新数据库中的数据 SQL 从数据库删除记录 SQL 创建新数据库 SQL ...