新技术论坛
搜索
查看: 1196|回复: 0
打印 上一主题 下一主题

[渗透实战] Uber渗透案例:我们是如何发现你是谁,你在哪,你要打车去哪!

[复制链接]
  • TA的每日心情
    慵懒
    2017-1-5 23:52
  • 签到天数: 183 天

    连续签到: 2 天

    [LV.7]常住居民III

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-6-30 22:50:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    翻译的原文链接:Uber Hacking: How we found out who you are, where you are and where you went!
    翻译可能有一些错误,欢迎交流和指正。
    也投稿到了wooyun知识库。
    “还能有什么比被授权渗透测试2016年最受关注的公司更令人兴奋的吗?”
    在Integrity团队中,我们喜欢接受挑战,所以一有空闲时间,就会鼓励大家去做研究或者是做些”破坏“,这是我们团队做之前做过的一些研究。
    我们(@r0t1v,@fjreis,@fabiopirespt)决定利用这段时间来做一些漏洞奖励计划的渗透测试。
    什么是漏洞奖励计划?维基百科中说的是:
    漏洞奖励计划(bug bounty program)是一个由许多网站和软件开发商提供的交易,使得个人可以通过报告bug来获得认可和奖金,尤其是那些涉及了漏洞和攻击。这些计划使得开发人员可以在对外公开之前就提早发现并处理这些bug,防止了更大的安全事件的发生。
    我们运气很好,Uber决定对外开放他们的漏洞奖励计划。在葡萄牙,由于的士司机的缘故,Uber几乎是一个每日新闻话题。所以我们参加了这个漏洞奖励计划。
    几小时后,当我们发现了两个任意网址跳转,我们马上就提交了。这可能是件好事(我们认为的),但是这两个漏洞都已经被其他安全研究人员提交过了。
    一开始这是有些让人失望,但是不能放弃,我们从头开始,并决定实施一些渗透测试的流程/方法。
    流程/方法为了实施渗透测试流程,我们回到Uber漏洞奖励计划并再次检查测试范围。可以看到包括如下所示的范围:



    1. https://*.uber.com/

    2.     http://*.uberinternal.com/ (后来才加入了计划)

    3. http://petition.uber.org


    4. http://ubermovement.com

    5.     iPhone 乘客版APP
    6.     iPhone 司机版APP
    7.     Android 乘客版APP
    8.     Android 司机版APP
    复制代码


    信息收集为了收集更多的关于Uber的子域名信息,我们使用了子域名枚举爆破。

    使用sublist3r进行子域名枚举
    随着所有子域名枚举完,剩下要做的就是使用nmap去检测banner、网页标题以及重定向。利用这些信息去exploit-db或者是其他博客匹配已公开的漏洞。
    对于手机APP,使用了jd-gui来读java源码,之后我们也会使用MobSF这个工具。

    jd-gui收集到的API细节
    现在,从我们收集到的信息来看,我们认为,这已经足够,可以开始寻找一些漏洞了。
    漏洞0×01 爆破riders.uber.com的促销码Uber有一项功能是允许促销码的使用。促销码先被分给其他用户或公司。**riders.uber.com**曾在付款页面有此功能,在添加了新的促销码后,我们把请求抓包,并发现应用程序并没有任何针对暴力破解的保护,从而帮助我们找到了许多不同的促销码。

    促销码页面-没有促销码
    下图说明了我们的爆破攻击。如之前所述,不同类型促销码被找到了,并可以通过它们的响应包长度来区别开。
    响应包长度:
    11951 – 有效促销码

    21931 – 无效促销码

    31921 – 促销码已过期




    爆破攻击
    Uber也给出了一个选项用以定制促销码,因为所有的默认促销码都是以“uber”开头,这能让爆破时间减少,这让我们找到超过了1000个有效促销码。
    最初这个问题不被认为是有效的,是因为促销码都应该是公开发布,是可以给予任何人的。这漏洞一直不被认可,直到我们找到他们(Uber安全团队)自己也未知的$100 ERH(紧急驾驶)促销码。这ERH代码和之前发现的代码都不同,即使已经使用了促销码仍然可以被重复使用。

    使用ERH代码的漏洞页面
    披露时间表
    2016年3月23日 – 把漏洞报告给Uber
    2016年3月23日 – Uber团队改变状态为:已知悉,但不认为是漏洞,忽略
    2016年3月24日 – 我们提供了新的漏洞信息
    2016年3月24日 – Uber团队改变状态为:开始修复
    2016年4月19日 – Uber团队改变状态为:已修复
    2016年5月2日  – Uber给了我们奖金
    0×02 可利用UUID获得邮箱地址正如你可以从下图中看到,在Uber乘客版APP里面有一个“帮助”功能,使用户可以直接发送问题来获得支持。说实话,我们很多人几乎从来不使用“帮助”,甚至不知道它的存在,但作为渗透测试人员我们不能说不知道有这个帮助功能。(后来我们发现,司机版APP中具有相同的功能)。

    帮助功能
    发送帮助问题后,服务器将会回复一条信息:“我们已经收到您的申请,并会通过<我的邮箱地址>尽快与您联系”。看到这条消息,我们觉得也许可以枚举爆破一些用户的邮箱地址。

    请求发送uuid代替token参数内容
    通过查看请求包发现有两个地方,在X-uber-uuid头和uuid参数,有uuid的信息。如果我们修改为另一个有效的UUID,可能会使我们得到其他用户的邮箱地址。我们尝试同时改变两个参数,但不幸的是,服务器还是返回我们原有的邮箱地址。虽然还有一个token参数,我们的第一个方法是fuzz一下这个参数,但最终我们通过将其更改为其他用户的UUID成功利用,这时有一些神奇的事情发生:Web服务器返回了新用户的邮箱地址。

    服务器返回uuid关联的邮件地址
    这有点难解释为什么token参数的内容可以替换为UUID,但它确实是可行的。
    由于应用程序未在此处限制我们的请求包,我们获得少量的UUID,由此我们能够得到UUID对应的邮箱地址。现在你可能会问:“你怎么能知道其他用户的UUID”,这在稍后我们会进行解释。 23333
    披露时间表
    2016年3月31日 – 错误报告给Uber
    2016年3月31日 – Uber团队改变状态为:开始修复
    2016年4月11日 – Uber团队改变状态为:已修复
    2016年4月13日 – Uber给了我们奖金
    0×03 枚举手机号码的UserID(撞洞)当开始挖掘漏洞,我们总是要试图去找到所有的APP/ Web的功能,尤其是那些不容易被发现或使用的功能。考虑到这一点,我们决定用我们的手机、电脑叫Uber,说干就干。在我们的行程中,我们抓下所有请求包,这些抓到的请求包中的一个,引起了我们的注意。

    邀请他人均分票价的请求包
    这个请求发生在当用户试图与其他人均分他的票价的时候。当邀请某人均分票价时,用户需要从自己的联系人列表中添加一个手机号码。
    这里的问题是,响应包泄漏了太多的信息,比如司机的UUID,受邀者的UUID和受邀者头像,甚至在对方接受票价均分之前就可以得到这些信息。
    你可以看到APP泄漏的信息如下图中所示:

    邀请用户导致泄露信息的响应包[1/2]

    邀请用户导致泄露信息的响应包[2/2]
    还记得我们之前说的,我们将解释我们是如何获取一批UUID的?就是这样子做到的!
    现在,随着这一漏洞加入后,配合前一个漏洞,我们可以得到关联了电话号码的任意人的邮箱地址。
    不幸的是,报告这个问题后,它被标记为**重复漏洞,撞洞了**。
    披露时间表
    2016年4月6日 – 漏洞报告给Uber
    2016年4月7日 – Uber团队改变状态为:需要更多信息
    2016年4月7日 – 我们提供新的漏洞信息
    2016年4月7日 – Uber团队改变状态为:重复漏洞、撞洞
    0×04 无需被激活就可使用司机版APP(撞洞)每个用户都能创建一个司机权限帐户,但它默认没有被激活,直到Uber验证完所有的你的司机资料之后才会激活司机权限账户。
    在开始测试司机版APP之后,我们才意识到,只能在激活流程之后才可以进入司机版APP。

    “司机账号未激活”的响应包
    找到上图中响应包的请求包的内容,你可以看到一个变量名为allowNotActivated的变量,它的值是false。

    修改了“allowNotActivated”参数值的请求包
    通过控制登录请求并改变allowNotActivated参数的值为true,就有可能获得有效的token。所以至少,这意味着甚至在该帐户未被激活的情况下,服务器也能创建一个有效的token。

    生成新token
    如响应包中所示,isActivated是被设置为false。修改为true我们就可以进入司机版APP啦。

    司机版APP界面
    现在,我们得到了几个新功能可以进行渗透测试。 开心~
    披露时间表
    2016年3月31日 – 漏洞报告给Uber
    2016年3月31日 – Uber团队改变状态为:需要更多的信息
    2016年3月31日 – 我们提供的新的漏洞信息
    2016年4月7日  – Uber团队改变状态为:重复漏洞、撞洞
    0×05 可通过司机的UUID查看司机运单利用之前的一个漏洞,我们能够测试被称为运单(waybill)的新的功能。通过修改APP发送的请求包,我们发现了一个未授权访问漏洞:在只知道司机的uuid的情况下,可以看到他的最后一趟发车细节。

    其他司机的运单的请求包
    你需要拿到司机的UUID。例如,打一个随机的Uber,让司机接受订单之后,你再取消。在此同时,你就能够获得司机的UUID。
    从这种请求的响应包,我们能够得到司机的名字,车牌,最后一趟行程乘客的UUID,最后一趟行程乘客姓名,乘客的数量,乘车的起点和终点。

    司机运单的响应包细节
    注意到此响应包中的“Trip #:”了吗?要获得行程的完整路径,我们另外探索了一个新功能,这个功能会返回行程完整路径,司机姓名,乘客姓名,车牌甚至连车型也会返回。
    这个功能不能在现在被公开,但只要我们一获得Uber授权,我们就会马上公开它。

    行程的完整路径
    披露时间表
    2016年3月31日 – 漏洞报告给Uber
    2016年4月1日  – Uber团队改变状态为:开始修复
    2016年4月13日 – Uber团队改变状态为:已修复
    2016年4月18日 – Uber给了我们奖金
    0×06 获得其他用户的详细行程还记得漏洞0×03吗?我们发现,我们可以通过UUID修改token,并以此来冒充其他用户。

    关联了uuid的行程的请求包(token)
    上图中的请求包允许用户查看自己的历史行程。请注意,在请求中没有任何会话头或会话cookie。所有会话细节都通过GET方式发送。
    通过改变红框高亮显示出的UUID并保持原有的token,则服务器返回一个403未经授权的访问。如果我们改变您希望看到的用户的UUID以及的token,就将会得到许多新的信息。
    这是当你访问行程页面时保持UUID和token值相同的情况下的响应包。

    关联UUID的行程列表
    由此可见,我们能够获得行程的日期,司机姓名和照片,uuid,行程的费用以及他去过哪里的地图。
    上图的响应包只是演示了单独一个行程,但完整的响应包会给出用户所有的行程信息。
    披露时间表
    2016年3月31日 – 漏洞报告给Uber
    2016年3月31日 – Uber团队改变状态为:开始修复
    2016年4月5日  – Uber团队改变状态为:已修复
    2016年4月13日 – Uber给了我们奖金
    渗透结果汇总撞洞的漏洞
    #漏洞报告时间
    1trip.uber.com任意URL跳转23/03/2016
    2riders.uber.com任意URL跳转23/03/2016
    3通过getrush.uber.com枚举用户并通过iOS版APP爆破登陆接口,从而获得可用账号26/03/2016
    4使用admin权限下载beta APP(IOS 乘客版APP)30/03/2016
    5未激活就可以使用司机版APP31/03/2016
    6使用手机号码枚举UUID06/04/2016
    已修复/未开放漏洞
    #漏洞报告时间奖金
    1通过riders.uber.com爆破促销码23/03/2016已支付
    2未开放24/03/2016等待中
    3未开放25/03/2016等待中
    4通过司机UUID查看司机运单31/03/2016已支付
    5通过UUID获得邮箱地址31/03/2016已支付
    6获得其他用户的详细行程31/03/2016已支付
    7未开放07/04/2016等待中
    8未开放13/04/2016等待中
    结论这是我们第一次参加漏洞奖励计划,我们真的奉献出了一段时间,我们认为这是有一个积极的结果。在开始的时候,我们对参加这个计划不太有自信,因为有很多人已经在私下测试过Uber了,但经过一段时间后,我们开始寻找一些厉害的漏洞,它给了我们继续坚持下去的动力,看看它能引领我们到哪里。
    对于那些刚刚开始进行漏洞奖励计划的人,我们的建议是:永不放弃,或害怕认为它是一个大公司,体会其中的乐趣,并尝试学习尽可能多技巧方法,奖金也会及时到来的。
    最后要注意的是,我们想说的是Uber应该给参与漏洞奖励计划的渗透测试人员提供测试帐号。在我们的测试过程中,也遇到过我们的帐户被锁定的情况,从测试性质和解锁账号来说,这是有一点悲剧的。在那一刻,我们试图与Uber支持团队交谈,他们并没有太大的帮助,所以唯一能做的就是尽量直接与Uber安全团队交流。在这种情况下,我们不得不说,他们是有帮助,而且是很大的帮助! (非常感谢你们所有人)。
    最后要说的是,我们认为Uber拥有最好的漏洞奖励计划之一,并有很高额的奖金。
    从渗透测试人员的视角看来,安全团队非常重视漏洞奖励计划,因为他们试图尽可能快的修复出现的问题。
    翻译的原文链接:Uber Hacking: How we found out who you are, where you are and where you went!




    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2025-1-4 00:37 , Processed in 0.322494 second(s), 18 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表