qq空间说说如何发gif
你好,首先准备一张GIF格式的图片放在电脑桌面上,进入空间,在发表说说的地方有一个电视机一样的标志,点一下就会看到本地照片,然后把准备那张图片上传就好了。
兔子、程序猿与网红
首先声明我真不是腾讯的......
截至4/27已经100万赞了,害怕(早知道QQ空间开打赏我可能就是人生赢家了哇哈哈哈)
注:只有在手机QQ新版客户端(不是QQ空间)
并且在系统设置中需启用QQ的健康/陀螺仪访问权限才能看到以下效果
故事的缘起,是我在小伙伴的群里看到了一个消息。
点开视频,看到一对魔性的兔子(狐狸)在魔性的走路。。。
什么? 一个动图还能根据重力感应倒着放?
实践是检验真理的唯一标准,好吧!那就按照他说的试试看!
打开万年不碰的QQ空间-上传图片-选择好刚才的魔性兔子们....
上传成功!
诶...点开大图,也没什么变化啊。
好吧,被骗了,退出去吧。。。
-------------------------------------------------------------------------------------------------
本来。。。。。故事应该在这里结束。。。。
----------------------------------------------
然而...不小心倾斜了一下手机,果然跟说的一样!
嗯~ o(* ̄▽ ̄*)o有点意思
想了半天,不知道这个是怎么实现的,因为GIF只是一种图片格式啊,难道说这就是传说中的GIF中的战斗鸡嘛!!!
“嗯...应该不是吧”,我想,同时看了看群,
群里面已经炸开了锅:
嗯。。。有点道理,
仔细分析下:
点开大图,没反应
在小图界面下(应该是WebView/Browser控件)会受到影响
想了想,感觉很有可能这是一个精心构造的GIF,里面嵌套了Javascript脚本,而Javascript是可以调用浏览器的接口获取重力感应的数据的。
回想起当年PSP3000 用TIFF蛋图破解的故事。。。
==========科普环节==========
为什么仅仅查看一个图片就可能达到触发漏洞呢?
简单的来说,漏洞产生的主要原因是打开这个图片所用的软件在读取图片的时候
由于图片通过构造一些精心设计的结构,使程序读取时发生溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
举一个简单的栗子:
例如下面程序:
void function(char *str) { char buffer[16]; strcpy(buffer,str); }上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在像strcpy这样的问题的标准函数还有strcat()、sprintf()、vsprintf()、gets()、scanf()等。
当然,随便往缓冲区中填东西造成它溢出一般只会出现分段错误(Segmentation fault),而不能达到攻击的目的。
看这里:TIFF漏洞_百度百科 。。。。Wololo.net
====================================
这下子一切都说的通了。嗯,回去睡觉。
没准还发现QQ内置浏览器的漏洞了呢!o(* ̄▽ ̄*)ブ
========第二天===========
当我醒来的一刻,我被QQ的推送吓到了 1.5w+的赞
我可从来就没见过这么大场面,吓一跳。
同学在下面评论:转发过500(可是要付法律责任的)
我在懵逼中。。。突然心中一凉:
这要是利用了QQ内置浏览器的漏洞,通过GIF加载脚本的话就意味着除了做到重力感应切换播放方向外,还可以加载恶意的JS脚本,那可就完了!
我还是发图的!
完了!
我连忙打开电脑,把这个GIF导入到电脑上。开始分析JS脚本到底做了什么
打开文件:
一堆乱码。。。无从下手。。。。
隐隐约约的看到了GIF89a...
看来不找到他是不行了!于是我决定开始找GIF的数据结构,把所有的帧去掉应该就只剩下代码和文件头了,这下总可以了吧2333
好吧,是时候祭出大杀器: Hex Editor!
嘛。。这下子清晰多了嘛<(^-^)>
大家都知道,GIF文件之所以能放动图,是因为他其实内部存储了每一张图(或者称为帧)的数据,那么我们只需要把每一帧的数据去掉,剩下的不就是藏在里面的脚本/恶意代码了嘛~
有人要问了,为什么我要这么害怕呢?
因为我怕GIF里面藏着能拿到你们QQ空间Cookie(不懂得同学可以理解为发空间需要的钥匙)的恶意跨站攻击脚本啊。
还记得空间里有些点进去就会自动转发奇奇怪怪内容的链接嘛,不是你的QQ被盗了,是你的那个Cookie“钥匙”被人通过一种特殊的方式拿到了。所以他们将可以使用这个钥匙,访问你的QQ邮箱,空间,增删东西,修改你的空间访问权限等一系列操作。。。
好奇的同学们可以看这里:
揭秘--黑客是如何使用xss的 - 知乎专栏
听说GIF中带代码的在Chrome的console里面会提示MIME类型错误,我试了下,果然有!!!!
Storing JavaScript code in GIF images
Why is "MIME type mismatch on image file" a security vulnerability?
于是根据维基百科:GIF - Wikipedia,GIF Signature Format: Introduction & Recovery
嗯,整个文件结构应该是清晰了,走起!
for (i=0, len = length - 9; i < len, frames < 2; ++i) { if (arr[i] === 0x00 && arr[i+1] === 0x21 && arr[i+2] === 0xF9 && arr[i+3] === 0x04 && arr[i+8] === 0x00 && (arr[i+9] === 0x2C || arr[i+9] === 0x21)) { frames++; } }删掉相应的数据块后。。。。
Excuse ME???????
Excuse ME???????
难道是混淆过的?不对啊。。。没见过混淆成这样的啊。。。。
并扔进去反混淆器看看....GG,不行。。。
于是对照了网上做GIF injection的方法:
//代码
//代码们
。。。总之,发现按这种方法插入的话在有效JS前面
必定会有2A 2F 3D 31 3B的,遂搜索HEX,并没有。。。。
最后的尝试失败了,我决定求助信息安全专业的哥们W
“W啊,我不小心成网红了,你看到我发的图没?”
“看到了,好像有点意思,怎么做的啊”
“不是我做的啊,我只是单纯的发了而已,万一里面被人嵌了恶意JS,我可吃不了兜着走哇!老哥你快帮我看看”
“这么严重!我看看!”
>>>>>>>>>>>>>>>>>>>>>>>>20分钟过去了>>>>>>>>>>>>>>>>>>>>>>>>>
“好像没找到Javascript的嵌入代码啊,我在看是不是Image的参数导致了这个问题”
“我觉得不是,因为我只是正常上传了一个GIF”
“奇怪啊。。。”
“而且我看了,这个图片是写在img下面的,就算有js应该也不能执行吧。”
“。。。"
正当我们郁闷的时候,他突然发来消息
“别找了!根本不是那个GIF的事!"
“?????”
“你试试上传别的GIF,也是一样的!!!”
“哦???我试试”
于是我又下载了一个图,重新上传!
果然!!!!!!!!!!!!
原来是手机QQ偷偷更新的一个功能,通过调用陀螺仪改变GIF播放顺序。。。。。
也就是说。。。这个动画之所以这样是因为手机QQ的隐藏功能,跟上传的图片无关……
哈哈哈哈哈哈哈哈!我不用背锅啦!
感觉自己被企鹅全家耍了一遍,吓死了!