网站地图    收藏   

主页 > 后端 > 网站安全 >

腾讯QQ强制聊天漏洞(也可以判断任何人好友关系

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] 腾讯QQ强制聊天是一个经久不衰的话题,今天小虫就提交一个关于强聊的bug吧,该bug可实现对任意QQ发起临时会话,细节不便透漏。。。所谓强聊,就是不经过对方同意,直接发起QQ会话...

腾讯QQ强制聊天是一个经久不衰的话题,今天小虫就提交一个关于强聊的bug吧,该bug可实现对任意QQ发起临时会话,细节不便透漏。。。
 
所谓强聊,就是不经过对方同意,直接发起QQ会话。
 
这个强聊的漏洞是由QQ空间引发的。
 
怀着严谨的态度,以下所有测试均是在测试QQ号码未开通QQ在线状态服务的前提下!开启了这个服务,就不用这么麻烦了,直接就能聊。
 
在QQ空间中,有一个谁看过我的功能,然后我们把鼠标移到他们的头像上,会弹出一个信息卡片,如图:
 
 
信息卡片上有一个聊天功能,也就是这个接口,出现了严重的bug。
 
点击聊天,抓包结果如下:
从图片中可以看出,聊天的接口为:
 
http://r.cnc.qzone.qq.com/cgi-bin/user/cgi_tmp_talk?qzone_uin=20737302&to_uin=569550119&g_tk=1593160781
 
 
里边有两个重要参数qzone_uin发起QQ(以下简称sender),to_uin接收QQ(以下简称receiver),指定这两个参数后,请求接口,返回信息如下:
 
<script type="text/javascript">
 
<!--
 
var url = 'tencent://message/?Menu=yes&uin=569550119&Service=112&SigT=ff8847c4116e035fd4b467f691cd9e42c0d413cec47eefb75d5e970421a2376ab400fffb0ea6cb8a&SigU=8a718a0cd8eba14b389fceb5788e72797b8a7eae107b9c43dd56bc7cc21090bccf67158b657963841c529232def3d416761799a1050acaaa29033f62f7fb46b5580fef571e7d82041508e926d65900ae77fae70b9cc4a341b7677c65b215d0327211235a5702bb6564157a3dfc11abe4';
 
location = url;
 
//-->
 
</script>
 
 
这里边又有三个非常重要的数据,经过大量实践,发现:uin是接收人的QQ,SigT是receiver的指纹,SigU是sender的指纹。
 
由此可见,有了这两个指纹,然后访问tencent://message/接口,就可以发起临时会话。
 
那怎么实现强聊呢?
 
小虫直接说结论,想强聊,必须知道自己一个好友的QQ号和被聊人一个好友的QQ号。这两个条件均不难实现,自己的QQ好友您还不知道么。。。而被聊人的QQ好友,也是很容易获取的,比如你想和你同班的美女聊,那么班主任的QQ就是切入点。
 
为什么需要这么奇怪的条件呢?小虫直接演示。
 
假设有四个角色,分别是A(发起人),AF(发起人好友),B(接收人),BF(接收人好友)
 
第一步,我们需要在A和AF间建立一个通道,将A作为聊天的发起人,可以这样构造URL:
 
http://r.cnc.qzone.qq.com/cgi-bin/user/cgi_tmp_talk?qzone_uin=A&to_uin=AF&g_tk=1593160781
 
 
在服务器返回的参数中,我们拿到SigU参数,这个也就是A作为sender的指纹。
 
第二步,我们在B和BF间建立一个通道,将B作为聊天接收人,可以这样构造URL:
 
http://r.cnc.qzone.qq.com/cgi-bin/user/cgi_tmp_talk?qzone_uin=BF&to_uin=B&g_tk=1593160781
 
 
在服务器返回的参数中,我们拿到SigT参数,这个也就是 B作为receiver的指纹。
 
接下来我们把这两个指纹混合在一起,访问tencent://message/接口(别忘了加上最基本的uin参数,接收人QQ),恭喜,可以聊天了!
 
等等,好像有大问题,假如B和BF不是好友呢?我们并不能保证他们一定是好友,也就是说,我们是猜的。
 
这一猜,就出大问题了!!!
 
 
 
上图我就猜错了,他们不是好友。。。
 
聪明的你可能已经发觉了,这个接口可以测试两个QQ号码是不是好友(前提是被测者未开通QQ在线状态,如果一方开通了这个服务,可以尝试将sender、receiver反过来)!!!
 
这是多么邪恶的接口!
 
不法分子可以通过这个接口收费帮别人测试好友,进而导致情侣隐私泄漏,夫妻感情破裂,进而导致社会不和谐,进而导致生产力下降,进而导致科技停止发展,严重阻碍人类进化。
 
最后,补充一句,通过这个方法发起的临时会话,即使没有开启QQ在线状态服务也是可以的,除非你屏蔽了所有临时会话。
 
 
20737302和1444390619强聊。
 
中间人649374916,这个号码既是20737302的好友,也是1444390619的好友。
 
就地取材,我用官方的接口证明20737302和1444390619不是好友。
 
 
构造sender指纹:
 
 
 
构造receiver指纹:
 
混合指纹信息,访问临时会话接口:
 


 
修复方案:
其实漏洞主要出现在这个接口上:
 
http://r.cnc.qzone.qq.com/cgi-bin/user/cgi_tmp_talk?qzone_uin=649374916&to_uin=1444390619&g_tk=1593160781
 
 
关键在于这个接口可以任意使用,输入什么QQ号都行,只要限制一下,让这个接口只允许当前登录的QQ发起即可,虽然说起来简单,但由于具体业务原因,可能很不好操作。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论