在解说本文之前,先介绍一下域账户和DNS的几个基本概念。
域账户
域账户是域是 *** 方针的分组。例如:用户、组和计算机。域中一切的方针都存储在 Active Directory (AD)下。Active Directory 能够常驻在某个域中的一个或多个域操控器下。
什么是DNS?
DNS( Domain Name System)是“域名体系”的英文缩写,是一种组织成域层次结构的计算机和 *** 服务命名体系,它用于TCP/IP *** ,它所供给的服务是用来将服务器名和域名转换为IP地址的作业,DNS便是这样的一位“翻译官”。
为什么需求DNS解析域名为IP地址?
*** 通讯大部分是根据TCP/IP的,而TCP/IP是根据IP地址的,所以计算机在 *** 上进行通讯时只能辨认如“202.96.134.133”之类的IP地址,而不能知道域名。咱们无法记住10个以上IP地址的网站,所以咱们拜访网站时,更多的是在阅读器地址栏中输入域名,就能看到所需求的页面,这是由于有一个叫“DNS服务器”的计算机主动把咱们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。
DNS域传送(DNS zone transfer)
DNS域传送缝隙是黑客常用的一种缝隙进犯手法,黑客能够用该缝隙快速的断定出某个特定zone的一切服务器,搜集域信息,挑选进犯方针,找出未运用的IP地址,黑客能够绕过根据 *** 的拜访操控。
DNS域传送缝隙原理
DNS域传送(DNS zone transfer)指的是一台备用服务器运用来自主服务器的数据改写自己的域(zone)数据库。
DNS服务器分为:主服务器、备份服务器和缓存服务器。在主服务器和备份服务器之间同步数据库,需求运用“DNS域传送”。域传送是指后备服务器从主服务器复制数据,并用得到的数据更新本身数据库。
一般来说,DNS域传送操作只在 *** 里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被过错地装备成只需有client宣布恳求,就会向对方供给一个zone数据库的详细信息,所以说答应不受信赖的 *** 用户履行DNS域传送(zone transfer)操作是成果最为严峻的过错装备之一。
综上所述,要完成域传送缝隙,就需求一个不安全装备的DNS服务器,然后 *** 上的任何用户都能够获取一切传送记载并搜集有关 *** 中服务器的信息。可是,现在还很少有人知道,假如运用Active Directory集成DNS,任何用户都能够默许查询一切DNS记载。
本文,我会给你介绍了一个默许查询一切DNS记载的东西——Adidnsdump ,即便你是一个没有读取传送记载权限的用户,也能够运用以下办法取得域环境中的一切DNS解析记载。
详细获取进程
就我个人而言,每逢我接手一个新的浸透测验使命时,我都会主意设法了解测验环境的 *** 布局,测验方针运用的软件以及风趣数据的方位。假如测验方针有非描述 *** 器称号或描述,像BloodHound或ldapdomaindump这样的东西不会有太大协助,由于SRV00001.company.local依然没有告知你在这台服务器上运转的是什么。在许多IP地址上运转EyeWitness等发现东西通常会回来许多默许的Apache / IIS页面,由于大多数站点都装备为侦听DNS称号而不是IP地址。此刻你假如知道DNS记载,或许就会发现SRV00001.company.local和gitlab.company.local指向同一个IP,这个IP上或许存放着许多源码。
因而,我以为拜访AD的DNS记载十分有价值。为此我编写了一个能够转储这些DNS记载的Adidnsdump。你既能够直接在 *** 中的主机运转它,也能够经过SOCKS地道运用。
该东西的规划思路,是在我研讨Active Directory DNS时开端的,首要遭到Kevin Robertson在ADIDNS 上作业的启示。当我作为普通用户提取了ADSI Edit并忽然看到了域中一切DNS记载时,我企图找出AD如安在LDAP中运用域来存储DNS记载。令我惊奇的是,早在2013年,就有人开宣布能够提取DNS记载的PowerShell脚本,但它并没有完全符合我的要求,所以我决议用Python编写一个版别,并增加一些选项来枚举比默许情况下更多的记载。
DNS记载究竟躲藏在哪了?
在LDAP中查询DNS记载的首要办法是挑选dnsNode类的一切方针,然后履行查询操作,此刻,你会看到DNS域中的一切记载。当我运用filter (objectClass=dnsNode)履行查询时,回来的成果十分有限。即便我手动阅读DNS域,都能够获取更多的记载。
如上图所示,许多记载的objectClass都处于躲藏状况,我想是由于计算机DNS记载的默许权限所导致的。这让我联想到了,不是经过活动目录DNS页面创立的其他记载,也是不会答应一切用户检查其内容的。再加上IP地址实践作为这些方针的特点来存储,因而无法检查这些记载中的IP地址。
可是,默许情况下,任何用户都能够创立新的DNS记载,任何用户也能够默许列出DNS域的子方针。至此,咱们就知道DNS解析记载藏在哪儿了,仅仅无法运用LDAP查询它们罢了。
经过运用LDAP枚举知道记载地点的方位之后,咱们就能够直接运用DNS查询它,由于履行惯例DNS查询不需求什么特别权限,这样咱们就能够解析域中的一切记载。
运用adidnsdump查询一切DNS解析记载
点此GitHub,下载adidnsdump,它能够枚举DNS域中的一切解析记载。首要,运用参数–print-zones显现当时域中的一切区域。留意,并非一切的区域都有实践意义,例如转发(forward )、缓存和存根域并不包括该域的一切记载。假如找到这些域,更好查询它们实践所属的域。在我构建的测验域中,运用参数–print-zones只会输出默许域。
假如咱们为adidnsdump指定域或许将默许域设置为空,咱们将取得一个包括一切解析记载的列表。能够列出但不能读取的记载(即上述所谓的“躲藏”DNS记载)只会显现一个问号,由于不知道其间会存在哪种类型的记载以及它们指向何处。别的,这些记载会悉数被保存到名为records.csv的文件中。[1][2]黑客接单网