获取乘客和车主的个人信息?这记Uber逻辑漏洞“组合拳”值得一看

2016-06-28 435495人围观 ,发现 15 个不明物体 WEB安全漏洞

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

uber-columbus.jpg

Uber前不久终于开放了它的漏洞奖励计划,并鼓励白帽子门展开对Uber在线服务的漏洞挖掘。请随着FreeBuf小编一起,来看看这几个逻辑漏洞形成的“组合拳”。

信息收集

首先我们先查看了Uber公司授权检测的目标。可以发现要检测的范围还是很广的,基本包含了Uber公司全部的在线服务。

https://*.uber.com/

http://*.uberinternal.com/ 

http://petition.uber.org

http://ubermovement.com

iPhone Rider Application

iPhone Partner Application

Android Rider Application

Android Partner Application

首先我先对uber的主域名做了一个暴力枚举。这一步主要是收集Uber公司域名下的全部二级域名信息。扫描到了几个开放的二级域名后,我又使用Nmap对全部的二级域名列表做扫描,主要是查看这些二级域名的网页标题,页面内容等。

1.png

先对Uber的APP进行反编译,然后又用MobSF来对Uber的APP做一个安全监测。

2.png

以上收集的这些信息已经足够我们做一个常规的安全监测。

漏洞挖掘

枚举优惠价代码

凡是使用Uber的人都知道Uber运行用户输入优惠券来抵押一部分车费,我查看了riders.uber.com后发现,这个页面上有一个付款界面。在付款界面里面又有一个优惠券代码的API接口。在实际测试过程当中我发现Uber公司并没有对这个API接口采取一些防枚举措施,这样导致黑客可以无限枚举优惠券代码。

3.png

在实际枚举的过程当中我们发现以下三个返回数据包的长度代表不同的含义

4.png

如果数据长度是1951,那么说明优惠券是有效的

如果数据长度是1931 ,那么说明优惠券并不存在

如果数据长度是1921 ,那么说明优惠券已经过期

并且Uber公司允许用户自定义自己的优惠码,凡是自定义的优惠码开头都会有一个uber字样,这样导致黑客可以枚举出超过1000个优惠券代码。

除了优惠券代码的枚举以外,我们还发现Uber公司之前推出的ERH优惠券代码可以重复添加。这个优惠券代码有100美元,原本已经被其他人使用过了,但是在枚举的过程当中我们发现不管这个代码有没有被使用过,只要你枚举到都可以使用。

5.png

然后我们联系了Uber公司,把这个漏洞提交给他们。

2016年3月23日 – 漏洞上报给Uber公司

2016年3月23日 – Uber开始审阅漏洞

2016年3月24日 – 我们更新了漏洞详情

2016年3月24日 – Uber公司继续审阅漏洞

2016年4月19日 – Uber公司已经修复漏洞

2016年5月2日 – Uber公司支付赏金

使用UUID查看用户注册邮箱

在下方的图片我们可以看到这是Uber APP上的一个帮助功能。不过说实话,我们大部分人从来都不会用这个东西,就算知道它一直存在也不会去点。但是我们不用不代表一些少部分的人不会去用。

6.png

如果你用这个东西向Uber公司发送一些帮助请求,它就会回复你“我们已经收到您的请求,我们将会尽快的联系你通过<你的注册邮箱>这个邮箱。”

7.png

通过分析这个请求的数据包后我们发现有两个参数决定了我们是否可以查看他人的邮箱,这两个参数分别为x-uber-uuid和uuid。通过对Token参数的fuzz,然后改变UUID为其他人的,之后你就可以收到别人的邮箱号了。

8.png

你也许有疑问我们是怎么获得这个UUID的?UUID那么长,很难枚举到。这个我们后面再解释。

2016年3月31日 – 漏洞上报给Uber

2016年3月31日 – Uber开始审阅漏洞

2016年4月11日 – Uber开始修复漏洞

2016年4月13日 – Uber公司支付赏金

枚举用户ID和电话号码

我们一直在尝试寻找Uber公司的漏洞,但是这些漏洞往往很难发现和利用。所以我们决定用APP和WEB分别叫一次Uber。在使用的过程当中,我们截获了全部的请求,并且发现了一些有意思的东西。

9.png

当一个Uber用户尝试平摊自己打车的费用的时候,Uber的APP会读取该用户的通讯录,并且区分出谁注册过Uber,而返回的数据包中包含了太多的信息,比如Uber司机的UUID,用户的UUID等。我们可以在这个请求的数据包中对电话号码进行枚举,随后就可以得到大批的UUID。我们就是通过这个方法来获取到UUID的!

10.png

11.png

但是不幸的是,当我们提交这个漏洞时Uber官方说漏洞提交重复了。有人在我们之前提交了这个漏洞。

2016年4月6日 – 漏洞上报给Uber

2016年4月7日 – Uber需要更多信息关于此漏洞

2016年4月7日 – 我们更新了漏洞的信息

2016年4月7日 – 漏洞提交重复,已经有人上报此漏洞

使用Uber司机APP并且无需激活

每个Uber账户都可以申请成为Uber司机,但是需要提供驾照信息,并且经过Uber官方的审核。但是我们发现一个方法可以绕过这个审核。如果你的Uber司机账户没有通过Uber官方的审核,那么你是无法使用Uber司机APP的。

12.png

这里有一个参数是allowNotActivated,如果你的账户未被激活,那么参数的值是false。

13.png

然后我们尝试把allowNotActivated中的false改成true,结果没想到我们成功的得到了Uber司机APP的访问权限。然而此时此刻我们测试的那个司机账户还未经过Uber官方的审核。

14.png

你可以看到我们成功访问的Uber司机的APP界面。

15.png

但是当我们提交这里漏洞时已经被Uber官方通知为漏洞重复提交。

2016年3月31日 – 漏洞上报给Uber官方

2016年3月31日 – Uber询问更多的漏洞细节

2016年3月31日 – 我们对漏洞细节进行补充

2016年4月7日 – Uber把该漏洞定义为重复提交,已经有人提交过该漏洞。

通过UUID查看Uber司机的历史旅程

Uber APP有一个新的功能叫做waybill。然而我们发现通过这个服务发送的数据包结合Uber司机的UUID,我们就可以知道这个司机上一次的行程信息。

16.png

但是我们是怎么获得Uber司机的UUID的呢?很简单,你先叫一次Uber服务,在司机接单后你取消这个订单,并且在取消订单的过程中抓包。在捕获的数据包里面就有Uber司机的UUID。不仅如此,这个返回的数据包里面还包含着这个Uber司机上一次的行程信息,比如从哪里开始接单的,车上的乘客姓名,乘客数量和乘客要去的地方等。这些都在这个数据包里面。

17.png

然后再把这个waybill填写上去,你就可以看到这个司机的车牌号,车的型号,司机姓名,驾驶路线等信息。

18.png

2016年3月31日 – 上报漏洞给Uber公司

2016年4月1日 – Uber公司开始审核漏洞

2016年4月13日 – Uber公司开始修复漏洞

2016年4月18日 – Uber公司支付赏金

越权查看他人行程信息

是否还记得第三个漏洞?我们通过伪造他人的UUID来获得他们的注册邮箱地址。

下面这个数据包截图是用户查看自己的行程的请求数据包。请注意查看这个数据包中红方框的信息,有木有一种很熟悉的感觉?没错,那个就是UUID。

19.png

当我们把这个UUID替换成其他人的UUID,返回的数据包中就包含他人的行程信息。

20.png

2016年3月31日 – 上报漏洞给Uber

2016年3月31日 – Uber开始审核漏洞

2016年4月5日 – Uber开始修复漏洞

2016年4月13日 – Uber发放赏金

*本文译者:ArthurKiller,编译自integrity,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

相关推荐

这些评论亮了

  • 北京大屌 回复
    @ 5毛钱 一眼看上去只是爆破、越权,要想想作者的思路,其中有不少连贯利用的思路值得借鉴的。
    )18( 亮了
  • @ 北京大屌 请问有些什么地方能学这些的?一直看别人爆破越权但是自己不知从何学起
    )11( 亮了
  • ArthurKiller (7级) 窃.格瓦拉驻FreeBuf办事处 回复
    @ ss 非常抱歉。。。。当时看到个GUI以为是图形化界面的意思,给搞错了,已经修改。 :???:
    )10( 亮了
  • kg chen 回复
    @ 我不信,除非你亲我一下 我亲你一嘴毛
    )9( 亮了
  • cf浩哥 回复
    我就想知道付了多少钱
    )9( 亮了
发表评论

已有 15 条评论

取消
Loading...

特别推荐

推荐关注

活动预告

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php