事件起因
这其实是一件很偶然的事情,前几天在某大佬群里看大佬装逼。突然一个平日不怎么冒泡的群友发了一条链接。本着“这群里都是好人 ”的想法我就天真的点了进去......这一点可闹大了。电脑猛地变卡直至完全不能动弹,无奈的我只能重启,重启过程中突然想起刚刚做的期末作业还没有保存 ......
正文
重启完成之后觉得这个链接挺好玩的,于是决定把它“顺“ 下来,看看它到底有什么神通。
如上图所示,出人预料的简单,只有七个文件(我还以为会有多么复杂) 六个html和一个css。其中css文件和2.html没有什么意义,纯属装饰,文章中不再讨论。
本来想去度娘下看看有什么头绪没有,半路上想起这么好玩的东西freebuf上怎么可能没有呢?于是来到网站进行搜索,关键词:“崩溃”、“浏览器”。找到了这篇文章: 《AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞》 查看文件代码,果然在cr.html里面发现了这篇文章中提到的畸形URL
这下就明白了,作者通过过长或者畸形URL触发浏览器bug导致用户系统卡死。
那么问题来了,只是让我跪了的话只要这个cr.html就够了啊,那个ie.html 是什么?难道是针对ie的?这么6?打开看看。
这是什么啊?有点懵逼。等等......$MFT有点眼熟,赶紧返回首页找了找最终在侧边的快讯中找到了某条信息。
经过度娘,围观大佬们的文章最终了解了这个东西的相关信息(甚至还找到了这段代码最初的出处)。
当用户访问X:\$MFT\下的任意文件时系统会被卡死,而且目前微软还没有发布补丁( X 为ntfs盘符)。这个bug的厉害之处在于它太容易被触发了。不用什么高级的操作,仅仅只是浏览器正常调用就足够了。
例如:
<img src=file:///C:/$MFT/666.jpg>
在网页里引用了一个让你能爆炸的目录,然后触发漏洞炸得你一脸懵逼。又针对chrome又利用ie ,这人真是可怕啊。对于一般网民来说用的浏览器无非也就360XX浏览器、或者QQ浏览器再或者等等等等吧。总之国内市面上普通网民所使用的浏览器哪个和 chrome扯不上关系,再退一步现在还用着IE的人也并不少。所以说这个链接几乎能玩死大多数网民并不是吹的。
分析完这些东西以后发现了一个问题,既然作者想整人那么绝对不可能把两个文件的链接都做出来然后发送,每个文件只对应了特定的浏览器才能触发。如果链接发出去了对方浏览器不是相应的那个那岂不是装逼失败?所以说一定有一个判断页面,然后根据不同的浏览器跳转到不同的文件上去。于是打开了zz.html (zz一定是中转的简称.....)
这个...这个判断有点猎奇啊....
最终经过度娘查到了这段代码的出处。代码var ie = !-[1,];在ie9之前曾被称为世界上最短的判断代码。 它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。在这段代码执行时会先调用数组的 toString()方法 ,执行[1,].toString()在 IE6,7,8中将会得到"1,"。然后表达式就变为!-"1,"。再尝试把 "1,"转换成数值类型得到NaN ,再对NaN 取负得到值仍为NaN。最后执行!NaN返回true 。代码 var ie = !-[1,]; 其实等价于 var ie = !(-Number([1,].toString())); 在IE6\7\8中值为true。
因为IE6/7/8都不会忽略[1,].ToString()这个bug,即得到的是"1,";而-Number([1,].toString())即为-Number("1,")得到的结果是NaN;然后!(-Number([1,].toString()))即为!(NaN)即得到true。一切的前提是IE6/7/8都有[1,].ToString()=>"1,"这个bug,而其它浏览器则是[1,].ToString()=>"1"
引用资料:《全世界最短的IE浏览器判断代码》
分析
当用户点击这个链接会打开index.html,这个页面是欢迎界面(大概没什么意义吧)。下一步用户继续点击,页面跳转到判断页。判断页通过var ie = !-[1,];这个极短的代码判断用户浏览器类型并跳转到相对应的“爆破”页面。如果是IE浏览器就跳转到ie.html,页面通过调用$MFT目录下的123.jpg文件触发bug,用户系统被卡死。如果是chrome浏览器或者chrome内核的浏览器则会跳转到cr.html,通过畸形URL触发浏览器bug导致内存狂飙直至系统卡死。如果你的浏览器没有触发bug你将可以看到“hello world”。
这个恶搞链接的作者技术可能不是怎么高,但他的见识却不短。几个简单的步骤中运用了的都是常人不会注意到或者根本想不到的东西。($MFT出现在今年五月份,chrome崩溃那个又是出现在2015年,判断手法又来自于2010年)
结尾
经过自己多次作死得出几个结果,也得出了一些疑问。经测试市面上多数浏览器都会跪在cr.html面前,然而360 急速浏览器在急速模式下时不会受到影响,当切换到兼容模式时会触发漏洞导致内存狂飙。但是某老司机却告诉我将兼容模式其实是还是ie,那么是ie 又为什么会触发chrome的漏洞呢?求大佬解答。另外在一些文章中写到这个东西可以被用在XSS 中,那不是酸爽无比?另外,渣渣初次投稿,望各位大佬轻喷,大家的每一条评论我都会认真阅读,请大佬们多多指教。