开发者俱乐部

标题: Uber渗透案例:我们是如何发现你是谁,你在哪,你要打车去哪! [打印本页]

作者: true    时间: 2016-6-30 22:50
标题: Uber渗透案例:我们是如何发现你是谁,你在哪,你要打车去哪!
翻译的原文链接: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!









欢迎光临 开发者俱乐部 (http://xodn.com/) Powered by Discuz! X3.2