1 概述

Active Directory ( AD ) 是一个用于 Windows 企业环境的目录服务,于 2000 年随 Windows Server 2000 的发布正式实施,并且随着后续服务器操作系统的发布而逐步改进。

AD 基于其之前的 x.500 和 LDAP 协议,并且至今仍在某种程度上使用这些协议。

它是一个分布式、层次化的结构,允许对组织的资源进行集中管理,包括用户、计算机、组、网络设备、文件共享、组策略、设备和信任关系。AD 在 Windows 企业环境中提供 authentication, accounting, and authorization 功能。

2 Windows域简介

2.1 工作组

工作组:工作组是局域网中的一个概念,是长久的资源管理模式。默认情况下使用工作组方式进行资源管理,将不同的电脑按照不同的要求分类到不同的组

2.2 域

域:用来描述一种架构,和工作组相对应,由工作组升级而成的高级架构。域是一个有安全边界的计算机集合(安全边界,是指在两个域中,其中一个域的用户没办法访问另一个域的资源)。相比于工作组而言,域有一个更加严格的安全管理控制机制。

2.2.1 域的几种环境

  • 单域
    • 通常是一个小公司,一般一个域就可以,一个域内要至少两台域服务器,一台作为域控制器,另一台作为备份
    • 活动目录的数据库(包括用户的账号信息)是存储在域控制器中的
  • 父域和子域
    • 处于管理的要求,需要在网络中划分出多个域。第一个域称为父域,其他为子域
  • 域树
  • 域森林

2.2.2 域名服务器 DNS

是指用于实现域名与与之相对应的IP地址转换的服务器,从对域树的介绍中来看出,域树中的域名和DNS域名非常相似,实际上,因为域名的计算机是通过DNS来定位域控制器、服务器及其他计算机、网络服务的,所以域的名字就是DNS域的名字

在实际内网渗透测试中,大多数是通过寻找DNS服务器来确定域控制器的位置的(DNS服务器和域服务器通常配置在同一台机器中)

2.2.3 域术语

  • DC:域控,域的创造者
  • 域管理:域控上的管理者
  • AD:共享同一 AD 数据库、安全策略与信任边界的网络对象集合
  • NTDS dit:域用户账户以域数据库的形式保存在活动目录中
  • Ntdstuil.exe:是域控制器中自带的域数据库管理工具,因此可以从ntdsutil.exe提取域中的所有域用户信息
  • 常见结构:组织单元(OU)、域(DOMAIN)、域树(tree)、域森林(forest),在域树内所有域共享一个活动目录,这个活动目录内的数据分散地存储在各个域内,且每一个域存储该域内的数据

2.2.3.1 域控DC

在域架构中域控是用来管理所有客户端的服务器,它负责每一台连入的电脑和用户验证工作,域内电脑如果想相互访问首先得经过它的审核

域控是域架构的核心,每个域控制器上都包含了AD活动目录数据库

一个域中可能应该要有两个域控,一个DC,一个备份DC,如果没有两个DC,一旦DC瘫痪,则域内的其他用户就无法登录域了,因为活动目录的数据库(包括用户的账号消息)存储在DC中。当域中的一台计算机安装AD后,它就成了域控DC了

2.2.3.2 活动目录

  • 账号集中管理:所有账号均存在服务器上,方便对账号的重命名/重置密码
  • 软件集中管理:统一推送软件,统一安装网络打印机等。利用软件发布策略发布软件,可以让用户自由选择安装软件
  • 环境集中管理:利用AD可以统一客户段桌面,IE,TCP/IP等设置
  • 增强安全性:统一部署杀毒软件和扫毒任务,集中化管理用户的计算机权限、统一制定用户名密码策略等,可监控网络、资料统一管理。
  • 更可靠:;更少的宕机时间。
  • 活动目录为Microsoft统一管理平台的基础平台,其他ISA、Exchange、SMS等服务都是依赖于该平台

2.2.3.3 NTDS.dit

域用户账户以数据库形式保存在活动目录中,NTDS.dit是活动目录的数据库文件,由下列三个表:

  • Schema表:包含了所有可在活动目录创建的对象信息以及他们之间的相互关系,包括各种类型的可选以及不可选的各种属性,是最小也是最基础的一个表
  • Link表:包含所有属性的关联,包括活动目录中所有对象的属性的值,一个用户对象的所有属性的类型,包括每个属性的值以及用户所属于的组等信息都属于这个表,比Data表小
  • Data表:活动目录中用户、组、应用程序特殊数据以及其他数据全在Data表中,大量的活动目录资料实际上保存在这个表中

2.2.3.4 逻辑结构

活动目录的逻辑结构主要由以下四个层级的组件构成,它们决定了如何对资源进行组织、管理以及如何应用安全策略:

  • 组织单位
    • 概念:活动目录中最小的、可以指派组策略 (GPO) 或委派管理权限的容器对象。
    • 作用:可以将用户、组、计算机以及其他的 OU 放入其中,形成层次结构。它的主要目的是方便管理员对不同部门或层级进行精细化管理和权限下放。
  • 域
    • 概念:活动目录逻辑结构的核心单位,是一个基本的管理边界和安全边界。
    • 作用:每个域都有自己独立的安全策略和访问控制列表。在同一个域内,对象可以被集中管理。上文提到的域控 (DC) 就是基于“域”这个级别的。
  • 域树
    • 概念:由一个或多个共享连续命名空间的域组成。
    • 作用:例如,根域为 example.com,其子域可以是 sales.example.com 和 hr.example.com。域树中的所有域通过“双向传递信任关系”自动连接,使得跨域资源访问成为可能。
  • 域森林
    • 概念:由一个或多个不共享连续命名空间的域树组成的集合。它是活动目录中最高级别的逻辑结构和最大的安全边界。
    • 作用:例如,example.com 和 test.net 可以在同一个森林中。森林中的所有域共享同一个架构 (Schema,即 NTDS.dit 中的 Schema 表) 和全局编录 (Global Catalog)。森林内的不同域树之间也存在传递信任。

2.2.3.5 DNS域名服务器

在Windows域环境中,DNS(域名系统)扮演的角色远比在普通互联网中进行简单的网址解析重要得多。它是活动目录(Active Directory)赖以生存的基础设施,可以说,没有DNS,整个域环境就无法正常运作。

  • 定位域控制器,也就是通过SRV(服务位置)记录实现服务发现。当一台普通域成员电脑开机并尝试登录域时,它本身并不知道域控的具体网络位置。此时,它会向DNS服务器发送查询请求,寻找负责该域的域控制器。DNS服务器通过读取内部的SRV记录,将域控制器的IP地址返回给客户端计算机,客户端随后才能向域控准确提交账号和密码进行身份验证。
  • 域名解析:它将域内的计算机名映射为对应的内网IP地址,确保域内的服务器、工作站和共享资源之间可以通过易记的主机名进行顺畅的通信。为了降低网络维护成本,域环境中的DNS通常支持动态更新机制。这意味着当域内的客户端计算机通过DHCP获取到新的IP地址或更改了主机名时,它们会自动向DNS服务器注册并更新自己的解析记录,无需管理员进行繁琐的手动修改。

1. 独立于活动目录的 DNS(标准区域模式)

  • 存储位置:在这种模式下,DNS 的解析记录(包括 A 记录、SRV 记录等)不存储在活动目录的 NTDS.dit 数据库中。相反,它们被保存在 DNS 服务器本地的传统文本文件(通常是 .dns 区域文件)里。
  • 完全解绑:这个 DNS 服务器甚至不需要是 Windows Server。您完全可以使用一台搭建了 BIND 服务的 Linux 服务器 来作为整个 Windows 域环境的 DNS 服务器。
  • 前提条件:虽然 DNS 是独立的,但为了让活动目录能正常工作,这个独立的 DNS 服务器必须支持两点:支持 SRV 资源记录(用于定位域控)和 支持动态更新(RFC 2136标准,让域内机器能自动注册IP)。
    • SRV服务记录时DNS服务器的数据库中支持的一种资源记录的类型,它记录了哪台服务器提供哪个服务这么一个简单的信息
    • SRV服务记录:一般是作为活动目录AD设置的应用。DNS可以独立于活动目录,但是活动目录必须有DNS的帮助才能工作。为了活动目录能够正常的工作,Dns服务器必须支持服务定位资源记录,资源记录把服务名字映射为提供服务的服务器名称。域主机和域控制器使用SRV资源记录决定域控制器的IP地址和提供服务的服务器IP地址 2. 与活动目录集成的 DNS(主流推荐模式)
  • 存储位置:这就是我上一条回复中提到的情况,管理员在配置时选择将 DNS 区域与 AD 集成。此时,传统的区域文本文件被废弃,所有的 DNS 记录都变成了活动目录中的对象,直接写入 NTDS.dit 数据库。
  • 优势:这种做法的目的是为了利用 AD 的多主复制机制来实现 DNS 数据的安全同步,方便管理,因此成为了绝大多数企业内网的首选方案。

2.2.3.6 域信任关系

域之间的信任关系,相当于是不同的域之间的桥梁,域信任分为单向信任和双向信任

单向信任:只能是受信任域访问信任域,而信任域不能访问受信任域。双向信任是相互都信任

父子关系:父域和子域自动建立起双向信任关系,并且信任关系可以传递

树信任:同一个林中,林根域与其他根域自动建立双向信任关系,可传递

3 密码加密方式

3.1 哈希介绍

Windows操作系统使用两种方法对用户明文密码进行加密处理。在域环境中,用户信息存储在ntds.dit中,加密后为散列值

username:RID:LM-HASH:NT-HASH
  • LM-HASH,全称:LAN Manager Hash,采用DES加密算法,较容易被破解(DES加密存在漏洞),2008版本开始默认禁用,但未删除。明文被限定在14位以内。被禁用时抓取的LM Hash值为ad3b435b51404eead3b435b51404ee(表示空值或被禁用)

  • NTML,设计出来的目的主要是在提高安全性的同时保证兼容性,采用MD4加密算法,无密码限制

3.2 LM HASH详解

3.2.1 加密过程

  1. 将明文口令加密成大写形式
  2. 转换成十六进制
  3. 不足14位数的要求用0补齐
  4. 将编码分成2组7字节
  5. 将一组7字节转化为二进制,每7bit一组结尾加上0,再转换成十六进制得到2组8字节编码
  6. 分别做DES加密计算,key为加密后的两组数据,明文为“KGS!@#$%”,将明文变成十六进制,分别进行DES加密后拼接

3.3 NTLM HASH详解

将其转为Unicode格式转换成16进制并对每两位后添加00后进行md4加密

4 AD中的用户成员权限

AD包括很多团体,这些团体赋予成员强大的权利和特权。许多漏洞可被滥用以提升域内权限

团队描述
默认管理员域管理员和企业管理员“超级”组
服务器管理员可以修改服务、访问SMB共享和备份文件
备份操作员成员可以本地登录域控制器 (DC),并被视为域管理员。他们可以创建 SAM/NTDS 数
据库的卷影副本、远程读取注册表,并通过 SMB 协议访问 DC 上的文件系统。有时,该组会被添加到非 DC 服务器上的本地备份操作员组中
打印操作员可以本地登录到域控制器,并“欺骗”Windows 加载恶意驱动程序。
Hyper-V管理员如果存在虚拟域控制器,则任何虚拟化管理员(例如 Hyper‑V 管理员组成员)都应被视为域管
理员
账户操作员可以修改域中未受保护的账户和组
远程桌面用户默认情况下,成员不会被授予任何有用的权限,但通常会被授予额外的权限,例如允许通过
远程桌面服务登录,并且可以使用 RDP 协议进行横向移动。
远程桌面管理员成员可以使用 PSRemoting 登录到 DC(该组有时会被添加到非 DC 上的本地远程管理组)。
组策略管理员成员可以创建新的 GPO,但需要被委派额外的权限才能将 GPO 链接到容器(例如域或
OU)。
架构管理员可以修改 Active Directory 架构结构,并且可以通过将受损帐户添加到默认对象 ACL 来为任何要创建的组/GPO 添加后门。
DNS管理员成员可以在域控制器上加载 DLL 文件,但没有重启 DNS 服务器所需的权限。
他们可以加载恶意 DLL 文件,并等待服务器重启以达到持久化的目的。

4.1 用户权限分配

根据组成员身份以及其他因素而定。根据策略,用户可以被分配各种权限

在windows系统中,输入命令whoami /priv列出分配的当前用户的所有用户权限。一些权限只对管理员用户可用,且只有管理员授权的cmd或powershell回话中列出、利用

5 RSAT 与 LDAP(简述)

5.1 RSAT

远程服务器管理工具(RSAT)允许管理员从工作站远程管理 Windows Server 角色和功能,包括 Active Directory、DNS、DHCP、组策略等。RSAT 只能安装在 Windows 专业版 / 企业版上。其中 Active Directory 模块 for Windows PowerShell(提供 Get-ADUser / Get-ADComputer 等 cmdlet)是内网枚举的利器。

使用 PowerShell 检查并安装 RSAT:

Get-WindowsCapability -Name RSAT* -Online | Select-Object Name, State
Get-WindowsCapability -Name RSAT* -Online | Add-WindowsCapability -Online

在未加入域的机器上,也可用 runas /netonly /user:DOMAIN\user mmc 启动管理单元进行枚举。

5.2 LDAP

LDAP(轻量级目录访问协议,最新规范 RFC 4511)是应用程序与活动目录“交流”的语言。域控制器监听 LDAP 请求,所有用户、组、计算机、策略都通过 LDAP 查询。LDAP 默认明文传输,建议使用 TLS(LDAPS, 636 端口)加密。

LDAP 认证方式:

  • 简单认证:匿名 / 用户名密码构造 BIND 请求
  • SASL 认证:借助 Kerberos 等其他认证服务绑定 LDAP,安全性更高

关于 LDAP 查询语法、过滤器(用户 / 组 / 计算机 / SPN / 委派)、Windows 下 Get-AD* / [ADSISearcher]、Linux 下 ldapsearch / windapsearch 的详细用法,见 信息收集 → LDAP查询与枚举 章节。

下面列举几个最常用的查询示例:

# 查询所有组
Get-ADObject -LDAPFilter '(objectClass=group)' | select name

# 查询被禁用账户
Get-ADObject -LDAPFilter '(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))' -Properties * | select samaccountname,useraccountcontrol

# 查询所有域控
(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))