这其实是一件很偶然的事情,前几天在某大佬群里看大佬装逼。突然一个平日不怎么冒泡的群友发了一条链接。本着 "这群里都是好人" 的想法我就天真的点了进去…… 这一点可闹大了。电脑猛地变卡直至完全不能动弹,无奈的我只能重启,重启过程中突然想起刚刚做的期末作业还没有保存 ……
重启完成之后觉得这个链接挺好玩的,于是决定把它 "顺" 下来,看看它到底有什么神通。
如上图所示,出人预料的简单, 只有七个文件(我还以为会有多么复杂) 六个 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 中,那不是酸爽无比?另外,渣渣初次投稿,望各位大佬轻喷,大家的每一条评论我都会认真阅读,请大佬们多多指教。
最后附上本人作死测试的地方以及这个的打包
作死勿乱点 文件打包 提取码 9uf6
来源: http://www.tuicool.com/articles/mQzquqb