只用15分钟,我黑进了这个异性交友网站

[ { "messageId": "b123738-5123-4123-9123-1232333b1234", "type": "CHAT", "value": "Hi Zed! I feel like I should send an interesting message but I'm all Mondayed out. How are you?", "createdTimeStamp": 1523914585468, "readTimeStamp": 1523914778123, "sender": false }, { "messageId": "ABC1235C-AABC-4ABC-8ABC-1ABC4EBC7ABC", "type": "SMILE", "createdTimeStamp": 1523883156123, "readTimeStamp": 1523886591123, "sender": true }]

好像还挺简单的嘛!

但我还不知道这个人是谁,也不能回复!事实上,这篇文章也是我那时开始提笔写的,因为我已经发现这个网站的安全性很有问题。

发送消息——能成功吗?

如果我想发消息,首先我得知道发消息的格式是什么样的。我从系统推荐的匹配列表里随便选了个人,向他发送了一则问候语:如果你是个名人,你想当谁?

与此同时,我保留了Chrome网络请求的日志。

理论上我们可以从刚创建的PUT和POST请求里找到规律,但出人意料的事发生了,我在里面找不到“famous”这个词,它是没有发送还是以另一种方式发送了,我不得而知。

为了找出原因,我继续查看刚才的POST请求,发现当我发送完信息后易语言没有源码能不能加网络验证,它多了一条payload:

{ "logs": [ { "logMessage": "Message Sent (Soft ACK) - on server sender", "method": "WEBSOCKET", "logLevel": "INFO", "additionalInfo": "{"messageId":"12351f23-fABC-4ABC-9ABC-ABCc123a0ABC","matchId":12309078132}" } ]}

WebSocket!太傻了,我居然没想到它是用WebSocket推送信息的。不过这也没什么大不了的,不就是多个WebSocket吗?

WebSocket检查

Chrome是个很神奇的东西,我们可以从网络标签页中找到websocket过滤器。我试了下,很幸运,这个网页只有一个websocket可监控。

Websocket框架

接着就是找到“famous”,然后慢慢破解。

额,不好意思,我没在WebSocket里找到这个词,我反复看那些即将发送的XML文件(这年头还在Websocket里用XML,也真是人才),完全没有头绪:

{“message”:{“messageId”:”84123ff6-f123-4123-9123-c123458a0abc",”type”:”CEQ”,”value”:”62"}}84123ff6-f123-4123-9123-c123458a0abc
12309078132

嗯,不对!好像摸着门道了!复制这段代码——

Simple Websocket客户端

安装Simple Websocket Client Chrome扩展,复制websocket URL,打开websocket连接,成功了!下一步:

现在我们离目标就差一个发送消息了。通过查看JSON payload,我们似乎可以从中找到一个消息对象,而预定义的消息有一个ID。

直接把消息改成“Hey there!”行吗?{“message”:”Hey There!”}

额,算了。

这看起来挺有趣的,它似乎是用一套预定义的ID来表示字符。不过既然用户会发送ID,那相应的,它们也应该一定存在哪个地方。我们来看一下预定义的消息列表。

我重新打开匹配对象列表发送了更多消息,检查HTML,发现该消息的ID是62。看到这里我知道自己错了,messageId是一些其他的东西,而62才是预定义消息的ID。

那么输入“CEQ”会发生什么?我该怎么设置?记得之前在查看GET请求时,我看到了这些东西:

只用15分钟,我黑进了这个异性交友网站,只用15分钟,我黑进了这个异性交友网站,第1张

也许我该把类型设置为“聊天”易语言没有源码能不能加网络验证,然后把这个ID数值替换为具体聊天内容。

它成功了,刷新页面后,我在收件箱下方看到自己发送了一则消息。

更进一步

现在我们可以在不购买会员的情况下查看用户资料、阅读他人留言、给来信者发送回复,那么接下来就是最后一个难题,我们能不能给任何用户发消息。就目前的情况看,除了websocket,其他地方都没有记录聊天对象数据,而前者分辨目标的依据好像就是用户填写的邮箱。

to=”123jnwrvd7_123gd2abcv12_12@chat.xyz.com”

要怎么获得这个标识符呢?我把扩展的配置文件信息复制到Sublime Text,在文本中找到聊天地址。啊,这是加密的用户ID!好的,我们来试试。

{“message”:{“messageId”:”84123ff6-f123-4123-123b-c6123e8a1230",”type”:”CHAT”,”value”:”Good evening Sophie! Haha already tired? Interesting messages are over-rated anyway ”}}

又失败了,这条消息被发送给了之前那个妹子。这次失败最大的收获应该是不能在打招呼时加上对方名字,这下就很尴尬了。不过我不是来撩妹的,我有任务在身!

经过长时间观察,我终于从这些ID和聊天地址里找到了问题所在,其实那些都是recourse ID:12309078132。

最后,我成功地把搭讪消息发送给了可爱的Sophie小姐姐。

为什么停手了

我知道大多数读者点进这篇文章的想法——看妹子。说实话,刚开始的时候,我也只是觉得这样试试会很好玩,但看到自己用这么简单的方法破解了那么多功能后,我就有些不知所措了。

之前说了,非会员只能看到经模糊处理的女生照片,而这些照片都在JSON数组中,它们的URL看起来是这样的:

https://images.xyz.com/photos/v2/photo/NORMAL/I1/d5abcttnp5yxjytb227v6fp56p.jpg?blur=60&crop=faces&fit=crop&g=2&h=160&ixlib=java-1.1.1&w=160&s=cda2e652b4182b123a1f5f6781daa36a

我试过改参数,结果只能得到一张空白图像。为了弄清参数设置,也许有人会愿意买个会员试试,但我不会这么做。

我走了一条捷径——对比自己的图片。

https://www.xyz.com/photos/v1/photo/THUMB/I3/1236VKj18jtm5Ih8Cr2pSAabc.jpg

我在jsonprettyprint.com上实验得到了图片的参数设计,如版本定义、大小定义等等。总而言之,我解密获得了这张图,希望图主人不要怪我在她脸上放了那么多东西。

道德启示

本文作者不是黑客,也不想搞破坏。但请试想一下,一个只想搞清Web工作机制的人靠着一个Chrome就把这个“智能”网站摸透了,这难道不值得用户警惕吗?

如果说上面只是介绍了怎么破解简单功能,那其实他也已经试过破解网站的核心“技术”了。我们不需要知道它的匹配模型是什么,只要不断去读取用户个人信息,看看他得到了哪些匹配信息,没有得到哪些信息,数据足够的话,这项工作就只是时间问题。事实上,获得他们的数据轻而易举。

这个交友网站的大多数安全措施都是在前端完成的,而不是后端。换言之,它就像一座有着高墙的城堡,里面没有一个守卫,还敞开着大门。我们不清楚用户们知道实情会怎么想,但估计没人会觉得开心。

Facebook的丑闻已经给了互联网行业一个警告——我们正处于一个特殊的时代,一个能轻而易举获得大量数据的时代。企业可以背靠含糊其词的隐私政策用技术随意收集,用户也会图一时便利出卖自己的信息。但如果你收集了数据,请你对此负责;如果你无法保护这些数据,那么请你不要再收集它们了。

欧盟的“通用数据保护条例”(GDPR)已经正式发布,当监管到位后,像这样泄露个人隐私的产品会遭受巨额罚款。国内的许多产品也已经在后台贴出有关GDPR的通告,虽然就目前而言,这样严厉的政策只在欧洲生效,但未来中国也会有严加整治的一天,可惜的是,现在社会的选择还是透支民众信任,把数据的价值压榨到鲜血流尽的那一天。

本文到此结束,希望对大家有所帮助!

关于作者:

生活百科常识网