目录

查询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

attributeSyntax2.5.5.9,oMSyntax2

查表可知是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=comobjectClasstop,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=comlDAPDisplayName 是 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这个对象。他的objectClasstop,person,organizationalPerson,user。他的objectCategoryperson

  • 一个对象的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相关推荐

  1. 使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录

    使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 [十七]部署 AFS 客户端 2 统一身份登录 Linux 统一身份登录和查询 POSIX 属性 (POS ...

  2. C# AD(Active Directory)域信息同步,组织单位、用户等信息查询

    转自:http://blog.csdn.net/lingpaoershiyishiji/article/details/9139527 目录 示例准备 知识了解 读取AD域信息示例 Directory ...

  3. 域渗透基础知识(二)之活动目录 Active Directory 的查询

    目录 Active Directory Active Directory 的查询基础语法 什么是BaseDN 什么是Naming Context 什么是LDAP(轻量级目录访问协议) 过滤规则 LDA ...

  4. 活动目录(Active Directory)域故障解决实例

    A1.客户机无法加入到域? 一.权限问题. 要想把一台计算机加入到域,必须得以这台计算机上的本地管理员(默认为administrator)身份登录,保证对这台计算机有管理控制权限.普通用户登录进来,更 ...

  5. 详解操作主机角色,Active Directory系列之九

                           Active Directory操作主机详解<?xml:namespace prefix = o ns = "urn:schemas-mi ...

  6. Active Directory操作主机详解

    操作主机角色共有五种,分别是PDC主机,RID主机,结构主机,域命名主机和架构主机,今天的这篇博文将分别介绍五种操作主机的用途.我们先来介绍PDC主机,PDC是主域控制器的缩写,在NT4时代,域控制器 ...

  7. SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理——深入的话需要去折腾Azure Active Directory...

    SRV记录 SRV记录 什么情况下会用到SRV记录? [SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理] SRV记录的添加方式 A.主机记录处格式为:服务的名字.协议的类型 例如 ...

  8. 管理 Active Directory 所必需的工具或技术

    管理 Active Directory 所必需的工具或技术 必需的技术 --------------------- 说明 位置 备份工具 执行备份和还原操作.它随 Windows Server 200 ...

  9. Active Directory的复制拓扑,Active Directory系列之八

    Active Directory的复制拓扑    在前面的博文中我们在域中部署了额外域控制器,而且我们已经知道每个域控制器都有一个内容相同的Active Directory数据库,今天我们要讨论一下额 ...

最新文章

  1. JAVAC 命令详解 -d表示目录
  2. 人机协同作战:或改写未来战争规则
  3. python学到什么程度可以做兼职-Python学到什么程度就可以找工作?
  4. python 日期格式和字符串格式的转化
  5. 2017-2018-2 20179302《网络攻防》第十一周作业
  6. C++ SYN攻击源码
  7. 数据库设计中常见表结构的设计技巧(转)
  8. STC学习:485双机通信
  9. sqlalchemy mysql配置中怎么设置utf8_python – 使用SQLAlchemy和pymysql,如何设置连接以使用utf8mb4?...
  10. python的除法_python中的除法
  11. 多个无线 AP 怎么实现无缝漫游?
  12. 【uniappAPP实现支付宝授权登录】
  13. 微信html 全屏显示,关于微信上网页图片点击全屏放大效果
  14. Vision.CascadeObjectDetector-VJ算法学习
  15. 量子计算机论坛,IBM量子计算机取得重大突破
  16. 中国定制家具市场营销态势与盈利前景预测报告(2022-2028年)
  17. 去哪儿网上海景点数据爬虫分析
  18. 复旦大学信息科学与工程考研经验
  19. 牛客 NC201908 小睿睿的伤害(dsu on tree, 启发式合并)
  20. Remind myself

热门文章

  1. java 网络流量统计_项目中用到的一个简单的流量统计例子-java流量统计
  2. iOS armv7,armv7s, arm64
  3. 尚观学习-ule-权限
  4. Instrumentation的含义和ActivityThread的关系
  5. GIS在地质灾害危险性评估与灾后重建中的应用
  6. 使用hammer.js实现移动端手指滑动切换轮播图教程
  7. 计算机科学速成课 Crash Course Computer Science 第三十集 万维网 The World Wide Web
  8. 组成原理(三):存储器(上)
  9. Jmeter—使用http代理服务器录制页面遇到的问题解决办法
  10. C++下ctrl+z退出cin输入循环