1.png

写在前面的话

本文所介绍的漏洞存在于一款当前热门的约会应用之中,在编写这篇文章时,我也已经对截图中可能会涉及到的App、组织以及用户名称进行了处理,因为我不想损害相关方的切身利益。

本文所涉及到的应用程序来源于一家创业公司,而且这家公司的经营状况也非常好。我出于教育目的编写了这篇文章,希望能够为安全社区贡献自己的绵薄之力。需要注意的是,本文所介绍的漏洞已经披露给了相关厂商,这些漏洞现已得到修复。

故事开始

我当时发现了一款热门的约会App,这款App拥有超过一百万的用户量。鉴于这款App受欢迎程度如此之高,我感觉它应该经过了严格的安全检测。尽管如此,但我还是打算尝试去寻找其中的安全漏洞。

跟很多App一样,这款约会App也有很多内购功能,这些功能可以帮助用户提高曝光率,发送各种自定义表情,修改位置,获得无限赞等等。除此之外,这款App还可以允许用户了解谁看过TA的资料,谁喜欢TA,以及谁给TA点过赞等等,不过这些功能都需要付费使用(App内购)。

在开始测试之前,为了拦截并分析网络流量,我使用Burp代理了我的移动端流量。下面给出的是当我访问我个人资料时所产生的网络流量信息(Burp):

2.png

在浏览我个人资料的时候,我发现这款App给女生所提供的匿名性程度要比男生要高。女生名字用的是缩写(只提供了姓名的首字母),而男生名称并没有使用缩写(直接给出了全名)。

这可不公平,可能是因为开发人员感觉男生更加擅长社工技术吧…

接下来,我发现了第一个漏洞。

1.    发现世界各地的“P友”

该功能可以让用户虚拟地在全球各地“旅游”,并允许用户随意更改地理位置,但是这个功能需要付费使用。

在更改地理位置时,Burp所捕捉到的请求如下图所示。请注意请求中的经纬度参数,你只需要将其中的经纬度参数修改成你所需要的值(地理位置),你就可以更改个人资料中的区域信息了。

3.png

姓名缩写确实给我带来了不小的麻烦,由于手中的信息非常有限,所以我的社工技术几乎无用武之地。不过我加了一把劲之后,姓名缩写的问题对我来说已经不再是一个问题了。接下来,便是第二个安全漏洞。

2.    获取任意用户完整的个人资料

正如你之前所看到的,当我跳转到我的个人资料页面时,Burp捕捉到的请求信息如下:

4.png

我的个人资料中显示了我的全名以及其他的很多信息,而这些信息是不会显示给其他用户的。请求中包含了我的UserID,而我做了一件绝大多数黑客都会做的事情,那就是将我的UserID修改成了其他用户的UserID。

不幸的是,啥都没发生…我得到了一条401未授权错误:(

5.png

我的目标用户个人资料如下图所示(出于隐私角度考虑,此处应打码):

6.png

就此看来,这款应用程序似乎没有不安全的直接对象引用漏洞(IDOR)。但是别着急,我们还有其他的方法!接下来,我尝试添加了另一个UserID参数,看看是否可以通过参数修改等方式来访问目标用户的个人资料。

非常好,这招竟然有用!

7.png

我拿到了这个美女的全名,现在我就可以在社交网站上发挥我的社工技术了。当然了,我还拿到了很多非公开信息:D

8.png

拿到了这些信息之后,我在Facebook上找到了她。

当我在这款约会App上检查她的个人资料时,我X!我竟然不小心把我所有的照片上传到了她的个人资料里…不仅如此,我的大部分信息也被复制到了她的个人资料中。这下可搞大了…

9.png

更可怕的是,我竟然没办法删除我的照片!这也就意味着,对她感兴趣的男孩看到的都将是我的照片,但名字仍是这位美女的…

10.png

在研究了一段时间之后,我找到了该问题的主要原因:这里有一个Payload在作怪。

11.png

解码后的Payload信息如下所示:

{"showInitials":false,"personalQuote":"","Album":[{"photoStatus":"APPROVED","objectId":"10201413175049192","imageOrder":0,"srcBig":"http:\/\/store.s3.amazonaws.com\/Pictures\/1020141317<redacted>.jpg","profilePic":true},{"photoStatus":"APPROVED","objectId":"10201801229<redacted>","imageOrder":1,"srcBig":"http:\/\/store.s3.amazonaws.com\/Pictures\/102018012<redacted>.jpg","profilePic":false},{"photoStatus":"APPROVED","objectId":"1020286084<redacted>","imageOrder":2,"srcBig":"http:\/\/store.s3.amazonaws.com\/Pictures\/1020286084<redacted>.jpg","profilePic":false}],"degree":[{"isSelected":1,"tagId":1,"tagsDtoType":"NONE","name":"NoInfo (update your linkedaccount)"}],"company":[{"isSelected":1,"tagId":215147778516386,"tagsDtoType":"USER_WORK","name":"<redacted>"}],"college":[{"isSelected":1,"tagId":2,"tagsDtoType":"NONE","name":"Don'tShow”}],"religion":[{"isSelected":1,"tagId":1,"tagsDtoType":"USER_RELIGION","name":"Hindu"}],"location":"<redacted>","height":"<redacted>''","showHeightType":"INCHES","tagsDtos":[{"tagId":"11","name":"Cricket","tagsDtoType":"SOME_TAG"},{"tagId":"84","name":"Painting","tagsDtoType":"SOME_TAG"},{"tagId":"85","name":"Sketching","tagsDtoType":"SOME_TAG"},{"tagId":"131","name":"FreeSpirited","tagsDtoType":"SOME_TAG"}],"isMutualFriendVisible":true,"designation":[{"isSelected":1,"tagId":1,"tagsDtoType":"NONE","name":"NoInfo (update your linked account)”}],"ethnicity":[]}

我将原来的http://store.s3.amazonaws.com\/Pictures\/1020141317.jpg替换成了其他图片的地址,并成功将这位美女个人资料中我的照片替换成了其他图片。

12.png

3.    读取任意用户的“搭讪”消息

使用参数污染的方式,我们将能够读取任意用户的搭讪信息。

13.png

4.    获取无限点赞

在浏览个人资料时,我发现我没办法点赞了。为了得到更多的赞,我需要等待10个小时。因为App规定用户只能获取一定数量的点赞…

14.png

在测试过程中,我捕捉到了下列请求:

你只需要添加目标用户的targetID,你就可以完成点赞了,而且不会受到次数限制。

5.    查看已跳过的用户资料

跟现在很多约X应用一样,这款约会应用当你滑过某个用户之后,你可能就很难再见到TA了。但是,这款App还提供了允许你查看已滑过用户的资料,还是一样,这同样是一个付费功能。。

我捕捉到的请求如下,你可以从中查看到已跳过的用户资料。

15.png

你只需要将UserID添加到请求中的targetID即可,而被跳过的用户资料将会被点赞。

16.png

如果你发现你找错人了,你可以使用下列请求来取消点赞:

17.png

6.    谁查看过你的资料

还是一样,这也是一个付费功能。当某人查看了你的资料之后,他们可以选择点赞或狂踩。如果TA喜欢你,你就会收到一条通知消息。

18.png

你可以看到,SK喜欢我…如果我也喜欢她(点赞),那我们就“配对”成功了。但是在你“喜欢”她之前,你没办法查看到她的资料,除非你付费了。

不过,你可以使用下列请求获取那些查看了你个人资料的用户信息:

19.png

非常好,我拿到了她的UserID。如果我给她点赞的话,我们就配对成功了。

20.png

你可以从响应信息中看到,我们已经配对成功了。

但是,这里还有一个问题:我只能跟喜欢我的人配对。那我们是不是可以尝试一下,让任何一个用户都“喜欢“我呢?然后我就可以选择我喜欢的,并跟她完成配对。

没错,这是可以实现的,还是通过参数污染来实现!

7.    选择任意用户实现配对

下面给出的是一次点赞请求的信息:

21.png

其中的5318415是我的actorID,如果我将我的actorID改成了其他用户的actorID,我将会得到一条401未授权错误响应。

22.png

还是使用参数污染,我添加了两个actorID参数,第一个actorID为目标用户的actorID。这意味着,5024700(目标用户)将会给5318415(我)点赞,而我将得到一条202接受响应信息。

23.png

是时候给她也点个赞了,这样才能完成配对。

24.png

配对成功啦!

在参数污染技术的帮助下,我就可以在一天时间里让100个美女喜欢我并跟她们配对成功啦!

25.png

漏洞披露时间轴

2017年7月4日:将漏洞提交给厂商;

2017年7月4日:漏洞报告已验证;

2017年9月5日:漏洞奖金到手;

* 参考来源:gaurangbhatnagar,FB小编Alpha_h4ck编译