图片中显示了自己的QQ信息实现原理

前言

我想每个人只要是你玩过QQ空间等其他的应用什么的都会有这样的经历,在朋友写的日志中出现自己的扣扣号码或者是网名。

这是一种利用腾讯QQ空间的漏洞,也就是说按照正常的情况来说,空间中不应该出现这种情况,我们很容易怀疑这是用户隐私的侵犯,但是值得一提的是,这些东西都是由三方接口获取的,也就是说用户的资料早被泄漏了。

真实案例

显示QQ的图片

分析原理

作为web开发者来说,很容易就能知道如何获取QQ号码如何获取QQ号码对应的用户信息。

我们知道网页是基于HTTP协议传输的,

http协议

首先、我们来了解一下HTTP协议(超文本传输协议):
HTTP协议包含三部分:请求行、请求头、消息体。

在请求头中包含了很多信息,例如:浏览器信息、Host、缓存时间、支持语言等等。

Accept:image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Cookie: 这里是敏感信息清除了
Host:c.isdspeed.qq.com
Referer:http://user.qzone.qq.com/903595554/infocenter?ptsig=gwxEOGALd*pGIPGyh*hqrOWaQ743st1DDwZEQwI8cXo_
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36

Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。

http://user.qzone.qq.com/903598554/infocenter

通过第三方接口获取QQ号码信息

我们在前面的URL地址中得到QQ号码,但是并没有用户的详细信息。

这里是网上任意找到的三方接口,返回的JSONP(JavaScript代码)

http://redstones.sinaapp.com/apis/qqinfo-service.php?qq=9035985554

_Callback( {"uin":446050962, "rflag":-1, "pycertified":0, "qzone":0, "intimacyScore":0, "nickname":"无所谓", "realname":"", "smartname":"", "logolabel":"1389902986", "friendship":0, "offsetBirth":223, "isFriend":0, "bitmap":"1850b5a40000c009", "avatarUrl":"http://qlogo3.store.qq.com/qzone/446050962/446050962/100?1389902986", "specialrelation":0});

通过服务端处理请求信息,我们可以轻松绘制信息到图片上,然后返回该图片流。

总结

比较常见的跨站脚本攻击(XSS),这个就好比是一个反向攻击,攻击对象不腾讯的QQ空间,而是QQ空间去攻击自己的服务器,然后自己服务器得到QQ资料。

来源: 雨林博客(www.yl-blog.com)