本鱼拟成立工作室承接项目开发/软件定制/云设施开发运维/办公设备技术支持等,如您有相关需求,欢迎来询 | ::博客文章推荐::

你在腾讯网站上的所有资料很容易被他人获得,相信吗?(技术解析)

: 网络技术 木魚 5128℃ 13评论

话说曾经有个女生向我求助,很委婉地说她前男友找了新女友,满恩爱的,她看着很受伤,但出于好奇的心理,特别想去看看他那个所谓的『新女友』到底是怎么样的,QQ上问他又什么都不说,就问我能不能破解掉他的QQ密码,她想去QQ空间里看看照片。

当时我想了半天后很婉转地表示了遗憾,确实想不到什么好的办法(除了盗号以外)。今天之所以又想起来这个问题,是因为突然想到了一个解决办法。

 

-严重警告:本文出于研究目的编写,不对文中任何内容负责。

请勿擅自使用本文所述内容的全部或部分进行任何侵犯他人隐私的行为,

否则引起的一切后果以及法律责任,一概与本人无关。若有异议,请联系

本人: [email protected],并立刻停止阅读本文。

 

登陆QQ就有可能泄漏资料,你信吗?

 

一,问题的由来

题前的那个问题是一年多前的事情,本已经忘却。前段时间研究了腾讯的快速登陆,但是研究之后觉得没啥用就放弃了。今天突然想起来,哎呀,原来还能这么解决。

当然我是在困的时候考虑这些的——很长一段时间没睡好觉了,每天晚上虽然很困但是背一沾床就异常清醒还躁动不安的,生不如死,嗨,又不能起床,一起床的话可能就等天明才来倦意了,挺痛苦的。

呃,花边八卦咱不提。相信经常用QQ的人都看过下面这个快速登录:

图片

既然是快速登录,自然点击后就能登录到QQ空间(或其它相关网站上)而不需要再输入任何密码等资料。这个的确挺方便的——但是正所谓成也萧何败也萧何,咱今天的话题就由此展开。

 

二,快速登录是怎么实现的?

解释这个问题之前我们需要先了解密钥。

密钥:服务器验证你身份的道具。只要你手中和服务器手中握有相同的密钥,那么服务器就认为你是对应的人。当然,在整个服务器中,它会保证你的密钥是唯一且可确认的。

 

我们从登陆到QQ开始说起,看下图:

 图片

紫色的是腾讯的服务器,绿色框中的是QQ2009/2010客户端,橘色框中的是常规下的浏览器(假定,事实上不一定是)。

 

登陆QQ,QQ软件根据我们输入的帐号和密码去服务器端认证,登陆成功后握有密钥,并保持与服务器对话。密钥有很多个(这中间充斥着各种乱糟糟的混沌数学,我最讨厌的东西),但是我们今天用到的是快速登录中使用的ST密钥。

快速登录是如何实现的呢?腾讯的QQ软件维护了一个全局是SSO记录(单点登录),这是一个COM组件,可以通过ActiveX访问。网页中的js脚本就是通过创建这个组件来检测当前已经登陆的QQ号和ST密钥的。当检测到已经登陆了QQ,网页就会获得相关信息(这包括头像、性别、QQ号、昵称、ST密钥),并创建一个号码列表(如果你登陆了多个QQ的话,如果只有一个,那么会跳过这一步)由你选择,这就是前面你所看到的快速登录列表。你选择后,网页会通过你所选择的QQ号码、ST密钥发回给服务器,并在认证后获得网页会话密钥(skey)。在这之后,你和网页服务器之间的会话由SKEY来识别,前面的登录信息已经不再使用。因此,即使此时的QQ已经下线关闭,网页上的登录都不会超时。

 

为了验证上面的结论,这里使用网络嗅探工具拦截一个HTTP协议请求,这就是快速登录的过程:

图片

 

注意其中加了下划线的部分,左侧是发出去的请求,其中 『clientkey』就是我们所说的ST密钥,而之前的clientuin自然就是你的qq号码。这个请求返回的是302,证明已经通过了认证,下面返回了一个 skey=@xVChldBpc 就是网页会话密钥,它负责向网络服务器证明你的身份。

三,我们要注意到什么?

我们注意到,这个SSO组件是个COM组件,意味着任何程序都能访问它。下面这个截图是我写的一个测试程序,列表的是当前登录的QQ。注意第二个记录中下划线的部分,ST就是ST密钥,对比一下上面截图中的 clientkey ,你能想到什么?
图片

如果你想到了,那么恭喜你。其实这里就是可以说,任何程序都可以使用这个ST密钥去自动请求服务器,这样就会自动通过登录,而不需要你再去输入任何用户名密码。更可怕的是,这一切都是可以偷偷进行的——换句话说,只要你登陆了QQ,只要它愿意,它可以在后台用你的QQ悄悄干着所有的事情——登陆QQ空间,看日志,删日志,修改日志;查看你所有的好友,照顾你的一切QQ网游(包括QQ农场牧场QQ花园QQ校友;可以帮你去QQ秀商城里面买它喜欢的衣服;可以改你的资料;可以帮你加好友帮你删好友等等等等——唯独不能帮你改密码而已——而它做这些的时候,完全可以神不知鬼不觉,你根本不会发觉。

如果你觉得这就已经很恐怖了,那更恐怖的在后面。倘若它有兴趣,它完全可以用任何一个手段将这个ST密钥告诉任何它想告诉的人——这样一来,不管是谁只要知道你的ST密钥时你还没下QQ,他就可以立刻用它登陆到你的QQ空间,QQ校友,QQ秀等等任何他想去的地方,然后你所有的资料一览无遗,如果他有兴趣,他完全可以给你更改加点儿花边。

还有更可怕的吗?那当然。更可怕的是,即便是你发觉不正常,修改QQ密码、修改QQ密保都无法阻止别人通过这个方法登陆你的帐户——因为他根本不需要用你的密码。

 

幸运的是,这个方法使用上有个前提:他使用ST密钥时你必须没有下线或重新登陆。所以我们可以说:『那不上QQ就没问题啦!』

确实如此。

 

值得注意的是,这个手段没有任何限制,不需要提权也不需要确认,所以——任何程序都能做到泄露你的ST密钥,只要它愿意。

下图就是一个测试程序(需要.net Framework),运行后选择你的QQ号,点击『复制测试链接』发送给任何一个你信得过的朋友,你会发现,他不需要使用你的QQ密码就能登录到你的QQ空间,通过链接可以继续访问你的QQ校友,QQ相册,QQ……你能想到的QQ。
图片

再次警告:本文仅用作技术探讨,请勿擅自使用本文所述部分或全部内容窃取他人隐私!否则引起的一切后果均与本人无关!请保持高尚品质,尊重他人隐私!

 

本日志备份自 QQ 空间,原文地址:http://user.qzone.qq.com/286495995/blog/1269613956

喜欢 (3)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(13)个小伙伴在吐槽
  1. [ft=,2,]我顶。太尖端了吧。[/ft]

    孙庆新2010-04-07 11:31 回复
  2. [ft=,2,]果然是把双刃剑[em]e127[/em][/ft]

    王君一2010-03-27 12:01 回复
  3. [ft=,2,]我靠,表弟,你太牛叉了[/ft]

    周末爬山2010-03-27 01:11 回复
  4. [ft=,2,]都是浮云,恩亲一下1楼的mm[/ft]

    jojo2010-03-27 01:06 回复
    • 话说哥们儿,跑我地盘儿亲其它MM啊,这么不客气的说

      木魚2010-03-27 01:13 回复
    • 极限的MM得留给自己人啊

      jojo2010-03-27 02:23 回复
    • 极限的MM得留给自己人啊

      jojo2010-03-27 02:23 回复
    • [em]e140[/em]怪不得你这样不客气的

      木魚2010-03-27 02:24 回复
  5. 太专业了~我看不懂了~但是貌似很有用也很怕被用的感觉~

    2010-03-26 10:43 回复