一,DNS域名传送漏洞
1,实验环境:
服务器
(1)Windows server 2008,安装DNS服务(创建A记录),安装IIS服务(搭建一个站点);
(2)配置桥接模式(即,VMnet0)
- 打开VMware Workstation虚拟机——>编辑——>虚拟网络编辑器——>点击“DHCP设置(P)——>“桥接到:自动”,选择为物理机的网卡——>点击“确定”
- 虚拟机——>网络适配器——>选择“桥接模式”和勾选“复制物理网络连接状态(P)”——>点击“添加(A)”,将该网络设配器设置成NAT模式。这样既win2008中既可以实现“NAT模式”网络连接,又可以实现“桥接模式”网络连接。
- 虚拟网卡按装成功
(3)win2008的通过ipconfig获得,即:IP:
客户端
虚拟机Win7的DNS设置为Windows server 2008的IP地址;
2,实验步骤:
(1)首先在Windows 2008上安装DNS服务
- 在服务管理器上新建角色,选择DNS服务器;
- 在服务管理器上添加完DNS角色后,在“开始——>程序——>管理工具中会出现DNS”,利用它可以启动DNS管理器,并对DNS服务器进行设置。
(2)服务器配置DNS,在正向查找区域中新建一个区域——xianligong.edu.cn
(3)创建主机记录;
在DNS管理器中右键单击新建的区域,选择“新建主机”命令,弹出对话框,输入主机名和对应的IP地址(即,Win2008的IP地址),单击添加主机按钮。此步骤可重复多次。
(4)配置DNS转发
(5)配置服务器,将IP地址(需设置成静态IP)与DNS服务器地址设置成一样的(Windows
service 2008本身就是DNS服务器)
(6)配置客户端DNS:将客户端DNS设置为DNS服务器的IP地址,然后访问网页。若访问成功,说明网站搭建成功以及DNS解析成功。
- windows2008登录成功
- Windows7上自建网站登录成功
(7)检查服务端是否开启“区域传送”,可以看到下图没有开启DNS区域传送;
(8)在客户端中在CMD命令下,使用nslookup命令查看DNS记录,可以看到www.xianligong.edu.cn的DNS解析记录;
- 查看是否存在DNS区域传送漏洞(假设,如果列出xianligong.edu.cn的所有二级域名,则存在传送漏洞);
从上图可以看到目标不存在DNS传送漏洞,那我们就在Windows server 2008开启区域传送,并不做任何限制,并再创建几条主机记录。
再在客户端测试是否存在区域传送漏洞,我们可以看到几条主机记录,说明存在DNS区域传送漏洞;
三、DNS子域名爆破
-
通过上面的DNS区域传送漏洞实验,我们可以看出,如果爆破前存在域传送漏洞,那么我们就利用该漏洞来得到主机记录,不需要进行子域名爆破了。
-
当我们在查找某个域名的有效子域名时,可以使用的技术是通过一个常用的域名字典(需要自己准备一个字典),对字典中的每一个域名通过nslookup尝试进行解析来查找子域名。这种方式有一定的局限性,就是对那些主机名不常见的,这种方法就没什么实际的效益。
下面我们就对上面创建的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)
运行结果如下: