DNS区域传送漏洞实验以及二级域名爆破

目录:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

1.DNS服务器的域传送漏洞(nslookup交互式、非交互式、批处理三种方式)

2.写个二级域名爆破脚本

一、DNS服务器的域传送漏洞

实验环境:

服务端:Windows2008 安装DNS服务(创建A记录),安装IIS服务(搭建一个站点)

客户端:win10(DNS设置为windows 2008的IP地址)

实验步骤:

一、服务端搭建一个网站

1.服务端搭建一个网站并设置默认主页

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第1张

2.服务端设置DNS,并创建一个主机记录

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第2张

3.客户端测试网站以及DNS创建的主机记录(通过主机名访问)

通过下图可以说明,网站搭建完好以及DNS解析正常

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第3张

4.检查服务端是否开启“区域传送”,可以看到下图没有开启DNS区域传送

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第4张

5.客户端使用nslookup查看DNS记录,可以看到www. hnuahe.edu.cn解析的DNS记录

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第5张

6.看看是否存在DNS区域传送漏洞,列出hnuahe.edu.cn的所有二级域名

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第6张

7.从上图可以看到目标不存在DNS传送漏洞,那么我们就在windows 2008开启区域传送,并不做任何限制并再创建几条主机记录,方便下面测试实现效果,见下图

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第7张

8.再在客户端测试是否存在区域传递漏洞,我们可以看到几个主机记录,说明存在DNS区域传送漏洞

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第8张

9.刚才的实验实在交互式模式下测试DNS服务器是否存在域传送漏洞, 为了能够非交互式运行,可以通过管道来实现。

echo ls (要列出的域名) | nslookup

#注:nslookup也可以指定DNS服务器  echo ls (要列出的域名) | nslookup  –  (DNS服务器)

DNS区域传送漏洞实验以及二级域名爆破 Safe 第9张

10.也可以通过批处理来实现非交互式测试DNS服务器是否存在域传送漏洞

编写批处理文件:ls.bat

Echo ls %1 | nslookup - %2          #批处理通过%来获得命令行传递来的参数

注: 为了测试dns.nwpu.edu.cn服务器,可以执行ls.bat hnuahe.edu.cn www.hnuahe.edu.cn。 批处理中:

1) %1代表第一个参数,也即hnuahe.edu.cn

2) %2代表第二个参数,即www.hnuahe.edu.cn

3) Echo是回声命令,原文输出传入的参数内容

4) “|”是管道符号,作用是把前一个命令执行的结果传给后一个命令。因此:执行ls.bat hnuahe.edu.cn www.hnuahe.edu.cn,等价于执行echo ls hnuahe.edu.cn | nslookup – www.hnuahe.edu.cn。

5) nslookup - www.hnuahe.edu.cn是指定DNS服务器为www.hnuahe.edu.cn

可以看到通过批处理来执行测试出来DNS服务器存在域传送漏洞

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第10张

二、二级域名爆破

 当我们在查找某个域名的有效子域名时,我们通常需要使用子域名枚举这项技术。但是,除非DNS服务器暴露了完整的DNS空间(涉及到AXFR协议),否则我们真的很难拿到目标域名的子域名列表。目前主要的技术是使用一个常用域名的字典,并通过对每一个域名尝试进行解析来查找子域名。虽然这种方法在某些情况下非常有效,但是对于那些名字非常奇怪或罕见的域名来说,这种方法就没多大用了。

当然了,查找子域名也可以通过网络爬虫,以及搜索引擎(常用,因为更加高效)

代码如下: #注意需要自己准备一个字典

#进行暴力破解DNS二级域名
#利用nslookup 域名 循环尝试
import os
from threading import Thread
import time
#加载字典
with open("C://Users//admin//Desktop//dnsyuming_dict.txt") as f:
    nlist=f.readlines()
#print(nlist)
bz=0    #做标志位,用于后面的结束循环读取字典
rlist=[]
def f(astr):
    global bz
    cmd="nslookup %s.hnuahe.edu.cn"%astr        #这里可以修改    
    result=os.popen(cmd).read()
    if result.count("Address")>1:       #nslookup 执行成功返回的字符串中有两个"Address",失败只有返回一个
        rlist.append(astr+".hnuahe.edu.cn")     #把nslookup 执行成功得到的二级域名加入到列表中
    bz+=1

if __name__=="__main__":
    print("扫描开始:")
    ts=[]   #线程池
    for i in nlist:
        t=Thread(target=f,args=(i.strip(),))
        ts.append(t)
        t.start()   #开启多线程
    for i in ts:
        t.join()    
    while 1:
        if bz==len(nlist):  #如果标志位和字典的长度相等,则退出循环
            break
        time.sleep(1)
    print("一共扫描到%d个结果:"%len(rlist))
    print(rlist)
    print("扫描结束!")  

运行效果如下:

  DNS区域传送漏洞实验以及二级域名爆破 Safe 第11张

 

 

--------------------------------------------------------------------------------------------------

DNS安装与配置,请参考:https://www.cnblogs.com/yuzly/p/10474146.html

web安装与配置,请参考:https://www.cnblogs.com/yuzly/p/10459272.html

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄