|
今天在网上看到有人发了强制聊天的工具,是web版的,于是谷歌了一下。找到了由杨元公布在乌云网上的bug,顺便测试了一下,可惜腾讯已经修复了。(表面上腾讯忽略了杨元的报告), J/ x% T2 D/ V" w
在QQ空间中,有一个谁看过我的功能,然后我们把鼠标移到他们的头像上,会弹出一个信息卡片。
+ F! F9 \6 [+ h. T, `& a1 Q$ x: s. P7 ] A0 Z; O) i

7 v+ `0 ?8 a% u7 V) c
; u$ b8 a5 R4 l信息卡片上有一个聊天功能,也就是这个接口,出现了严重的bug。抓包发现聊天的接口为:
8 i6 x# c# ^' o( [; ^
( }% }. p* D. G$ J/ ahttp://r.cnc.qzone.qq.com/cgi-bin/user/cgi_tmp_talk?qzone_uin=20737302&to_uin=569550119&g_tk=1593160781
1 N4 u" g5 y* I( e2 e* q1 ^# X) @2 }9 G2 H: p/ o" ]# d n6 q6 g0 Q
里边有两个重要参数qzone_uin发起QQ(以下简称sender),to_uin接收QQ(以下简称receiver),指定这两个参数后,请求接口,返回信息如下:
. U/ L$ i$ L. s9 }8 v
4 m# k! ]4 J' D3 B9 j5 K( ^7 m' T9 Z5 U, g" `/ d
<script type="text/javascript"> -
+ l* t% }- t5 _) d- J. v<!-- - ) Y) @7 w# e: v
var url = 'tencent://message/?Menu=yes&uin=569550119&Service=112&SigT=ff8847c4116e035fd4b467f691cd9e42c0d413cec47eefb75d5e970421a2376ab400fffb0ea6cb8a&SigU=8a718a0cd8eba14b389fceb5788e72797b8a7eae107b9c43dd56bc7cc21090bccf67158b657963841c529232def3d416761799a1050acaaa29033f62f7fb46b5580fef571e7d82041508e926d65900ae77fae70b9cc4a341b7677c65b215d0327211235a5702bb6564157a3dfc11abe4'; -
: w# Y( d1 |( ilocation = url; -
7 `- D7 U( h; v6 d2 F//--> -
- </script> * E- N" Q9 \, ?& U
. ]& X* c( s$ M# b+ G* e1 U% L! M1 c2 I: @# J) o+ J8 X
这里边又有三个非常重要的数据,经过大量实践,发现:uin是接收人的QQ,SigT是receiver的指纹,SigU是sender的指纹。. B S4 y+ I& m
C% B% f t0 q( V, h% c由此可见,有了这两个指纹,然后访问tencent://message/接口,就可以发起临时会话。) c7 K9 u' U/ I% J) t' O
) v+ O# B9 G# j0 a. o$ P R
. M) C! i4 k- Y2 w6 { }$ ^4 o2 `1 Q. }
- J$ |3 W8 c" o6 {这里边又有三个非常重要的数据,经过大量实践,发现:uin是接收人的QQ,SigT是receiver的指纹,SigU是sender的指纹。
' x2 Q$ r& ?6 q9 V! x% n3 \9 t3 h, b4 F. Y6 @$ g3 L9 _/ y
由此可见,有了这两个指纹,然后访问tencent://message/接口,就可以发起临时会话。2 d* X, R9 L) A8 B2 O
6 F1 l1 M, h5 ~2 O( c2 b A那怎么实现强聊呢?; ?7 q4 r/ E8 h! |3 u* `
) m; T+ \: M- `9 I- W2 [* |小虫直接说结论,想强聊,必须知道自己一个好友的QQ号和被聊人一个好友的QQ号。这两个条件均不难实现,自己的QQ好友您还不知道么。。。而被聊人的QQ好友,也是很容易获取的,比如你想和你同班的美女聊,那么班主任的QQ就是切入点。
) W& K$ F0 t* M# I; x. X/ T0 t
# j8 V' V/ J# K+ v) i7 B' X为什么需要这么奇怪的条件呢?小虫直接演示。1 i( A& N( r/ I, G" Y- c" L- s
. Z4 B' i5 d: w
假设有四个角色,分别是A(发起人),AF(发起人好友),B(接收人),BF(接收人好友) H; w: F9 r$ C; }$ U' G8 q
$ \/ D$ e. ]! S7 K& h. O2 b, O n
第一步,我们需要在A和AF间建立一个通道,将A作为聊天的发起人,可以这样构造URL:" Y; r* B$ J# Z: C6 a L, K* }/ [6 L
$ p3 A) K5 P, N( B0 g1 \5 q
http://r.cnc.qzone.qq.com/cgi-bin/user/cgi_tmp_talk?qzone_uin=A&to_uin=AF&g_tk=1593160781: Z1 x- I* u& s
; E; ?4 K- L1 C
B1 Q. n& I& Q' i
在服务器返回的参数中,我们拿到SigU参数,这个也就是A作为sender的指纹。
0 R3 w# D* I# e: |' U; y3 }$ ^4 b: I: h. D5 a# |
第二步,我们在B和BF间建立一个通道,将B作为聊天接收人,可以这样构造URL:
- r8 R2 ]7 e2 j5 Q8 W4 z& Z
4 t% N. H% ]( G( f1 N3 H) b5 i5 N, `http://r.cnc.qzone.qq.com/cgi-bin/user/cgi_tmp_talk?qzone_uin=BF&to_uin=B&g_tk=1593160781# r; m8 f) g2 I8 [: i
# l, Y4 @9 t8 R8 M: S! ?$ x$ @! L4 c- q! }2 S* z
在服务器返回的参数中,我们拿到SigT参数,这个也就是 B作为receiver的指纹。
* t& r- z1 c2 f* a9 v* V/ ]3 h+ R& Z
接下来我们把这两个指纹混合在一起,访问tencent://message/接口(别忘了加上最基本的uin参数,接收人QQ),恭喜,可以聊天了!
* x% {: @/ v+ Z. ]$ i ? u
) w4 Q5 M3 \4 n8 f: ~6 u等等,好像有大问题,假如B和BF不是好友呢?我们并不能保证他们一定是好友,也就是说,我们是猜的。
" d u7 p8 D A' F6 x) f' V6 ~* m; Y4 F
" Z" P" t1 ?' L0 Q' e- x
6 N. X8 J* m) o2 ?' n聪明的你可能已经发觉了,这个接口可以测试两个QQ号码是不是好友(前提是被测者未开通QQ在线状态,如果一方开通了这个服务,可以尝试将sender、receiver反过来)!!!( Q4 [. ^ K, I5 u- g$ `
7 \4 u7 C7 V5 a6 ?4 B O# M2 U这是多么邪恶的接口!
% P& W5 w% @! t% s" {# F; S2 e0 I; _, ~3 j
不法分子可以通过这个接口收费帮别人测试好友,进而导致情侣隐私泄漏,夫妻感情破裂,进而导致社会不和谐,进而导致生产力下降,进而导致科技停止发展,严重阻碍人类进化。) A+ j7 V2 J6 A; j$ l9 C
0 V$ }( y% h+ |3 E+ l9 k
最后,补充一句,通过这个方法发起的临时会话,即使没有开启QQ在线状态服务也是可以的,除非你屏蔽了所有临时会话。
/ P. a* I' D# F/ X- K o- U5 S' E
$ z+ V. n3 f) b1 b; W! B' c |
|