在解说本文之前,先介绍一下域账户和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]黑客接单网