Windows 域之 LDAP与AD

前言

笔者最近打算系统的学习以下内网渗透以及域渗透的一些知识,一方面对之前学习过的知识进行梳理,另一方面则对未曾进行深入了解的知识进行学习,本系列大概率会首先对计算机域内的一些基础概念,知识进行总结,然后对内网渗透、域渗透技术进行总结,若有侵权请联系删除。

LDAP与AD简介

LDAP 全程为Lightweight Directory Access Protocol,轻量目录访问协议。顾名思义,LDAP这个协议是设计出来访问目录这个东西的。不过这种说法并不准确,应当说是设计出来访问目录数据库的。

在计算机域中,目录服务数据库存储着整个域内所有的计算机,用户等的所有信息。 目录服务由 目录服务数据库 + 访问协议组成。

目录服务数据库本质上就是一个数据库,用来存储数据的,只不过组织数据的方式与普通关系型数据库(如MySQL、Oracle数据库)不同,主要有以下两个特点

  • 它成树状结构组织数据,类似文件目录一样。
  • 它是为查询、浏览和搜索而优化的数据库,也就是说LDAP的读性能特别强,但是写性能差,而且还不支持事务处理、回滚等复杂功能。

为了能够访问目录数据库,必须存在一种能够访问目录服务数据库的协议,LDAP是其中一种实现协议。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NAKLsuLf-1615557992231)(BB7B16E5690E49A69897B1926D7B3D06)]

如上图所示是目录服务数据库,它成树状结构组织数据。下面介绍一些基本概念

  • 目录树:如上图所示,在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
  • 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。比如图中的每个圆圈都是一条记录。
  • DN,RDN:比如说第一个叶子条目,他有一个唯一可区分的名称DN:uid=bob,ou=people,dc=acme,dc=org。类似于文件目录的相对路径绝对路径,他除了有个DN之外,还有个RDN,他与目录结构无关,比如之前咱们提过的uid=bob,ou=people,dc=acme,dc=org,他的RDN就是uid=bob
  • 属性:描述条目具体信息。比如`uid=bill,ou=people,dc=acme,dc=org,他有属性name 为bill,属性age为11,属性school 为xx。
    在这里插入图片描述

下图为各个厂商对目录服务数据库实现的产品

在这里插入图片描述

可以看出 AD即Active Directory 是微软对目录服务数据库的实现方式,而LDAP 则是为访问Active Directory 而设计的访问协议。

想要链接 Active Directory有两种方法

  • 每台与控制都有一份完整的Active Directory ,可以链接域控的389和636端口,636为LDAPS来进行修改查询。
  • 若不知道对象处于哪一个域,也知道对象名称,微软提出全局编录服务器(GC,Global Catalog), 全局编录服务器中除了保存本域中所有对象的所有属性外,还保存林中其它域所有对象的部分属性,这样就允许用户通过全局编录信息搜索林中所有域中对象的信息。也就是说如果需要在整个林中进行搜索,而不单单是在具体的某个域进行搜索的时候,可以连接域控的3268/3269端口。

Naming Context 与 Application Partitions

一个林中有若干个域,每个域内有若干台域控,每台域控有一个独立的Active Directory。这个时候就有必要将数据隔离到多个分区中,如果不隔离的话,则每个域控制器都必须复制林中的所有数据。若隔离为若干个分区之后,就可以有选择性的复制某几个分区。微软将Active Directory划分为若干个分区(这个分区我们称为Naming Context,简称NC),每个Naming Context都有其自己的安全边界。

微软自定义了的三个预定义的 Naming Context

  • Configuration NC(Configuration NC)
  • Schema NC(Schema NC)
  • Domain NC(DomainName NC)

Configuration NC内存储的主要是配置信息,关站点,服务,分区和Active DirectorySchema 的信息,处于根域之下,并复制到林中的每个域控中。

Schema NC 存储的Active Directory中存储的对象的定义,个人感觉类似Mysql中的元数据库的概念,包含Schema 信息,定义了Active Directory中使用的类和属性。

Domain NC 每个域都有一个域Naming Context,不同的域内有不同的域Naming Context,其中包含特定于域的数据。之前我们说过,域内的所有计算机,所有用户的具体信息都存在Active Directory底下。


搜索Active Directory

通过查询目录,可以直接收集到要求的数据。查询目录需要指定两个要素

  • BaseDN
  • 过滤规则

BaseDN

比如指定BaseDN为DC=test.DC=local就是以DC=test.DC=local为根往下搜索

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpfnypwk-1615557992235)(A4C4B12F5E7B421B919902734F9282E6)]

过滤规则

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开头的所有对象。

一个需要注意的点就是运算符是放在前面的,跟我们之前常规思维的放在中间不一样


访问AD的工具

  • ADSI 编辑器 微软自带,输入adsiedit.msc可访问
  • ADExplorer ,https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer

参考

https://daiker.gitbook.io/windows-protocol/ldap-pian/8

猜你喜欢

转载自blog.csdn.net/qingzhantianxia/article/details/114710005