DNS域传送漏洞

DNS简介


DNS的认识

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明

DNS功能:

每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议所要完成的功能

DNS域传送漏洞


原理

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

若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录。造成整个网络的拓扑结构泄露给潜在的攻击者,包括一些安全性较低的内部主机,如测试服务器。凭借这份网络蓝图,攻击者可以节省很少的扫描时间

危害

恶意用户可以通过dns域传送获取被攻击域下所有的子域名。会导致一些非公开域名(测试域名、内部域名)泄露

而泄露的类似内部域名,其安全性相对较低,更容易遭受攻击者的攻击,比较典型的譬如内部的测试机往往就会缺乏必要的安全配置

漏洞挖掘

  • 利用网络空间搜索引擎收集域名服务器-->port:53
  • 利用MasScan收集dns服务器:https://github.com/robertdavidgraham/masscan

使用方式参考:https://blog.csdn.net/c465869935/article/details/53444117

  • 收集好的dns服务器与域名:https://github.com/lijiejie/edu-dns-zone-transfer/blob/master/vulnerable_hosts.txt

利用方式

一、nslookup 

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

失败例子

PS C:\Users\秋水> nslookup
默认服务器:  SDJN-PS-SV0202-DNS
Address:  211.137.191.26

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

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

非交互式方法

为了避免和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

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

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

三、dig使用命令

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

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

更多组合利用方式参考:https://blog.csdn.net/c465869935/article/details/53444117

漏洞修复

解决方案:区域传送是DNS常用的功能,区域传送的漏洞也不是没有办法解决的,严格限制允许区域传送的主机即可,例如一个主DNS服务器应该只允许它的从DNS服务器执行区域传送的功能。

针对于bind软件,可以通过allowe-transfer指令来控制,可以作为global选项或者zone选项的一个参数,我们可以使用地址列表如下

allowe-transfer {xxx.xxx.xxx.xxx; xx.xx.xx.xx;}; 

但是使用基于地址的访问控制列表可能会被某些“意志坚定”黑客绕过,呵呵。最好方法是使用TSIG key来严格定义区域传送的关系,如下

allowe-transfer {key "dns1-slave1"; key "dns1-slave2";};

参考文章:

https://blog.csdn.net/c465869935/article/details/53444117

https://www.cnblogs.com/h4ck0ne/p/5154651.html

https://blog.csdn.net/fly_hps/article/details/80632909

一篇关于DNS-bild搭建的文章:

https://www.jianshu.com/p/a5dc460b2c46

 

 

你可能感兴趣的:(杂项)