导语:最近,我发现了一款流行的约会软件,该软件已经拥有100多万用户,如此庞大的用户群,引起了我对该软件安全性的强烈兴趣。
最近,我发现了一款流行的约会软件,该软件已经拥有100多万用户,如此庞大的用户群,引起了我对该软件安全性的强烈兴趣。
这款软件的主要功能是,如果你和对方相互“喜欢”的话,就算匹配成功,然后就可以开始聊天了。除此之外,它还提供了许多额外的功能,如了解谁看过你的个人资料、谁喜欢你,等等。但是要想使用这些功能的话,需要在应用程序中付费购买。
在本次安全测试的过程中,我将burp设置为中间代理,用来拦截移动流量。下面的内容,是我在访问自己的个人资料时候,burp拦截到的相关的流量。
在浏览个人资料的过程中,我注意到了一个现象,与男士相比,这款软件为女士提供了更高的匿名性。女士的名字将使用缩写形式(即名字和姓氏的第一个字母)。然而,男士的名字并没有使用缩写形式,相反,他们的个人资料中出现的都是全名。
看到了吗,这明显的不公平啊。也许,开发者可能认为男士是更好的社交工程师:D
后来,经过进一步的测试,我终于找到了第一个漏洞。
1.利用“Discover People across the Globe”功能
通过该功能,您就可以随意进行虚拟旅行,无论身在何处,都可以结交其他地方的朋友了。但是,这是一项付费后才能够使用的功能。
在浏览个人资料的同时,我在burp中发现了如下图所示的请求。如果仔细查看下面的截图,不难发现请求参数中含有与纬度和经度相关的参数。所以,我们只需将这两个值改为我们想要的位置,即可获得该区域的个人资料数据。
该软件使用的名称简写功能确实让我非常苦恼。因为,如果只有这些有限的信息的话,社交工程都难以实施。
经过一番努力,我很快就克服了这个问题,因为我又发现了另一个漏洞。
2.获取个人资料的完整信息
正如您之前所见到的那样,当我浏览自己的个人资料的时候,会用到下列请求:
我的个人资料不仅显示了完整的名称,同时还有许多不会显示给其他用户的信息。该请求包含了我的UserID,哈哈,我下面要做的事情可能大多数黑客都已经想到了:将自己的UserID改为别人的用户ID。
不幸的是……看起来没有什么效果!因为这里得到了一个“401 Unauthorized”错误:(
下面展示的是目标用户的个人资料页面。(为了保护个人隐私,我给照片打了马赛克)。
看起来,该应用程序似乎不存在直接对象引用漏洞。
别急!我们还有另一种方法。我们可以尝试添加另一个UserId参数来进行测试,看看是否能够通过参数污染访问受害者的个人资料。
耶!成功了 :)
这一次,我成功得到了女孩的全名。这样的话,通过社交网站进行社交工程就容易多了。除此之外,我还获得了很多不对外公开的信息。
在获取这些信息之后,就不难在脸书上找到她了。
我进一步考察了她在这个约会应用中的个人资料。然后,我还成功将自己的照片上传到了她的个人资料中。不仅如此,我的大部分信息都被复制到受害者的个人资料中。
但是,我却没有找到删除照片的方法。所以,男士们查看这位受害者的个人信息时会看到我的照片,但是名字却是一个女孩的名字。
我设法了解这个问题的根源,但是发现payload中的内容真是一团糟。
我解码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":"No Info (update your linked account)"}],"company":[{"isSelected":1,"tagId":215147778516386,"tagsDtoType":"USER_WORK","name":"<redacted>"}],"college":[{"isSelected":1,"tagId":2,"tagsDtoType":"NONE","name":"Don't Show”}],"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":"Free Spirited","tagsDtoType":"SOME_TAG"}],"isMutualFriendVisible":true,"designation":[{"isSelected":1,"tagId":1,"tagsDtoType":"NONE","name":"No Info (update your linked account)”}],"ethnicity":[]}
我用其他图片替换了http://store.s3.amazonaws.com/Pictures/1020141317.jpg,这样终于可以从她的个人资料中换掉我的照片了。
利用这个漏洞,可以从响应中查看她收到了多少个Crush(暗恋)消息。
接下来我们要做的事情,就是找到哪些人给她发送了Crush(暗恋)消息。
不久,我就发现了第三个漏洞。
3.阅读其他人的CrushText消息
同样,借助参数污染,我就能够读取任何人的Crush(暗恋)消息。 (嗯……让我看看你背地里干了什么:D)
4.获得无限的喜欢
在查看别人的个人资料时,我发现该软件分配的喜欢远远不够用啊!为了得到更多的喜欢,我需要等待10个小时以上。该软件只会分配给用户有限数量的喜欢,如果你用光了,那么你就只好等待系统再次分配了。
但是,在测试过程中,我偶然发现了下面的请求:
你只需要添加一个人的targetID,她就成为你喜欢的对象了。更重要的是,在次数上面,这个方法是没有限制的。
5.查看跳过的个人资料
这与Tinder中的倒带功能类似。如果您跳过了个人资料,则可以利用这个功能返回查看,然后继续。但是,这是一个专业版功能,就是说它是需要付费的。
我偶然发现了下面的请求,通过它可以查看跳过的个人资料。
在这里,我们只需挑选一个UserId并将其作为以下请求中的targetID的值。跳过的个人资料就成为自己喜欢的了。
如果向某个人误送了“喜欢”,不用担心,你可以随时使用下面的请求撤销相应的“喜欢”:
6.查看谁访问过自己的个人资料
该应用程序有一个功能,就是可以查看谁访问过你的个人资料。但不幸的是,这是一个付费功能。当有人访问自己的个人资料时,他们可以选择喜欢或不喜欢你。当访问者喜欢你的时候,你会收到一个通知,表示有人喜欢你的个人资料。
从上图中可以看出,SK喜欢我的个人资料。如果我也喜欢她,这就意味着匹配成功,我们就可以开始聊天了。然而,要想找到SK的个人资料是非常困难的,除非付费开通了查看访客的功能。
不过,你可以使用以下请求查看自己的访客:
太棒了!我终于找到她的UserId了。这样的话,我也可以给她发送一个“喜欢”。然后,匹配就成功了。
正如你在响应中看到的,匹配成功!
但是,这里还有一个问题。我只能跟已经喜欢我的人互相匹配。我觉得,如果能够让所有人都喜欢我,然后我再向她们发送"喜欢",这样的匹配方式难道不是更好一些吗?
别急……这些很快就会成为现实,这还得借助于参数污染!
7.与自己任选的个人资料进行匹配
以下是用于喜欢任意个人资料的请求。
在这里,5318415是我的actorId。 如果将我的actorId替换为其他人的ID,会收到“401 Unauthorized”错误。
所以,再次使用参数污染,就能够发送一个真正的请求。 我添加了2个actorId参数,其中第一个actorId参数是目标的actorId。 所以,这意味着,5024700(受害者)会喜欢5318415(我)。这次得到的响应是202 Accepted。
然后,我再向受害人发送一个喜欢,这样匹配就成功了。
就像上面看到的那样,匹配成功!:)
因此,使用参数污染,我可以在一天内与100多名女孩匹配成功;)
披露时间表:
2017年7月4日:将漏洞报告给供应商
2017年7月4日:漏洞报告被确认
2017年9月5日:收到赏金