查询Active Directory
目录
查询Active Directory
BaseDN
过滤规则
LDAP高级搜索语法
LDAP 查找中的位操作
LDAP 查找中的objectCategory和objectClass
查询Active Directory
通过查询目录,可以直接收集到要求的数据。查询目录需要指定两个要素
- BaseDN
- 过滤规则
BaseDN
BaseDN指定了这棵树的根。比如指定BaseDN为DC=xie,DC=com
就是以DC=xie.DC=com
为根往下搜索
BaseDN为CN=Users,DC=xie.DC=com
就是以CN=Users,DC=xie.DC=com
为根往下搜索
过滤规则
LDAP 过滤规则相对简单,很方便入手
LDAP 搜索过滤器语法有以下子集:
- 用与号 (&) 表示的 AND 运算符。
- 用竖线 (|) 表示的 OR 运算符。
- 用感叹号 (!) 表示的 NOT 运算符。
- 用名称和值表达式的等号 (=) 表示的相等比较。
- 用名称和值表达式中值的开头或结尾处的星号 (*) 表示的通配符。
下面举几个例子:
- (uid=testuser):匹配 uid 属性为testuser的所有对象
- (uid=test*):匹配 uid 属性以test开头的所有对象
- (!(uid=test*)):匹配 uid 属性不以test开头的所有对象
- (&(department=1234)(city=Paris)):匹配 department 属性为1234且city属性为Paris的所有对象
- (|(department=1234)(department=56*)):匹配 department 属性的值为1234或者以56开头的所有对象。
一个需要注意的点就是运算符是放在前面的,跟我们之前常规思维的放在中间不一样。
关于查询目录还有一些高级点的用法,比如 LDAP 控件,位掩码等。
LDAP高级搜索语法
LDAP 查找中的位操作
在LDAP 里面,有些字段是位字段,这里以userAccountControl举例,关于这个字段的详细意义,后面会详细介绍,这里先把他当做一个普通的位字段,不去考虑他的具体含义,这里先看下他的内容。
他的属性类位于架构分区的 CN=User-Account-Control,CN=Schema,CN=Configuration,DC=xie,DC=com
attributeSyntax
是2.5.5.9,
oMSyntax
是2
。
查表可知是32位的Integer类型。
之所以我们说他是位字段,是因为他是由一个个位构成。
比如说一个账户,他只有LOCKOUT和NOT_DELEGATED有值,其他位都没有。那这个用户的属性userAccountControl
的值就为0x0010+0x100000。是个32 位 int 类型。
现在如果我要搜索域内userAccountControl属性的值为NOT_DELEGATED的所有对象。那么用之前简单的LDAP语法就显得力不从心。简单的LDAP搜索语法只能对某个属性进行过滤,还不能对属性里面的某个具体位进行过滤。所以这也是我们这一节要讲的内容。LDAP的语法支持按位搜索。
执行过滤器以搜索位字段,必须遵循以下语法:
<属性名称>:<BitFilterRule-ID>:= <十进制比较值>
其中的<BitFilterRule-ID>
,内容如下。
我们最常的是LDAP_MATCHING_RULE_BIT_AND ,也就是1.2.840.113556.1.4.803
我们举几个例子。
我们想查询哪些对象设置了 TRUSTED_FOR_DELEGATION
TRUSTED_FOR_DELEGATION
对应的十进制比较值为524288
根据语法,我们就可以构造以下过滤规则
(userAccountControl:1.2.840.113556.1.4.803:=524288)
adfind的查询命令如下
adfind.exe -b dc=xie,dc=com -f "(userAccountControl:1.2.840.113556.1.4.803:=524288)" -bit -dn
但是使用这种语法我们还得去记BitFilterRule,于是adfind提供了一个更为快捷的方式。
adfind.exe -b dc=xie,dc=com -f "(userAccountControl:AND:=524288)" -bit -dn
LDAP 查找中的objectCategory和objectClass
(1) objectClass
在前面一节里面说过,在对象的objectClass
属性里面,可以看到这个对象是哪个类的实例,以及这个类的所有父类,比如说CN=test,CN=Users,DC=xie,DC=com
的objectClass
是top,person,organizationalPerson,user
。那我们通过过滤语句(objectClass=user)
,(objectClass=organizationalPerson)
都能找到这个对象。
所有的类都是top
类的子类。因此当我们过滤(objectClass=top)
可以找到域内的所有对象。
adfind.exe -b dc=xie,dc=com -s subtree -bit -f "(objectclass=*)" -c
adfind.exe -b dc=xie,dc=com -s subtree -bit -f "(objectclass=top)" -c
(2) objectCategory
在Windows Server 2008之前默认不对objectClass属性进行索引。最初认为对多值属性(如objectClass)进行索引会导致性能下降。如此一来,Windows 2000 附带了未索引的objectClass 属性和另一个已建立索引的单值属性,称为objectCategory。
接下来介绍下objectCategory
这个属性。对象类的每个实例还具有一个objectCategory属性,该属性是一个单值属性。并且建立了索引。其中包含对象是其实例的类或其父类之一的专有名称。
比如说CN=hack,CN=Users,DC=xie,DC=com
他的objectCategory
是 CN=Person,CN=Schema,CN=Configuration,DC=xie,DC=com
创建对象时,系统会将其objectCategory属性设置为由其对象类的defaultObjectCategory
属性指定的值,无法更改对象的objectCategory属性。
如果我们想过滤所有objectCategory的属性为CN=Person,CN=Schema,CN=Configuration,DC=xie,DC=com
的对象,这个很简单。
(objectCategory="CN=Person,CN=Schema,CN=Configuration,DC=test,DC=local")
adfind查询语法如下
adfind.exe -b dc=xie,dc=com -s subtree -bit -f "(objectCategory="CN=Person,CN=Schema,CN=Configuration,DC=xie,DC=com")" -dn
但是这样,又有点不方便,需要记住记住类的DN,所以LDAP在实现上实现了个小技巧。对象类有个属性lDAPDisplayName
,指定他的显示名。事实上,我们看objectClass
属性里面的类以及父类(比如top.person),他的名字都是这个类的lDAPDisplayName。
CN=Person,CN=Schema,CN=Configuration,DC=xie,DC=com
的lDAPDisplayName
是 person。
所以LDAP在实现上,支持用类的lDAPDisplayName
作为搜索条件。所以如果我们想找所有CN=Person,CN=Schema,CN=Configuration,DC=xie,DC=com
的实例,可以简化为以下过滤规则。
(objectCategory=person)
adfind搜索语法为
adfind.exe -b dc=xie,dc=com -s subtree -bit -f "(objectCategory=person)" -dn
(3) objectClass 与objectCategory的结合使用
如果想确保查询在所有版本的Active Directory上都能正常运行,建议使用 objectClass 和 objectCategory 结合。如果在目录中已经索引了ObjectClass ,或者所有域控制器都在运行Windows Server 2008或更高版本,则可以随意使用 objectClass,而不必担心会对性能产生影响。
这里我们介绍下objectClass 和 objectCategory 的结合使用。前面我们分别介绍了objectClass 以及objectCategory,但是没讲怎么把他们结合在一起使用。
我们这里再来理一理思路。
CN=hack,CN=Users,DC=xie,DC=com
这个对象。他的objectClass
是top,person,organizationalPerson,user
。他的objectCategory
是person
。
- 一个对象的
objectClass
是一个类的对象类,以及这个对象类的所有父类。 - 一个对象的
objectCategory
是一个类的对象类或者这个对象类的所有父类。
所以说一个对象的objectCategory
必定是objectClass
中的其中一个。
user,person,organizationalPerson类将其defaultObjectCategory设置为person。这允许像(objectCategory= person)这样的搜索过滤器通过单个查询定位所有这些类的实例。
比如说,我们要定位所有的user 类的实例。(CN=test,CN=Users,DC=xie,DC=com
就是user类的一个对象)
user 类的继承关系如下。
top => person => organizationalPerson => user
那person
,organizationalPerson
,user
都将其defaultObjectCategory设置为person。因此我们可以先过滤。
(objectCategory=person)
但是这样的结果并不精准。我们使用objectClass进一步在过滤后的结果进行过滤
(&(objectCategory=person)(objectClass=user))
这样就能精准匹配到了。其实说通俗点就是,objectCategory建立索引,所以查询时间比较快。我们通过objectCategory划分一个大的范围,然后通过objectClass进行精准匹配。
当然如果在目录中已经索引了ObjectClass ,或者所有域控制器都在运行Windows Server 2008或更高版本,我们直接使用 objectClass((objectClass=user)
) 也能很精准地匹配并且不用考虑效率问题。
参考文章:https://daiker.gitbook.io/windows-protocol/ldap-pian/8#0x06-sou-suo-active-directory
查询Active Directory相关推荐
- 使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录
使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 [十七]部署 AFS 客户端 2 统一身份登录 Linux 统一身份登录和查询 POSIX 属性 (POS ...
- C# AD(Active Directory)域信息同步,组织单位、用户等信息查询
转自:http://blog.csdn.net/lingpaoershiyishiji/article/details/9139527 目录 示例准备 知识了解 读取AD域信息示例 Directory ...
- 域渗透基础知识(二)之活动目录 Active Directory 的查询
目录 Active Directory Active Directory 的查询基础语法 什么是BaseDN 什么是Naming Context 什么是LDAP(轻量级目录访问协议) 过滤规则 LDA ...
- 活动目录(Active Directory)域故障解决实例
A1.客户机无法加入到域? 一.权限问题. 要想把一台计算机加入到域,必须得以这台计算机上的本地管理员(默认为administrator)身份登录,保证对这台计算机有管理控制权限.普通用户登录进来,更 ...
- 详解操作主机角色,Active Directory系列之九
Active Directory操作主机详解<?xml:namespace prefix = o ns = "urn:schemas-mi ...
- Active Directory操作主机详解
操作主机角色共有五种,分别是PDC主机,RID主机,结构主机,域命名主机和架构主机,今天的这篇博文将分别介绍五种操作主机的用途.我们先来介绍PDC主机,PDC是主域控制器的缩写,在NT4时代,域控制器 ...
- SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理——深入的话需要去折腾Azure Active Directory...
SRV记录 SRV记录 什么情况下会用到SRV记录? [SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理] SRV记录的添加方式 A.主机记录处格式为:服务的名字.协议的类型 例如 ...
- 管理 Active Directory 所必需的工具或技术
管理 Active Directory 所必需的工具或技术 必需的技术 --------------------- 说明 位置 备份工具 执行备份和还原操作.它随 Windows Server 200 ...
- Active Directory的复制拓扑,Active Directory系列之八
Active Directory的复制拓扑 在前面的博文中我们在域中部署了额外域控制器,而且我们已经知道每个域控制器都有一个内容相同的Active Directory数据库,今天我们要讨论一下额 ...
最新文章
- JAVAC 命令详解 -d表示目录
- 人机协同作战:或改写未来战争规则
- python学到什么程度可以做兼职-Python学到什么程度就可以找工作?
- python 日期格式和字符串格式的转化
- 2017-2018-2 20179302《网络攻防》第十一周作业
- C++ SYN攻击源码
- 数据库设计中常见表结构的设计技巧(转)
- STC学习:485双机通信
- sqlalchemy mysql配置中怎么设置utf8_python – 使用SQLAlchemy和pymysql,如何设置连接以使用utf8mb4?...
- python的除法_python中的除法
- 多个无线 AP 怎么实现无缝漫游?
- 【uniappAPP实现支付宝授权登录】
- 微信html 全屏显示,关于微信上网页图片点击全屏放大效果
- Vision.CascadeObjectDetector-VJ算法学习
- 量子计算机论坛,IBM量子计算机取得重大突破
- 中国定制家具市场营销态势与盈利前景预测报告(2022-2028年)
- 去哪儿网上海景点数据爬虫分析
- 复旦大学信息科学与工程考研经验
- 牛客 NC201908	小睿睿的伤害(dsu on tree, 启发式合并)
- Remind myself
热门文章
- java 网络流量统计_项目中用到的一个简单的流量统计例子-java流量统计
- iOS armv7,armv7s, arm64
- 尚观学习-ule-权限
- Instrumentation的含义和ActivityThread的关系
- GIS在地质灾害危险性评估与灾后重建中的应用
- 使用hammer.js实现移动端手指滑动切换轮播图教程
- 计算机科学速成课 Crash Course Computer Science 第三十集 万维网 The World Wide Web
- 组成原理(三):存储器(上)
- Jmeter—使用http代理服务器录制页面遇到的问题解决办法
- C++下ctrl+z退出cin输入循环