架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9265|回复: 3

分析QQ快速登录协议 并实施“CSRF”

[复制链接]
发表于 2017-3-21 15:45:47 | 显示全部楼层 |阅读模式
众所周知,Tencent以前使用Activex的方式实施QQ快速登录,在一个陌生浏览器上使用,第一件事就是安装QuickLogin控件。
就在不知道什么时候,快速登录突然不用控件了。
当时很疑惑,Tencent用了什么奇葩的方法做到Web和本地的应用程序交互呢?

在没有插件的情况下,Web页面应该无法直接和本地的应用程序直接交互(除非定义协议,但也只能调起,不能获取程序提供的结果)。

在机缘巧合下(好吧就是闲着无聊看任务管理器发现了本机的httpd,发现Apache在运行的时候)突然意识到了一种可能:如果QQ在本地开了个端口,做了个Web服务器,也就是符合HTTP协议的TCP服务端,然后网页ajax向那个QQ(此时作为Web服务器)发起请求,是不是就可以获得结果呢。

结果真的就是这样,
062601za47zgnyyucgcyoz.png

网页JS向http://localhost.ptlogin2.qq.com(端口从4300-4308,一个个试试到成功)发起GET一个请求
ping一下就会发现是127.0.0.1,一查端口,确实是QQ在用。
152254j99kkhsnns44px9n.png
第一个请求:/pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk 来自cookie,管他是什么东西;r就是个随机数

返回的结果是个JSON数组:
var var_sso_uin_list=[{"account":"登录的QQ账号","face_index":-1,"gender":0,"nickname":"你的QQ昵称","uin":"还是你的QQ账号","client_type":66818,"uin_flag":8388612}];ptui_getuins_CB(var_sso_uin_list);

然后用http://ptlogin2.qq.com/getface来获取QQ头像,这里不做讨论

这样你的QQ信息就能显示在Web页面上了。

当你按下你的头像(选择这个登录的时候)

下列请求产生:
http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin=你的QQ号&callback=ptui_getst_CB&r=0.7293395590126179&pt_local_tk=399224727
同样的,r是随机数,pt_local_tk是来自cookie,local_token
这个请求做什么事情呢?
063755uu2itiugyiucyc2g.png

嗯,Set-Cookie。

然后继续请求
http://ptlogin2.qq.com/jump?clientuin=你的QQ号&keyindex=19&pt_aid=549000912&daid=5&u1=http%3A%2F%2Fqzs.qzone.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&pt_local_tk=1881902769&pt_3rd_aid=0&ptopt=1&style=40
这里唯一的u1就是目标地址

这个请求将返回所有需要的cookie,至此你就登录成功了。

那么学会了协议之后,就发现了一个很严重的问题:如果一个(黑心的)程序代替用户做了这些事情,会发生什么?

立刻动手!

手边只有Mac,于是用的是Obj-C写的。

[self GET:@"http://localhost.ptlogin2.qq.com:4300/pt_get_uins?callback=ptui_getuins_CB&r=0.47178753013324637&pt_local_tk=-1211438011" header:nil];
//这里的GET是我自己封装的一个方法,GET网页上的数据

注意:由于有之前做QQ机器人(基于WebQQ协议)的经验:Referer头是很重要的(必须是.qq.com的域名),一旦错误,必定失败。所以这里没绕弯子

By the way, 那个时候刚刚接触Obj-C,部分代码可能看起来有点蠢,请原谅。
//cookiedata是个NSDictionary




这样就完成了登录,随便找个QQ空间的接口(这里不贴出来了),发帖成功。

这意味着什么?意味着只要是本地运行的一个程序,完全有机会代替你完成QQ登录,并在QQ空间等不需要二次认证的平台做一些偷偷摸摸的操作




上一篇:知识普及:彻底搞懂CSS中单位px和em,rem的区别
下一篇:XDU Meter实时网速监控[源码]
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-3-21 16:36:43 | 显示全部楼层
我来做这个黑心程序员
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-3-21 16:44:46 | 显示全部楼层
小哲 发表于 2017-3-21 16:36
我来做这个黑心程序员

来来来  写个软件出来 让我观摩下
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2017-9-27 15:47:58 | 显示全部楼层
原文地址:https://www.52pojie.cn/thread-591949-1-1.html
请勿未经同意擅自转载,更请不要在转载时不标明出处。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-20 15:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表