为什么你的微博被盗用了

太空小孩   ·   2013 年 10 月 22 日

开门见山回答两个微博上的问题:

  • 为什么我的微博上莫名其妙的关注了我没有关注的人?
  • 为什么我的微博上出现了不是我自己发送的消息?

万能的太空小孩给大家答案——「Session ID」。( • ̀ω•́ )✧

Session ID 是什么

用户在通过手机浏览器登录微博时,微博会通过一种普遍的在 URL 中加入一个 Session ID 参数的方法来解决保持用户登录状态的问题(弥补手机页面可能无法使用 cookies 的不足),但是微博的对于这个参数的处理很草率,再加上用户对于自己手机浏览器网址的泄露、搜索引擎的爬虫抓取等原因,在搜索引擎、百度贴吧等站点上这些地址已经泛滥成灾(下图),而这已经是一个历史遗留问题了。

1

图中,网址后面的「gsid=4u……」即为一些童鞋无意间贴出来的 27 位的 Session ID 参数。实际上,只要发布这个 Seesion ID 的用户没有在手机浏览器上进行登出微博或重新登录的操作,这个参数几乎是永久有效的 Σ(っ °Д °;)っ。仅通过简单的检索与测试,就可以获得大量有效的 Session ID(下图)。

2

除了搜索引擎检索,Session ID 还有可能通过 ARP 欺骗、免费 Wi-Fi 钓鱼、手机浏览器或客户端数据库等多种方式获得。

Session ID 可以做什么

那又怎么样,别人拿到这个参数有毛线用啊?

问出上一个问题的人大错特错了,稍微懂一点点技术的人,都知道怎么用。持有你有效 Session ID 的人,可以构造出相应的 URL 地址登录你的微博,从而进行除了修改密码以外的几乎所有操作(如果有必要,改密码不是做不到),包括发送微博、修改头像,查看私信,查看私密相册,查看密友微博… 这个 Session ID 几乎等同于持有你的登录通行证。

于是,现在已经可以回答最开始的两个问题了——

僵尸粉传播科技有限公司会利用程序检索出所有通过手机浏览器登录微博的用户,并在其微博下评论带有特定链接的文字(对对对就是类似一个月减肥多少长高多少那种)诱骗用户点击,以批量获得 HTTP referer(该字段包含有用户跳转来源地址、含有 Session ID 的链接),并保存成数据库,然后通过刷关注、刷发布的软件进行盗用的目的(此类软件搜索一下「刷微博 SID」或什么「微博粉丝机」之类的有很多),甚至再次给别人发送欺骗链接,造成蠕虫式扩散(类似 Samy XSS worm)。

如何防范 Session ID 泄露

首先,会通过手机浏览器登录微博网页版的用户,很大程度上是用不起高端智能手机的,对于互联网依赖程度不高的人。此类人群对于互联网安全的防范相对而言是比较疏漏的。_(:3」∠)_

这个漏洞其实从微博手机版问世的那个时候起就存在,但是由于手机浏览器的功能限制,在需要保证用户有一段登录时效的前提下,这个问题是没有办法根治的。包括新浪微博、腾讯微博等在内的众多站点都是通过 Session ID 控制手机登录时效的。之前微博曾对此问题进行过修正,赋予了这个参数一定的有效期(原来是永久有效的,因为这串参数是直接用账号密码等进行一定算法得出的),不过截至目前,仍有大量有效的 Session ID 被公开,甚至有打包下载。

其实捏,要防范此类问题很简单,不要把你手机浏览器打开微博后的网页地址发送给别人,也不要轻易点击陌生人给的、来源不明的链接。如果一定要发送地址给别人,请将地址中「gsid=」之后的 27 位 Session ID 删除

当然,如果你觉得有必要让身边通过手机浏览器登录微博网页版的旁扭们知晓留意这个问题,快把这篇文章转发并 @ TA 啦。٩(ˊᗜˋ*)و

Session ID 权限测试

  • 登录微博

3

  • 发布微博

4

  • 查看相册

5

  • 修改安全设置

6

更腹黑一点的操作我就不能明示了,总之这是一个很严重的问题,希望经常用手机浏览器上微博的人能够警惕。