靓嘟嘟

当前位置: 首页 >> 直播资讯

美女a站-15分钟,黑进相亲网站有多简单

2023年09月24日 靓嘟嘟

编者按:这几天,A站泄露900万条数据的新闻再一次席卷社交网络,让被波及的用户惊恐万分,也让人们再一次意识到数据安全距离自己有多遥不可及。结合此前Facebook的用户隐私泄露事件,虽然国内民众的安全意识正日益提高,但社会似乎还是没什么进步,毕竟百度都说了,我国公民在效率和隐私的问题上更宽容。

现在AI概念很火,用机器学习来“牵线搭桥”、促成“甜蜜定制”也不再是什么新鲜的广告,但在吹嘘新技术之前,我们是不得先看看,这些产品的安全性是不是够牢靠?唯有热点才能唤起关注和警醒,今天,论智给大家带来的是英国开发者Zaid Daba'een的经历:黑进流行异性交友网站。

作为一个普通人,我不喜欢那些所谓的相亲交友网站,手机里也没有装它们的APP。我试过,觉得不好玩,我还是更喜欢在现实中遇到感兴趣的人,然后鼓起勇气上前打招呼。

但这次,我为什么要注册账号呢?

不得不说,现在的交友APP宣传得太好了,它们喜欢用“科学”“智能”包装自己,给消费者一种全然不同的感官体验。面对这样的新技术,不感兴趣是不可能的,当然,我指的是它的工作机制。

注册账号是我们的第一步,你需要回答几十个关于自己的问题,然后他们会提供一些模糊的照片,告诉你:他们和你的匹配程度有95%,不考虑付费去更进一步吗?如果没有购买全套会员,你只能看看自己在交友网站上的匹配率,给别人点亮“微笑”,或是发送系统预定义的打招呼消息:

  • 如果你是个名人,你想当谁?
  • 如果生命只有一天了,你会干什么?

即便对方回复了,除非你肯付钱,你也不知道他们到底回复了什么,或者有没有继续和你深入下去的意愿。

这个交友网站的会员费是每月50英镑,只有开通会员的用户才可以浏览其他人照片、写留言。这样的收费标准不难理解,毕竟他们提供的可是“智能”服务。

我们开始吧

我觉得自己能做的第一件事是先看看这个交友APP的流量。我在iPhone上打开这个APP,然后在Mac上安装了一个代理服务器Charles,用服务器管理手机WiFi。

用户资料

很好,我们可以查看这位大姐自己填写的所有个人资料,虽然听起来有点毛骨悚然,不过没关系,反正APP里的用户都看得到——等等,他们就这么允许非安全站点传输用户资料吗?这也太……

上面还有一个模糊照片的列表,但还是没法看到高清照片,我们先把这件事放一放。

所有重要请求似乎都发生在SSL上,我激活了Charles的SSL代理服务器,并在手机上安装了证书。很可惜,这种方法行不通,连不到APP,他们似乎在这一块做得还不错,知道我没有正确的SSL证书,也知道这是一次中间人攻击。

SSL遍布全球

Web端应用程序

既然iOS的APP很难破解,那么我们可以换个角度,来试试Web端的APP。我登录了他们的网站,眼前是同样的界面、打了蒙版的美女照片和无法打开的收件箱。

相比手机,在Chrome上读取HTTPS请求就容易得多了!我用过滤选项卡筛选所有XHR请求,点击GET——当当,下图就是我刚收到的收件箱聊天消息。

明明有小姐姐回复我了

[ { "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,也真是人才),完全没有头绪:

  • 建立连接
  • 对websocket服务进行身份验证
  • 连接到Jabber客户端,并在XX和XX设置一些配置
  • 发送消息!
<message xmlns=”jabber:client” to=”123jnwrvd7_123gd2abcv12_12@chat.xyz.com” id=”84123ff6-f123-4123-9123-c123458a0abc" type=”chat”><body>{“message”:{“messageId”:”84123ff6-f123-4123-9123-c123458a0abc",”type”:”CEQ”,”value”:”62"}}</body><request xmlns=”urn:xmpp:receipts”/><data><accesstoken>84123ff6-f123-4123-9123-c123458a0abc</accesstoken><header name=”User-Agent” value=”Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"/><header name=”X-xyz-gdid”/><resourceid>12309078132</resourceid></data></message>

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

Simple Websocket客户端

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

  • 建立连接,好
  • 身份验证,棒
  • 连接到Jabber客户端完成设置,666

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

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

额,算了。<error code=’400' type=’modify’>

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

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

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

也许我该把类型设置为“聊天”,然后把这个ID数值替换为具体聊天内容。

<message xmlns=’jabber:client’ from=’1231234x95rjy-y27r7c8tjky@chat.xyz.com/android.phone.emulator’ to=’1231232yr2_3–6sgyt-c612337t@chat.xyz.com/android.phone.emulator’ xml:lang=’en’ id=’123f7–32' type=’chat’><data/><received xmlns=’urn:xmpp:receipts’ id=’81231236-f5ce-abcd-9abc-c6e12312312c0'/></message>

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

更进一步

现在我们可以在不购买会员的情况下查看用户资料、阅读他人留言、给来信者发送回复,那么接下来就是最后一个难题,我们能不能给任何用户发消息。就目前的情况看,除了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:<resourceid>12309078132</resourceid>。

最后,我成功地把搭讪消息发送给了可爱的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的通告,虽然就目前而言,这样严厉的政策只在欧洲生效,但未来中国也会有严加整治的一天,可惜的是,现在社会的选择还是透支民众信任,把数据的价值压榨到鲜血流尽的那一天。

  • 友情链接
  • 合作媒体