一个脑洞“颇大”的恶搞链接

事件起因

这其实是一件很偶然的事情,前几天在某大佬群里看大佬装逼。突然一个平日不怎么冒泡的群友发了一条链接。本着“这群里都是好人 ”的想法我就天真的点了进去......这一点可闹大了。电脑猛地变卡直至完全不能动弹,无奈的我只能重启,重启过程中突然想起刚刚做的期末作业还没有保存 ......

正文

重启完成之后觉得这个链接挺好玩的,于是决定把它“顺“ 下来,看看它到底有什么神通。

如上图所示,出人预料的简单,只有七个文件(我还以为会有多么复杂) 六个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 中,那不是酸爽无比?另外,渣渣初次投稿,望各位大佬轻喷,大家的每一条评论我都会认真阅读,请大佬们多多指教。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

改善Java文档的理由、建议和技巧

我非常确定,作为开发人员我们都喜爱技术文档。我们喜欢阅读文档、写文档,更不用说维护文档了,我简直爱死它了!

5410
来自专栏互联网杂技

Nodejs学习路线图

Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的w...

1.2K80
来自专栏Python数据科学

Python定期爬取GitHub上每日流行项目

介绍一个在GitHub上看到的通用的python爬虫,难度不大,是一个蛮好玩的点,顺便总结一下python爬虫的一些需要注意的点。

26120
来自专栏BestSDK

10行代码,Python实现爬取淘宝/天猫评论

要做数据分析首先得有数据才行。对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了。本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也...

89850
来自专栏SAP最佳业务实践

想学FM系列(11)-SAP FM模块:预算结构(2)-预算结构配置-定义预算地址派生策略

3.2.1 预算结构的配置 ? 1)定义预算地址的派生策略 ? 新建完成后,可以点击 “放大镜”,进行预算地址派生规则的详细配置 ? 点击 “新增”,可以...

56060
来自专栏双十二技术哥

组件化实践详解(一)

具体实施一项技术项目之前我们会首先确定对应的目标,之后的行动计划都会朝着目标一步步靠拢。

8320
来自专栏Fundebug

配置Tree Shaking来减少JavaScript的打包体积

译者按: 用Tree Shaking技术来减少JavaScript的Payload大小

13050
来自专栏Wordpress专用主机|主题模板|必备插件

WORDPRESS视频教程:使用ELEMENTOR制作企业展示网站

第一次录wordpress视频教程,可能讲的很烂。希望各位朋友见谅,轻喷~博主会不断进步的。

64010
来自专栏FreeBuf

Zip Slip漏洞影响大量项目,多个生态系统受牵连

近期,来自Synk的安全研究专家公布了一个高危漏洞的技术细节信息,而这个漏洞将影响多个负责处理压缩文档文件的开源代码库。

11100
来自专栏me的随笔

Visual Studio 代码风格约束

注意,这里的错误是IDE1006:Naming rule violation,编译时依然能通过(没找到在哪里设置不允许通过编译):

22720

扫码关注云+社区

领取腾讯云代金券