我在本地搭建了一个域 DC 192.168.1.200 名字为DCSERVER
client 192.168.1.151 DNS loca.test.com
在搭建完域之后,先把域控启动后再启动客户机的机器的时候抓了一下包
在3-6条
1.client请求DNS服务器的ldap.tcp.dc._msdcs.loca.test.com的SRV记录
2.DNS服务器返回SRV里记录的服务、端口、 A记录。(192.168.1.200:389)
3.client拿到SRV里的值以后发送解析A记录的请求
4.DNS服务器返回了解析的域名+IP地址
第1.2步是从DNS SRV里拿数据 第3.4步是把拿到的srv的数据解析为IP
在拿到srv的记录后里面存储的是域名和端口,在进行余下的操作的时候,是要解析为IP地址再进行通信的。
以下为MS文档中对SRV记录在AD中的作用 SRV记录:DNS中的一种信息记录,它将服务的名称映射到域名系统名字提供该服务的服务器的。域控制器(DC)的宣传是其由DNS SRV记录实现的此功能。在DNS服务器里则入下图所设置
在拿到DNS里的SRV记录后,还会在发送一个UDP的数据包(7),这个包在wireshark中标记为CLDAP。LDAP ping 在Microsoft Active Directory网络中最常见,其中客户端使用LDAP或CLDAP进行LDAP ping来检索服务器信息。
在理解LDAP PING之前,先看一下前置知识 LDAP服务器提供有关自身的信息以及特定于每个服务器的其他信息,例如它的功能、它支持的 LDAP 版本以及它使用的命名上下文。存储这些信息的是rootDSE 为目录服务器上目录数据树的根。rootDSE 不是任何命名空间的一部分。rootDSE 的目的是提供有关目录服务器的数据。这些信息不经过身份验证即可访问,只读。存储的所有信息如下。
A --> Windows 2000
D --> Windows Server 2003 operating system
DR2 --> Windows Server 2003 R2 operating system
G --> ADAM
K --> Windows Server 2008 operating system AD DS
L --> Windows Server 2008 AD LDS
N --> Windows Server 2008 R2 operating system AD DS
P --> Windows Server 2008 R2 AD LDS
S --> Windows Server 2012 operating system AD DS
T --> Windows Server 2012 AD LDS
V --> Windows Server 2012 R2 operating system AD DS
W --> Windows Server 2012 R2 AD LDS
Y --> Windows Server 2016 operating system AD DS
Z --> Windows Server 2016 AD LDS
B2 --> Windows Server v1709 operating system AD DS
C2 --> Windows Server v1709 AD LDS
E2 --> Windows Server v1803 operating system AD DS
F2 --> Windows Server v1803 AD LDS
H2 --> Windows Server v1809 operating system AD DS
I2 --> Windows Server v1809 AD LDS
K2 --> Windows Server 2019 operating system AD DS
L2 --> Windows Server 2019 AD LDS
Attribute name | A | D, DR2 | G | K, N | L, P | S | T | V | W | Y | Z | B2 | C2 | E2, H2, K2 | F2, I2, L2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
configurationNamingContext | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
currentTime | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
defaultNamingContext | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
dNSHostName | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
dsSchemaAttrCount | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
dsSchemaClassCount | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
dsSchemaPrefixCount | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
dsServiceName | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
highestCommittedUSN | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
isGlobalCatalogReady | X | X | X | X | X | X | X | X | |||||||
isSynchronized | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
ldapServiceName | X | X | X | X | X | X | X | X | |||||||
namingContexts | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
netlogon | X | X | X | X | X | X | X | X | |||||||
pendingPropagations | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
rootDomainNamingContext | X | X | X | X | X | X | X | X | |||||||
schemaNamingContext | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
serverName | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
subschemaSubentry | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
supportedCapabilities | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
supportedControl | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
supportedLDAPPolicies | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
supportedLDAPVersion | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
supportedSASLMechanisms | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
domainControllerFunctionality | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
domainFunctionality | X | X | X | X | X | X | X | ||||||||
forestFunctionality | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
msDS-ReplAllInboundNei***ors | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
msDS-ReplAllOutboundNei***ors | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
msDS-ReplConnectionFailures | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
msDS-ReplLinkFailures | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
msDS-ReplPendingOps | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
msDS-ReplQueueStatistics | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
msDS-TopQuotaUsage | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
supportedConfigurableSettings | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
supportedExtension | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
validFSMOs | X | X | X | X | X | X | X | X | X | X | X | X | X | X | |
dsaVersionString | X | X | X | X | X | X | X | X | X | X | X | X | X | ||
msDS-PortLDAP | X | X | X | X | X | X | X | X | X | X | X | X | X | ||
msDS-PortSSL | X | X | X | X | X | X | X | X | X | X | X | X | X | ||
msDS-PrincipalName | X | X | X | X | X | X | X | X | X | X | X | X | X | ||
serviceAccountInfo | X | X | X | X | X | X | X | X | X | X | X | X | X | ||
spnRegistrationResult | X | X | X | X | X | X | X | X | X | X | X | X | X | ||
tokenGroups | X | X | X | X | X | X | X | X | X | X | X | X | X | ||
usnAtRifm | X | X | X | X | X | X | X | X | X | X | X | X | |||
approximateHighestInternalObjectID | X | X | X | X | X | X | X | X | X | X | |||||
databaseGuid | X | X | X | X | X | X | X | X | |||||||
schemaIndexUpdateState | X | X | X | X | X | X | X | X | |||||||
dumpLdapNotifications | X | X | X | X | X | X | |||||||||
msDS-ProcessLinksOperations * | X | X | X | X | X | X | X | X | |||||||
msDS-SegmentCacheInfo ** | X | X | |||||||||||||
msDS-ThreadStates *** | X | X | X | X | X | X | |||||||||
ConfigurableSettingsEffective | X | X | X | X | |||||||||||
LDAPPoliciesEffective | X | X | X | X | |||||||||||
msDS-ArenaInfo | X | X | X | X | |||||||||||
msDS-Anchor | X | X | |||||||||||||
msDS-PrefixTable | X | X | |||||||||||||
msDS-SupportedRootDSEAttributes | X | X | |||||||||||||
msDS-SupportedRootDSEModifications | X | X |
这里我们着重的看 RootDSE里的netlogon属性,因为LDAP PING 的实现就是搜索netlogon属性
当我在搜索RootDSE的时候发现目录里不存在netlogon。
因为这里所实现的LDAP 的netlogon是通过域控制器将查询传递给在域控制器上运行的 NetLogon 服务,由NetLogon去返回NetLogon属性,
这里很绕,通俗一点来讲是在LDAP上是没有netlogon这个属性的,微软通过NetLogon来实现了这个属性。然后把这个概念放到了LDAP ROOtDSE上,NetLogon属性只适用于我们在进行LDAP PING
这是MS提供的搜索的例子
(&(DnsDomain=abcde.corp.microsoft.com)(Host=abcdefgh-dev)(User=abcdefgh-dev$)(AAC=\80000)(DomainGuid=\3b\b0\21\ ca\d3\6d\d1\11\8a\7d\b8\df\b1\56\87\1f)(NtVer=6000))
网络有效载荷:
A0 84 00 00 00 A8 A3 84 00 00 00 25 04 09 44 ?...¨?...%..D 6E 73 44 6F 6D 61 69 66 04 18 61 62 63 64 65 nsDomain..abcde 2E 63 6F 72 70 2E 6D 69 63 72 6F 73 6F 66 74 .corp.microsoft 2E 63 6F 6D A3 84 00 00 00 14 04 04 48 6F 73 .com£?......Hos 74 04 0C 61 62 63 64 65 66 67 68 2D 64 65 76 t..abcdefgh-dev A3 84 00 00 00 15 04 04 55 73 65 72 04 0D 61 £?......用户..a 62 63 64 65 66 67 68 2D 64 65 76 24 A3 84 00 bcdefgh-dev$£?。 00 00 0B 04 03 41 41 43 04 04 80 00 00 00 A3 .....AAC..?...£? 84 00 00 00 1E 04 0A 44 6F 6D 61 69 6E 47 75 ......DomainGu 69 64 04 10 3B B0 21 CA D3 6D D1 11 8A 7D B8 id..;°!ÊÓmÑ.?}¸ DF B1 56 87 1F A3 84 00 00 00 0D 04 05 4E 74 ß±V?.£?......Nt 56 65 72 04 04 06 00 00 00 30 84 00 00 00 0A Ver......0?.... 04 08 6E 65 74 6C 6F 67 6F 6E ..netlogon
这里是我们在域客户端请求LDAP下的默认下进行的网络包(7)
DnsDomain:当前的域
Host:客户端的
名称NtVer:NETLOGON_NT_VERSION 选项位(兼容新旧AD)
DnsHost:客户端的完全限定域名
在第七条数据包的时候我们请求的是RootDSE中的NETLOGON属性
当我们的LDAP ping SearchRequest请求发送以后,接下来看服务器与我们回复的包(8)
从红框中的依次是
DS_FLAG (DS_FLAG选项)
DomainGuid (NC 的 GUID 属性值)
DnsForestName(森林的 DNS 名称)
DnsDomainName(NC 的 DNS 名称)
DnsHostName(DNS的服务器名称)
NetbiosDomainName(NetBIOS 域名)
NetbiosComputerName(
名称)UserName(用户名)
DcSiteName(服务器的
名称)ClientSiteName(客户端的
名称)Version Flags (NtVersion)
LM (必须设置为 0xFFFF)
NT (必须设置为 0xFFFF)
接下来开始看DS_FLAG位,DS_FLAG为四个字节,
DS_PDC_FLAG, 0x00000001:服务器持有PDC FSMO角色(PdcEmulationMasterRole)
DS_GC_FLAG,0x00000004:服务器是全局编录 域控制器,将接受和处理在全局编录端口 上定向到它的消息
DS_LDAP_FLAG, 0x00000008:服务器是LDAP服务器
DS_DS_FLAG, 0x00000010:服务器是域控制器
DS_KDC_FLAG,0x00000020:服务器正在运行Kerberos 密钥分发中心服务。
DS_TIMESERV_FLAG, 0x00000040:W32Time 中指定的 Win32 Windows 时间服务存在于服务器上。
DS_CLOSEST_FLAG, 0x00000080:DcSiteName和ClientSiteName相同,提示客户端它在速度方面与服务器的连接良好。
DS_WRITABLE_FLAG, 0x00000100:表示服务器不是RODC。如第 3.1.1.1.9 节所述,RODC上托管的所有 NC 副本不接受原始更新。
DS_GOOD_TIMESERV_FLAG, 0x00000200:服务器是可靠的时间服务器。
DS_NDNC_FLAG, 0x00000400: NamingContext是一个应用程序 NamingContext。
DS_SELECT_SECRET_DOMAIN_6_FLAG, 0x00000800):服务器是RODC。
DS_FULL_SECRET_DOMAIN_6_FLAG, 0x00001000:服务器是可写 DC,不通过Windows Server 2003 R2操作系统运行Windows Server 2000 操作系统。
DS_WS_FLAG, 0x00002000:服务器上存在MS-ADDM 中指定的 Active Directory Web 服务。
DS_DS_8_FLAG, 0x00004000:服务器未通过Windows Server 2008 R2操作系统运行Windows Server 2000 操作系统。
DS_DS_9_FLAG, 0x00008000:服务器未通过Windows Server 2012操作系统运行Windows Server 2000。
DS_DNS_CONTROLLER_FLAG, 0x20000000:服务器有一个DNS 域名。
DS_DNS_DOMAIN_FLAG, 0x40000000: NamingContext是DefaultNamingContext
DS_DNS_FOREST_FLAG, 0x80000000: NamingContext是森林根域
在分析完这些之后可以大概的对微软如何进行定位域控的进行一个了解了
登录到基于 Windows 的域的工作站以一般形式查询DNS SRV 记录。
Active Directory 服务器通过TCP协议提供轻型目录访问协议( LDAP ) 服务。因此,客户端通过查询DNS SRV 记录来查找LDAP服务器(即域控制器)以获取以下形式的记录:
_ldap._tcp.DnsDomainName
当客户端登录或加入网络时,它必须能够找到域控制器。因此,客户端通过查询 DNS 以获取以下形式的记录来查找域控制器:
_LDAP._TCP.dc._msdcs.domain name
客户端找到域控制器后,它通过使用LDAP建立通信以访问AD。客户端使用LDAP ping建立到域控制器的LDAP连接并检索Netlogon 属性。该客户端确定的域控制器适用于启动Windows登录使用Windows客户端认证架构
通过查询DNS SRV的记录来定位域控的两条命令nslookup -type=SRV _ldap._tcp.dc._msdcs.loca.test.comnltest /dsgetdc:loca.test.com//其实还有好几条命令,不过我忘了。
资料来源:
本文作者:Astartes
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/172314.html