AD-DS(Active Directory 域服务)依赖于 DNS 的 SRV 资源记录(服务定位资源记录)。这些记录可以被查询,用于查找某些服务器的位置,比如全局编录服务器(global catalog)、LDAP 服务器、Kerberos KDC 等。
nslookup 是一个可以用于查询 SRV 记录的 DNS 客户端。它通常包含在 dnsutils 软件包中
# 查找主域控(PDC)
nslookup -type=srv _ldap._tcp.pdc._msdcs.$FQDN_DOMAIN
# 查找所有域控(DC)
nslookup -type=srv _ldap._tcp.dc._msdcs.$FQDN_DOMAIN
# 查找全局编录(GC)
nslookup -type=srv gc._msdcs.$FQDN_DOMAIN
nslookup -type=srv _kerberos._tcp.$FQDN_DOMAIN # 查找 Kerberos 服务主机
nslookup -type=srv _kpasswd._tcp.$FQDN_DOMAIN #查找 kpasswd 服务主机
nslookup -type=srv _ldap._tcp.$FQDN_DOMAIN #查找 LDAP 服务主机
nmap 工具可以配合 dns-srv-enum.nse 脚本进行这些查询操作。
nmap --script dns-srv-enum --script-args dns-srv-enum.domain=$FQDN_DOMAIN
为了正常工作,工具需要知道域名以及要查询的名称服务器。这些信息通常通过 DHCP 提供并存储在 UNIX-like 系统的 /etc/resolv.conf
或 /run/systemd/resolve/resolv.conf
文件中
如有必要,也可以通过对网络进行端口扫描来查找名称服务器,查找 DNS 端口 53/TCP
和 53/UDP
DNS 服务通常由域控制器提供
nmap -v -sV -p 53 $SUBNET/$MASK
nmap -v -sV -sU -p 53 $SUBNET/$MASK
在 Active Directory 集成 DNS 中,反向查找区域用于将 IP 地址解析为主机名。此操作依赖于 DNS PTR 记录。这允许找到网络中主机的名称。在 Active Directory 中,反向查找区域不是强制性的,因此限制了反向查找功能。
# standard lookup
host $hostname
# reverse lookup
host $IP_address
# manual PTR resolution request
nslookup -type=ptr $IP_address
# PTR restolution on a range
dnsrecon -r $RANGE -n $DC_IP
默认情况下,Active Directory 中的任何用户都可以枚举域名或森林 DNS 区域的 DNS 记录,类似于区域传输。
adidnsdump -u <DOMAIN_FQDN>\\<USERNAME> ldap://<DC_IP> -r
cat records.csv
bloodyAD --host "$DC_IP" -d "$DOMAIN" -u "$USER" -p "$PASSWORD" get dnsDump
┌──(root㉿kali)-[~]
└─# bloodyAD --host "192.168.3.142" -d "0day.org" -u "jack" -p 'admin!@#45' get dnsDump
zoneName: 0day.org
SOA.PrimaryServer: owa2010sp3.0day.org
SOA.zoneAdminEmail: hostmaster@0day.org
NS: owa2010sp3.0day.org
A: 192.168.8.28; 192.168.3.142
recordName: 0day.org
recordName: _gc._tcp.0day.org
SRV: owa2010sp3.0day.org:3268
recordName: _gc._tcp.Default-First-Site-Name._sites.0day.org
SRV: owa2010sp3.0day.org:3268
recordName: _kerberos._tcp.0day.org
SRV: owa2010sp3.0day.org:88
recordName: _kerberos._tcp.Default-First-Site-Name._sites.0day.org
SRV: owa2010sp3.0day.org:88
.....
...
NetExec 的 Enum_dns 模块利用 WMI 从 Active Directory DNS 服务器中导出 DNS 信息。它从所有找到的域中提取 MicrosoftDNS_ResourceRecord
(完整区域信息)
netexec smb -u <USERNAME> -p <PASSWORD> -d <DOMAIN> -M enum_dns <IP>
┌──(root㉿kali)-[~]
└─# nxc smb -u jack -p 'admin!@#45' -d '0day.org' -M enum_dns 192.168.3.142
SMB 192.168.3.142 445 OWA2010SP3 [*] Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (name:OWA2010SP3) (domain:0day.org) (signing:True) (SMBv1:True)
SMB 192.168.3.142 445 OWA2010SP3 [+] 0day.org\jack:admin!@#45
此模块仅适用于管理员权限。
如果允许区块传输,可以使用 dig
来请求区块传输
dig axfr @<DC_IP> <DOMAIN_FQDN>
┌──(root㉿kali)-[~]
└─# dig axfr @192.168.3.142 0day.org
; <<>> DiG 9.20.4-4-Debian <<>> axfr @192.168.3.142 0day.org
; (1 server found)
;; global options: +cmd
; Transfer failed.