一、实验环境
服务器:Windows server 2008,安装DNS服务(创建A记录),安装IIS服务(搭建一个站点)
客户端:Windows 7,DNS设置为Windows server 2008的IP地址
二、实验步骤
1、在服务器端安装DNS服务
2、服务器端配置DNS,在正向查找区域中新建一个区域 — xianligong.edu.cn
将动态更新设置为’不允许动态更新’
3、创建主机记录
在DNS管理器中右键单击新建的区域,选择 ' 新建主机 ' 命令,弹出对话框,输入主机名和对应的IP地址,单击添加主机按钮。此步骤可重复多次。
4、配置DNS转发
5、配置服务器,将IP地址(要设置成静态的)与DNS服务器地址设置成一样的(Windows Service 2008 本身就是DNS服务器)
配置DNS客户机:将客户机DNS设置为服务器的IP地址,然后访问网站;访问成功,说明网站搭建成功以及DNS解析成功
6、检查服务端是否开启 ' 区域传送 ',可以看到下图没有开启DNS区域传送
7、在客户端使用nslookup查看DNS记录,可以看到www. xianligong.edu.cn解析的DNS记录
查看是否存在DNS区域传送漏洞(如果列出xianligong.edu.cn的所有二级域名,则存在传送漏洞)
从上图可以看到目标不存在DNS传送漏洞,那我们就在Windows server 2008开启区域传送,并不做任何限制并再创建几条主机记录。
再在客户端测试是否存在区域传递漏洞,我们可以看到几个主机记录,说明存在DNS区域传送漏洞
三、DNS子域名爆破
通过上面的DNS区域传送漏洞实验我们可以看出,如果爆破前存在域传送漏洞,那么我们就可以利用该漏洞来得到主机记录了,不需要进行子域名爆破了。
下面我们就对上面创建的xianligong.edu.cn的主机记录进行子域名爆破(运行之前需要自己准备一个常用域名的字典)
#利用 'nslookup 域名'暴力破解子域名
import os
from threading import Thread
import time
#加载字典
with open('D://st13//python//3.4//dns.txt') as f:
nlist=f.readlines() #readlines() 自动将文件内容按行返回一个列表(list)
bz=0 #做标志位,用于后面结束循环读取字典
rlist=[]
def sm(astr):
global bz
cmd='nslookup %s.xianligong.edu.cn'%astr
result=os.popen(cmd).read()
if result.count('Address')>1: #nslookup 执行成功返回的结果中有两个"Address",失败只返回一个
rlist.append(astr+'.xianligong.edu.cn')#将存在的域名加入到字典中
bz+=1
if __name__=="__main__":
print('扫描开始')
for i in nlist: #开启多线程
t=Thread(target=sm,args=(i.strip(),))
t.start()
while 1: #如果bz等于字典的长度,则循环结束
if bz==len(nlist):
break
time.sleep(1)
print('扫描结束!')
print('一共扫描到%s的个结果'%len(rlist))
print(rlist)
运行结果如下: