在这篇文章中,我们将讨论不同的 Active Directory 对象及其基本概念,例如:
Active Directory 对象
Active Directory 对象是一组表示域中资源的属性。每个 Active Directory 对象都由唯一的 SID(安全标识符)标识,被用来允许或拒绝对域中各种资源的访问。让我们讨论一些属于 Active Directory 的 AD 对象。
用户对象被分配给域用户帐户,用于获取域资源的访问权限。如果您拥有管理用户对象所需的权限,则可以从 Active Directory 用户和计算机控制台管理这些对象。用户帐户也用于运行程序或系统服务,并由用户SID识别,这与域SID类似,它由域SID和用户RID(相对标识符)组成。
PS C:\Users\scarred.monk> Get-ADUser Scarred.Monk
DistinguishedName : CN=Scarred Monk,CN=Users,DC=rootdse,DC=lab
Enabled : True
GivenName : Scarred
Name : Scarred Monk
ObjectClass : user
ObjectGUID : 2ba8220b-63db-4dda-b6de-095a7fa0da24
SamAccountName : Scarred.Monk
SID : S-1-5-21-580985966-2115238843-2989639066-1107
Surname : Monk
UserPrincipalName : Scarred.Monk@rootdse.lab
用户对象的 SID
在用户的 SID 值中,S-1-5-21-580985966-2115238843-2989639066 是域 SID(安全标识符),1107 是唯一标识它的用户 RID(相对标识符)。
一个SID可以分为以下几个部分:
(SID)-(Revision Level)-(Identifier-Authority)-(Sub-Authority1)-(Sub-Authority2)...-(RID)
微软对SID组成部分的描述:
在域环境中,你会在多个位置看到用户 SID,例如在事件查看器或 ACL 中。SID也被用于安全描述符中,以存储与权限有关的信息。
下面是事件日志中用户SID的例子:
以下是注册表中用户SID的一个例子:
你可以在 Microsoft Docs 中找到常见的 SID 列表。:https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/security-identifiers-in-windows#well-known-sids-all-versions-of-windows
然而,在企业环境中,一个用户可以有一个以上的用户账户来完成不同的任务。例如,一个组织中的系统管理员可以有多个不同的账户,如一个账户用于在分配给他们的笔记本电脑上工作,第二个账户用于在本地域工作,还有几个账户用于在AD林中的其他域工作。
【----帮助网安学习,以下所有学习资料关注我,私信回复“资料”获取----】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
要获取 Active Directory 域中所有用户帐户的详细信息,我们可以使用以下命令:
PS C:\Users\scarred.monk> Get-ADUser -Filter *
这个命令的输出信息非常多,因为它包含了很多关于所有用户的细节。为了只获取用户的少数属性,我们可以使用cmdlet 的Select-Object (它的别名是Select),只选择我们感兴趣的属性,如SamAccountName、SID、enabled(查看账户是否启用/禁用)。
PS C:\Users\scarred.monk> Get-ADUser -f * |select SamAccountName, SID, enabled
SamAccountName SID enabled
-------------- --- -------
Administrator S-1-5-21-580985966-2115238843-2989639066-500 True
Guest S-1-5-21-580985966-2115238843-2989639066-501 False
krbtgt S-1-5-21-580985966-2115238843-2989639066-502 False
MATRIX$ S-1-5-21-580985966-2115238843-2989639066-1103 True
darkvortex$ S-1-5-21-580985966-2115238843-2989639066-1104 True
SQLServiceAccount S-1-5-21-580985966-2115238843-2989639066-1105 True
Scarred.Monk S-1-5-21-580985966-2115238843-2989639066-1107 True
这里可以使用Filter参数获取用户信息。Filter参数使用PowerShell表达式来编写 Active Directory查询字符串。使用 -F 同-Filter。
下面是使用 Filter 参数查找以 admin* 开头的用户帐户的示例:
PS C:\Users\scarred.monk> Get-ADUser -Filter 'Name -like "admin*"'
DistinguishedName : CN=Administrator,CN=Users,DC=rootdse,DC=lab
Enabled : True
GivenName :
Name : Administrator
ObjectClass : user
ObjectGUID : 061b1157-9a8d-4a34-9304-563a08e3883c
SamAccountName : Administrator
SID : S-1-5-21-580985966-2115238843-2989639066-500
当你以域用户身份登录时,域计算机(在其上进行登录尝试)将请求发送到域控制器以进行身份验证,并询问域控制器为用户帐户分配了哪些权限。验证后,计算机会收到来自域控制器的响应,并使用适当的权限和限制让你登录。这是因为域用户帐户的凭据信息存储在域控制器上,而不是用户登录的本地计算机上。
如果要创建新用户可以使用 Cmdlet 的New-ADUser命令:
PS C:\> New-ADUser -Name "AD User" -GivenName AD -Surname User -SamAccountName ad.user -UserPrincipalName ad.user@rootdse.org -AccountPassword (ConvertTo-SecureString password@123 -AsPlainText -Force) -PassThru
计算机对象代表加入域并由用户用于登录域的机器。当用户以域用户身份登录计算机时,计算机对象将充当向域验证用户身份的媒介。因此,如果计算机对象从域中删除,用户将无法登录,因为计算机将无法访问域控制器。
PS C:\Users\scarred.monk> Get-ADComputer -f *
DistinguishedName : CN=RDSEDC01,OU=Domain Controllers,DC=rootdse,DC=lab
DNSHostName : RDSEDC01.rootdse.lab
Enabled : True
Name : RDSEDC01
ObjectClass : computer
ObjectGUID : 032428f5-d629-451b-9d1d-46fce3ec0677
SamAccountName : RDSEDC01$
SID : S-1-5-21-580985966-2115238843-2989639066-1000
UserPrincipalName :
DistinguishedName : CN=SQLSERVER,CN=Computers,DC=rootdse,DC=lab
DNSHostName :
Enabled : True
Name : SQLSERVER
ObjectClass : computer
ObjectGUID : d4a1bca9-d729-4d61-90d3-ff33ea9f0c1e
SamAccountName : SQLSERVER$
SID : S-1-5-21-580985966-2115238843-2989639066-1106
所有计算机对象都有自己的机器用户,以$结尾。
在这个例子中,计算机对象RDSEDC01的机器账户是RDSEDC01$,这些帐户在域中执行自己的操作。
域中具有三种可以算作计算机对象的对象:
域控制器
域控制器是一个集中式 Windows 服务器,它通过托管 Active Directory 域并向客户端提供身份验证和目录服务来管理域。域控制器只能处理单个域的身份验证请求,但它也可以存储来自林中其他域的对象的部分只读副本(如果它被启用为全局编录服务器)。
要检查域控制器,我们可以使用以下命令:
PS C:\Users\scarred.monk> Get-ADDomainController
ComputerObjectDN : CN=RDSEDC01,OU=Domain Controllers,DC=rootdse,DC=lab
DefaultPartition : DC=rootdse,DC=lab
Domain : rootdse.lab
Enabled : True
Forest : rootdse.lab
HostName : RDSEDC01.rootdse.lab
InvocationId : 85a56dee-48fe-4897-8941-50ed5a196849
IPv4Address : 192.168.209.110
IPv6Address :
IsGlobalCatalog : True
IsReadOnly : False
LdapPort : 389
Name : RDSEDC01
NTDSSettingsObjectDN : CN=NTDS Settings,CN=RDSEDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=rootdse,DC=lab
OperatingSystem : Windows Server 2019 Datacenter
OperatingSystemHotfix :
OperatingSystemServicePack :
OperatingSystemVersion : 10.0 (17763)
OperationMasterRoles : {SchemaMaster, DomainNamingMaster, PDCEmulator, RIDMaster...}
Partitions : {DC=ForestDnsZones,DC=rootdse,DC=lab, DC=DomainDnsZones,DC=rootdse,DC=lab, CN=Schema,CN=Configuration,DC=rootdse,DC=lab, CN=Configuration,DC=rootdse,DC=lab...}
ServerObjectDN : CN=RDSEDC01,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=rootdse,DC=lab
ServerObjectGuid : d50faf97-ee22-4724-b248-bf8eeda85c92
Site : Default-First-Site-Name
SslPort : 636
域计算机(工作站)
域计算机可以由员工使用的个人计算机表示,例如属于域的台式机、笔记本电脑。就 Active Directory 而言,计算机对象与用户对象非常相似,因为计算机对象拥有用户对象的所有属性(计算机对象直接从用户对象类继承)。计算机出现在 Active Directory 中的原因很少,例如需要安全地访问资源、利用 GPO 并为其分配权限。
对象类会在后续的有关AD模式和LDAP的文章中详细解释
为了加入 Active Directory 域并允许域用户登录到该域,域计算机需要一个安全通道来与域控制器通信。安全通道是指可以传输加密数据的经过身份验证的连接。要创建安全通道,域计算机必须向域控制器提供域计算机帐户的密码。与用户帐户身份验证类似,Active Directory 使用 Kerberos 来验证计算机帐户的身份。域控制器通过关联的计算机对象及其存储的密码验证受信任的域计算机。
要检查域计算机,我们可以使用以下命令:
PS C:\Users\scarred.monk> Get-ADComputer -Filter *
成员服务器
域环境中的成员服务器提供不同的服务。这些服务器根据需要提供的服务类型安装了一个或多个角色,例如 Exchange 服务器、Web 服务器、文件服务器、SQL 服务器等。它们可以是 Windows Server 操作系统或 Linux 操作系统。
要检查成员服务器,我们可以使用以下命令:
PS C:\Users\scarred.monk> Get-ADComputer -Filter 'operatingsystem -like "*server*"'
让我们来谈谈下一种 AD 对象,即组对象。
组对象用于包含许多不同的 Active Directory 对象,例如用户、计算机和其他组。这样做是为了通过将权限分配给一组用户/计算机而不是单个帐户、为组创建委派组策略、创建电子邮件分发列表等,使系统管理员的管理更容易。
例如,在一个组织中,不同的团队有不同的组,并根据需要为这些组分配不同的权限。假设有一个名为“DB Admins”的组,该组有权登录并在多个 SQL 服务器上执行少量数据库操作、访问多个 DB 文件共享等。当新用户加入 DB 团队时,IT 团队会将用户添加到该组 (DB ADmins) 中,这将为新用户提供其团队成员拥有的所有访问权限。它节省了 IT 团队为每个用户单独配置权限的时间。
要获取 Active Directory 域中所有组的详细信息,我们可以使用以下命令:
PS C:\Users\scarred.monk> Get-ADGroup -f * | Select-Object name
name
----
Administrators
Users
Guests
Print Operators
Backup Operators
Replicator
Remote Desktop Users
Network Configuration Operators
Performance Monitor Users
Performance Log Users
Distributed COM Users
IIS_IUSRS
Cryptographic Operators
Event Log Readers
Certificate Service DCOM Access
RDS Remote Access Servers
RDS Endpoint Servers
RDS Management Servers
Hyper-V Administrators
Access Control Assistance Operators
Remote Management Users
Storage Replica Administrators
Domain Computers
Domain Controllers
Schema Admins
Enterprise Admins
Cert Publishers
Domain Admins
Domain Users
Domain Guests
Group Policy Creator Owners
RAS and IAS Servers
Server Operators
Account Operators
Pre-Windows 2000 Compatible Access
Incoming Forest Trust Builders
Windows Authorization Access Group
Terminal Server License Servers
Allowed RODC Password Replication Group
Denied RODC Password Replication Group
Read-only Domain Controllers
Enterprise Read-only Domain Controllers
Cloneable Domain Controllers
Protected Users
Key Admins
Enterprise Key Admins
DnsAdmins
DnsUpdateProxy
组类型
Active Directory 中的一些重要组如下:
Admin groups(管理员组)
最重要的组是域管理员(Domain Admin)和企业管理员(Enterprise Admins):
AD中的其他重要群组
除了上面两个重要的组之外,还有其他一些重要的组,你应该注意:
以下是一些高价值组。这些组的成员默认拥有登录域控制器的权限。如果这些组的账户被入侵,那么AD域就很有可能被入侵。
Administrators
Domain Admins
Enterprise Admins
Print Operators
Backup Operators
Account Operators
Custom groups(自定义组)
除此之外,组织还为 IT 管理员、IT 服务台、SQL 管理员、应用程序管理员等创建自定义特权组。此外,如果我们向服务器添加其他角色,则会创建组。就像我们添加 DHCP 角色时,创建了 DHCP 管理员组或安装 Microsoft Exchange 时,添加了 Exchange 组织管理员和 Exchange Windows 权限组。要获取详细信息,在微软的文档中还有许多其他组的描述:https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/active-directory-security-groups#replicator
Shared Folders(共享文件夹)
共享文件夹也是 Active Directory 中的对象。在 AD 中发布新共享时,会为其创建一个对象。这对于 AD 用户轻松找到所有共享非常有帮助。下面是在 AD 中发布的共享文件夹的屏幕截图:
对于渗透测试人员,可以枚举共享以查看哪些是可访问的以及存储在那里的数据。我们可以这样枚举共享:
PS C:\> Get-SmbShare
Name ScopeName Path Description
---- --------- ---- -----------
ADMIN$ * C:\Windows Remote Admin
C$ * C:\ Default share
Corporate Files * C:\ADShares\Corporate Files Corporate Files data for 2020
DBA Backup * C:\ADShares\DBA Backup Romania DB Backup
IPC$ * Remote IPC
IT Tools * C:\ADShares\IT Tools IT Team Important Tools
NETLOGON * C:\Windows\SYSVOL\sysvol\rootdse.org\SCRIPTS Logon server share
Old Backup * C:\ADShares\Old Backup All Backup
Operations Team * C:\ADShares\Operations Team Engineering Operations daily data
Salary Details * C:\ADShares\Salary Details Finance Team 2020
Sales Data * C:\ADShares\Sales Data Latest Sales Team Shared folder
SYSVOL * C:\Windows\SYSVOL\sysvol Logon server share
PS C:\> net view \RDSEDC01
Shared resources at \RDSEDC01
Share name Type Used as Comment
-------------------------------------------------------------------------------
Corporate Files Disk Corporate Files data for 2020
DBA Backup Disk Romania DB Backup
IT Tools Disk IT Team Important Tools
NETLOGON Disk Logon server share
Old Backup Disk All Backup
Operations Team Disk Engineering Operations daily data
Salary Details Disk Finance Team 2020
Sales Data Disk Latest Sales Team Shared folder
SYSVOL Disk Logon
在第下次文章中,我们将介绍组策略,它是 Active Directory 的重要元素之一。我们将讨论什么是组策略、为什么需要它们、如何创建它们、使用组策略可以实现什么,并了解如何枚举和破坏组策略。
| 留言与评论(共有 0 条评论) “” |