Adfind是一个使用C++语言写的活动目录查询工具,它允许用户轻松地搜索各种活动目录信息。它不需要安装,因为它是基于命令行的。它提供了许多选项,可以细化搜索并返回相关细节。下面讲解Adfind的参数以及其使用。
参数
执行如下命令即可查看Adfind的所有参数。
AdFind.exe /?
如图所示,可以看到adfind的参数。
1. 连接选项
下面这几个是连接选项,也就是在连接的时候指定的参数。如果是在域内机器上执行adfind的话,则不需要连接参数。如果是域外机器执行adfind的话,则需要指定连接参数。如下:
・-h:指定主机与端口(ip:port)
・-p:也可以单独使用-p参数指定端口
・-u:指定用户
・-up:指定密码
2. 过滤选项
下面这几个是过滤参数,也就是进行查询的时候需要过滤的一些条件。如下:
・-b:指定要查询的根节点basedn
・-bit:指定位查询
・-f:LDAP过滤条件,指定ldap语法
3. 显示选项
下面这几个是显示参数,也就是查询出来之后如何显示的一些参数。如下:
・-appver:显示adfind版本信息
・-c:只统计数量
・-csv:导出为csv 格式
・-dn:只显示dn,不返回详细信息
・-s:搜索的范围, 有 one(当前层级)/sub(一层一层递归),默认是sub
・-sdna:非域管查询sd信息
・-recmute:如果所有属性都为空,则禁止显示DN。这主要适用于-sddl过滤器选项。
・-t:查询超时时间,默认120秒
4. 查看帮助
下面这几个是帮助参数,也就是使用过程的一些帮助。如下:
・-help:基础的帮助
・-?:基础的帮助
・-??:高级帮助
・-????:快捷方式帮助
・-sc?:快捷方式帮助
・-meta?:元数据帮助
・-regex?:固定表达式帮助
使用
adfind工具使用的结构如下:其中switches是连接参数,-b是指定要查询的根节点basedn,-f是指定过滤的条件,attr是指定要显示的属性。
AdFind.exe [switches] [-b basedn] [-f filter] [attr list]
1.[switches]
该选项是连接参数,如果adfind是在域内主机上运行,则无需该选项。如果是域外机器上执行,则需要指定域控和提供一个有效的域用户和密码。
执行如下命令,连接域控10.211.55.4的389端口。提供的用户名是xie\hack,密码是P@ss1234,需要查询的数据是域控列表。
AdFind.exe -h 10.211.55.4:389 -u xie\hack -up P@ss1234 -sc dclist
如图所示,通过指定域控以及账号密码,成功查询出目标域的域控。
注:本文以后查询条件均是在域内机器查询,故不显示连接参数。
2.[-b basedn]
该选项指定要查询的根节点basedn。如下命令
#查询dn dc=xie,dc=com下的所有机器Adfind.exe -b dc=xie,dc=com -f "objectcategory=computer" dn#查询dn CN=Computers,DC=xie,DC=com下的所有机器Adfind.exe -b CN=Computers,DC=xie,DC=com -f "objectcategory=computer" dn
如图所示,在dn为dc=xie,dc=com下查询所有机器,可以查询出3个对象。而在dn为CN=Computers,DC=xie,DC=com下查询所有机器,可以查询出2个对象。原因在于域控在OU=Domain Controllers,DC=xie,DC=com dn下,使用CN=Computers,DC=xie,DC=com为根节点时查询不出域控机器 。
3.[-f filter]
该选项指定查询的过滤条件。如下命令,使用-f参数过滤不同的查询条件
#查询域内所有机器Adfind.exe -f "objectcategory=computer" dn#查询域内所有用户AdFind.exe -f "(&(objectCategory=person)(objectClass=user))" dn
如图所示,当过滤条件不同时,查询结果的不同。
4.[attr list]
该选项用于指定查询出来的结果显示哪个属性。当不使用该参数时,会显示查询对象的所有属性。
#查询域内所有机器,显示所有机器的所有属性``Adfind.exe -f "objectcategory=computer"`` ``#查询域内所有机器,显示所有机器的dn属性``Adfind.exe -f "objectcategory=computer" dn`` ``#查询域内所有机器,显示所有机器的dn属性,这样查询的结果直接没有换行。只有dn属性能在前面加个-``Adfind.exe -f "objectcategory=computer" -dn`` ``#查询域内所有机器,显示所有机器的name属性``Adfind.exe -f "objectcategory=computer" name
如图所示,当不指定显示哪个属性时,默认显示所有属性。
如图所示,当指定了属性时,只显示指定属性。
查询示例
以下演示一些在实战中经常用到的一些查询语法。
1. 查询域信任关系
如下命令是查询域信任关系。
Adfind.exe -f objectclass=trusteddomain -dn
如图所示,可以看到当前域与shanghai.xie.com、beijing.xie.com具有信任关系。
2. 查询域控
以下命令是查询域控的一些信息。
#查询域控名称AdFind.exe -sc dclist#查询域控版本AdFind.exe -schema -s base objectversion
备注(域控版本 数字对用的版本)
・Windows 2000 Server operating system: 13
・Windows Server 2003 operating system: 30
・Windows Server 2003 R2 operating system: 31
・Windows Server 2008 operating system (AD DS): 44
・Windows Server 2008 R2 operating system (AD DS): 47
・Windows Server 2012 operating system (AD DS): 56
・Windows Server 2012 R2 operating system (AD DS): 69
・Windows Server 2016 operating system (AD DS): 87
・Windows Server v1709 operating system (AD DS): 87
・Windows Server v1803 operating system (AD DS): 88
・Windows Server v1809 operating system (AD DS): 88
・Windows Server 2019 operating system (AD DS): 88
・Active Directory Application Mode (ADAM): 30
・Windows Server 2008 (AD LDS): 30
・Windows Server 2008 R2 (AD LDS): 31
・Windows Server 2012 (AD LDS): 31
・Windows Server 2012 R2 (AD LDS): 31
・Windows Server 2016 (AD LDS): 31
・Windows Server v1709 (AD LDS): 31
・Windows Server v1803 (AD LDS): 31
・Windows Server v1809 (AD LDS): 31
・Windows Server 2019 (AD LDS): 31
如图所示,可以看到查询到域控的一些相关信息。
3. 机器相关
下面这几个是与机器相关的查询命令。
(1) 查询域中所有机器
以下命令是查询域中所有的机器。
#查询域中所有机器,只显示dnAdFind.exe -f "objectcategory=computer" dn#查询域中所有机器,显示机器名和操作系统AdFind.exe -f "objectcategory=computer" name operatingSystem
如图所示,可以看到当指定参数不同时,查询出的域中所有机器显示信息也不同。
(2) 查询域中活跃机器
以下命令是查询域中活跃的机器。
#查询域中活跃机器,只显示dnAdFind.exe -sc computers_active dn#查询域中活跃机器,显示机器名和操作系统AdFind.exe -sc computers_active name operatingSystem
如图所示,可以看到当指定参数不同时,查询出的域中活跃机器显示信息也不同。
(3) 查询指定机器详细信息
以下命令是查询域中机器的详细信息。
#查询指定机器mail详细信息``AdFind.exe -f "&(objectcategory=computer)(name=mail)"
如图所示,查询指定mail机器的详细信息。
4. 用户相关
下面这几个是与用户相关的查询命令。
(1) 查询域管理员
以下命令是查询域管理员组中含有哪些用户。
Adfind.exe -b "CN=Domain Admins,CN=Users,DC=xie,DC=com" member
如图所示,可以看到查询到域管理员组中有admin和administrator两个用户。
(2) 查询域内所有用户
以下命令是查询域内所有用户。
Adfind.exe -b dc=xie,dc=com -f "(&(objectCategory=person)(objectClass=user))" -dn
如图所示,可以看到查询到域内的所有用户。
(3) 查询指定域用户
以下命令是查询域内所有用户。
#查询指定域用户test的信息``Adfind.exe -sc u:test
如图所示,可以看到查询到域内指定用户test的信息。
(4) 查询指定域用户的sid
以下命令是查询域内指定用户test的sid值。
AdFind.exe -sc u:test objectSid
如图所示,可以看到查询出指定test用户的sid值。
(5) 查询指定sid对应的用户
以下命令是查询域内指定sid值对应的用户。
AdFind.exe -sc adsid:S-1-5-21-1313979556-3624129433-4055459191-1146
如图所示,可以看到查询出指定sid值对应的用户为test。
(6) 查询指定域用户属于哪些组
以下命令是查询指定域用户administrator属于哪些组。有两种查询方式,查询的结果一样,但是返回的objects数量不一样
Adfind.exe -s subtree -b CN=administrator,CN=users,DC=xie,DC=com memberOf``或``Adfind.exe -s subtree -f "(member="CN=administrator,CN=users,DC=xie,DC=com")" dn
如图所示,两条命令查询的结果是一样,但是返回的objects数量却不一样。
(7) 递归查询指定域用户属于哪些组
以下命令是递归查询指定用户属于哪些组。查询指定域用户属性哪些组,并且查询属于的组又属于哪些组,一直递归查询下去。
Adfind.exe -s subtree -b dc=xie,dc=com -f "(member:INCHAIN:="CN=administrator,CN=users,DC=xie,DC=com")" -bit -dn
如图所示,可以看到一直递归查询administrator所属的组。
(8) 查询域内开启”Do not require Kerberos preauthentication”选项的用户
如下命令是查询域内开启了不需要域认证的用户。
Adfind.exe -f "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" -dn
如图所示,可以看到查询到hack用户开启了不需要域认证。
(9) 查询受保护的用户
如下命令是查询域内受保护的用户。
Adfind.exe -f "&(objectcategory=person)(samaccountname=*)(admincount=1)" -dn
如图所示,查询到三个用户在域内受保护。
(10) 查询users容器下所有对象
如下命令是查询users容器下的所有对象。
AdFind.exe -users -dn
如图所示,可以看到users容器下的所有对象。
(11) 查询已禁用的账户
标识用户是否被禁用的位置位于userAccountControl属性中,具体的位置为0x0002。
参考:UserAccountControl 属性标志 - Windows Server | Microsoft Learn
AdFind.exe -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=2))" -dn
(12) 查询被锁定的账户
可以通过用户的lockoutTime属性来判断用户是否被锁定。
AdFind.exe -f "(&(sAMAccountType=805306368)(lockoutTime>=1))" -dn
(13) 查询密码永不过期的用户
AdFind.exe -f "(&(samAccountType=805306368)(|(UserAccountControl:1.2.840.113556.1.4.803:=65536)(msDS-UserDontExpirePassword=TRUE)))" -dn
(14__)查询使用可逆加密存储密码的账户
AdFind.exe -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=128))" -dn
(15) 查询不需要设置密码的账户
useraccountcontrol:1.2.840.113556.1.4.803:=32 表示查询不需要设置密码的账户。
adfind -default -f "&(objectcategory=person)(objectclass=user)(useraccountcontrol:1.2.840.113556.1.4.803:=32)" -dn
5. 组相关
下面这几个是与组相关的查询命令。
(1) 查询域内所有的组
Adfind.exe -f "objectClass=group" -dn
(2) 查询域内所有的全局组
以下命令是查询域内所有的全局组。
Adfind.exe -f "(grouptype=-2147483646)" -dn
如图所示,可以看到查询出域内所有的全局组。
(3) 查询域内所有通用组
以下命令是查询域内所有的通用组。
Adfind.exe -f "(grouptype=-2147483640)" -dn
如图所示,可以看到查询出域内所有的通用组。
(4) 查询域内所有的本地域组
以下命令是查询域内所有的本地域组。
Adfind.exe -f "(|(grouptype=-2147483644)(grouptype=-2147483643))" -dn
如图所示,可以看到查询出域内所有的本地域组。
(5) 查询指定组含有哪些对象
以下命令是查询指定组含有哪些对象。有两种查询方式,查询的结果一样,但是返回的objects数量不一样。
Adfind.exe -s subtree -b "CN=Domain Admins,CN=Users,DC=xie,DC=com" member或Adfind.exe -s subtree -b dc=xie,dc=com -f "(memberof="CN="Domain Admins",CN=Users,DC=xie,DC=com")" -dn
如图所示,两条命令查询的结果是一样,但是返回的objects数量却不一样。
(6) 递归查询指定组含有哪些域用户
以下命令会递归查询指定组中含有哪些域用户。
Adfind.exe -s subtree -b dc=xie,dc=com -f "(memberof:INCHAIN:="CN="Domain Admins",CN=Users,DC=xie,DC=com")" -bit -dn
如图所示,可以看到一直递归查询Domain Admins组中含有的用户。
6. 委派相关
下面这几个是与委派相关的查询命令。
(1) 非约束性委派
如下命令是查询配置了非约束性委派的主机和服务帐户。
#查询域中配置非约束性委派的主机
AdFind.exe -b "DC=xie,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn ``
#查询域中配置非约束性委派的服务帐户
AdFind.exe -b "DC=xie,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn
如图所示,可以看到查询出配置了非约束性委派的主机和服务帐户。
(2) 约束性委派
如下命令是查询配置了约束性委派的主机和服务帐户。
#查询域中配置了约束性委派的主机,并可以看到被委派的SPN AdFind.exe -b "DC=xie,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto #查询域中配置了约束性委派的服务账户,并可以看到被委派的SPN AdFind.exe -b "DC=xie,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
如图所示,可以看到查询出配置了约束性委派的主机和服务帐户。
(3) 基于资源的约束性委派
如下命令是查询配置了基于资源的约束性委派的主机和服务帐户。
#查询域中配置基于资源的约束性委派的主机 AdFind.exe -b "DC=xie,DC=com" -f "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" msDS-AllowedToActOnBehalfOfOtherIdentity#查询域中配置基于资源的约束性委派的服务账户 AdFind.exe -b "DC=xie,DC=com" -f "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" msDS-AllowedToActOnBehalfOfOtherIdentity
如图所示,可以看到查询出配置了基于资源的约束性委派的主机和服务帐户。
7.其他
下面这几个是一些其他的实战中比较常用的命令。
(1) 查找域内具备Dcsync权限的用户
如下命令是查询域中具备DCSync权限的用户。
#查找域中具有复制目录权限的用户AdFind.exe -s subtree -b "DC=xie,DC=com" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute -resolvesids#查找域中具有复制目录所有项权限的用户AdFind.exe -s subtree -b "DC=xie,DC=com" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes All";; -recmute -resolvesids
如图所示,查询域中具备Dcsync权限的用户。
(2) 查询域内的OU组织单位
如下命令是查询域中的OU组织单位,其会递归查询域内的所有OU组织单位
Adfind.exe -f "objectClass=organizationalUnit" -dn
如图所示,可以看到查询出域捏的OU组织单位。
(3) 查询域的ACL
如下命令是查询域的ACL。
Adfind.exe -b DC=xie,DC=com -sc getacl
如图所示,可以看到查询出域xie.com的ACL。
(4) 查询rightsGuid对应的扩展权限
如下命令是查询指定rightsGuid对应的扩展权限。
Adfind.exe -b CN=Extended-Rights,CN=Configuration,DC=xie,DC=com -f "rightsGuid=1131f6aa-9c07-11d1-f79f-00c04fc2dcd2" dn
如图所示,可以看到查询到rightsGuid为1131f6aa-9c07-11d1-f79f-00c04fc2dcd2对应的扩展权限是DS-Replication-Get-Changes。
(5) 查询域内所有GPO
如下命令是查询域内所有的GPO组策略。
AdFind.exe -sc gpodmp
如图所示,可以看到查询出域内所有的GPO组策略。
(6) 查询域内高权限的SPN
如下命令是查询域内具有高权限的SPN的帐户。
Adfind.exe -b "DC=xie,DC=com" -f "&(servicePrincipalName=*)(admincount=1)" servicePrincipalName
如图所示,可以看到查询出具有高权限的SPN的帐户krbtgt。
(7) 查询域内的所有邮箱
如下命令是将域内所有的邮箱以csv的格式显示出来。
Adfind.exe -f "mail=*" mail -s Subtree -recmute -csv mobile
如图所示,可以看到将域内所有的邮箱以csv的格式显示出来。
Adfind.exe -b dc=xie,dc=com -f "(&(objectCategory=person)(objectClass=user))" mail | findstr mail:
(8) 查询域内的所有手机号以csv格式显示
如下命令是将域内所有的手机号以csv的格式显示出来。
Adfind.exe -f "telephonenumber=*" telephonenumber -s Subtree -recmute -csv mobile
如图所示,可以看到将域内所有的手机号以csv的格式显示出来。
(9) 查询域内的ms-DS-MachineAccountQuota属性
Adfind.exe -b dc=xie,dc=com -f "ms-DS-MachineAccountQuota=*" ms-DS-MachineAccountQuota
(10) 查询域功能级别和林功能级别
#查询域功能级别Adfind.exe -default -f "(objectcategory=domain)" domainfunctionality#查询林功能级别Adfind.exe -default -f "(objectcategory=forest)" forestfunctionality