Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >域中的ACL访问控制列表

域中的ACL访问控制列表

作者头像
谢公子
发布于 2024-01-29 08:59:44
发布于 2024-01-29 08:59:44
1K00
代码可运行
举报
文章被收录于专栏:谢公子学安全谢公子学安全
运行总次数:0
代码可运行

在学习域的过程中,我们经常会看到访问控制列表(ACL,Access Control Lists),对这个词既熟悉又陌生。现在,就让我们来看看ACL到底是什么,这需要从Windows的访问控制模型开始说起。而说Windows的访问控制模型之前,我们先来看看两个基础的概念。

安全主体

Security Principals

我们先来看看什么是安全主体Security Principals。安全主体是可以通过系统进行身份验证的任何实体,例如用户帐户、计算机帐户,或在用户或计算机帐户的安全上下文中运行的线程或进程,以及这些帐户的安全组。每个安全主体在创建时都会自动分配一个安全标识符(SID)。安全主体是控制对安全资源的访问的基础。在活动目录域中创建的安全主体是活动目录对象,可用于管理对域资源的访问。

安全标识符SID

安全标识符(Security Identifiers,SID)用于唯一标识安全主体或安全组。在帐户的安全上下文中运行的每个帐户、组或进程都有一个唯一的SID,它由当局发布,例如Windows域控制器。它被存储在一个安全数据库中。系统将生成在创建该帐户或组时标识该特定帐户或组的SID。当SID被用作用户或组的唯一标识符时,它再也不能被用于标识其他用户或组。除了分配给特定用户和组唯一创建的、特定于领域的SID外,还有一些众所周知的SID可以识别通用组和通用用户的SID。众所周知的SID在所有操作系统中都保持不变。SID是Windows安全模型的一个基本构建模块,它与Windows服务器操作系统的安全基础设施中的授权和访问控制技术的特定组件一起工作。这有助于保护对网络资源的访问,并提供了一个更安全的计算环境。

如下,是一些众所周知用户的SID:

·administrator:S-1-5--500

·Guest:S-1-5--501

·KRBTGT:S-1-5--502

如下,是一些众所周知组的SID:

·Administrators:S-1-5-32-544

·Users:S-1-5-32-545

·Guests:S-1-5-32-546

·Account Operators:S-1-5-32-548

·Server Operators:S-1-5-32-549

·Print Operators:S-1-5-32-550

·Backup Operators:S-1-5-32-551

·Domain Admins:S-1-5--512

·Domain Users:S-1-5--513

·Domain Guests:S-1-5--514

·Domain Computers:S-1-5--515

·Domain Controllers:S-1-5--516

·Cert Publishers:S-1-5--517

·Schema Admins:S-1-5--518

·Enterprise Admins:S-1-5--519

·Group Policy Creators Owners:S-1-5--520

·RAS and IAS Servers:S-1-5--553

·Pre–Windows 2000 Compatible Access :S-1-5-32-554

Windows访问控制模型

访问控制(AC,Access Control)是指控制谁(安全主体,Security Principals)可以访问操作系统中的资源(被访问实体),这里的访问不仅仅是单纯的访问,而是包括增删改查等操作。这里的安全主体可以是用户、进程等,而被访问实体可能是文件、服务、活动目录对象等资源。系统是如何判断安全主体是否对被访问实体具有权限,并且具有哪些权限呢?这就涉及到Windows的访问控制模型(ACM,Access Control Model)了。 Windows的访问控制模型由访问令牌(Access Token)和安全描述符(Security Descriptors)两部分组成。

如图所示,是Windows访问控制模型。

1

访问令牌(Access Token)

用户登录系统时,系统会对用户的帐户名和密码进行身份验证。如果登录成功,系统将创建访问令牌。 此后,代表此用户执行的每一个进程都有此访问令牌的副本, 访问令牌是描述进程或线程安全上下文的对象。访问令牌包含用户的SID、用户权限和用户所属的任何组的SID,还包含用户或用户组拥有的权限列表。 当进程尝试访问安全对象或执行需要特权的系统管理任务时,系统使用此访问令牌来标识关联的用户。

访问令牌包含以下信息:

· 用户帐户安全标识符SID

· 用户所属组的SID

· 标识当前登录会话的登录SID

· 用户或 用户组拥有的权限列表

· 所有者SID

· 主组的SID

· 用户创建安全对象而不指定安全描述符时系 统使用的默认 DACL

· 访问令牌的源

· 令牌是主令牌还是模拟令牌

· 限制SID的可选列表

· 当前模拟级别

· 其他统计信息

每个进程都有一个主令牌,用于描述与进程关联的用户帐户的安全上下文。 默认情况下,当进程的线程与安全对象交互时,系统将使用主令牌。 此外,线程可以模拟客户端帐户,模拟允许线程使用客户端的安全上下文与安全对象进行交互,模拟客户端的线程同时具有主令牌和模拟令牌。

如图所示,可以看到安全主体包含了哪些东西。

2

安全描述符(Security Descriptors)

当创建安全对象时,系统会为其分配一个安全描述符Security Descriptors,其中包含其创建者指定的安全信息;如果未指定任何安全信息,则为其分配默认安全信息。 安全描述符可以包含以下安全信息:

SID(Security Identifiers):对象的所有者和主组的安全标识符SID。

DACL:指定允许或拒绝特定用户或组的访问权限,会在后面详细讲解。

SACL:指定为对象生成审核记录的访问尝试的类型,会在后面详细讲解。

一组控制位flag:这些控制位限定安全描述符或单个成员的含义。

如图所示,可以看到安全描述符包含了哪些东西。

访问控制列表ACL

(Access Control Lists)

访问控制列表(ACL,Access Control Lists)由一系列访问控制条目(ACE,Access Control Entries)组成,用于定义安全对象的访问策略。而每个访问控制条目ACE可以看作是一条策略。每个安全对象的安全描述符包含两种类型的ACL:DACL和SACL。这两种ACL中都是由ACE组成。

DACL(Discretionary Access Control List):DACL能够记录指定安全主体对该安全对象的访问权限。DACL中的每条ACE定义了哪些安全主体对该安全对象具有怎样的访问权限。当安全主体试图访问一个安全对象时,系统会检查该安全对象DACL中的ACE,以确定是否授予其访问权限。

SACL(System Access Control List):SACL能够记录指定安全主体访问该安全对象的日志。SACL中的每条ACE定义了哪些安全主体对该安全对象访问成功、访问失败的行为进行日志记录。

ACL、DACL、SACL和ACE几者之间的关系如图所示。

如图所示,我们查看某个安全对象的访问控制列表ACE。权限这一栏就是DACL,下面的每条规则就是每条ACE。

审核这一栏就是SACL,下面的每条规则就是每条ACE。如图所示:

1

访问控制条目ACE

(Access Control Entries)

访问控制条目(ACE,Access Control Entries)是具体记录访问策略的条目。

ACE主要记录下面四个方面:

1.安全主体,也就是谁对该安全对象具有权限

2.权限的类型,是允许权限还是拒绝权限

3.具体的权限

4.该权限能否被继承

如图所示,图形化查看域安全对象xie.com的ACL,打开Active Directory用户和计算机窗口,右键xie.com,点击属性,在弹出的对话框中点击高级即可看到如下。

第一个安全主体这个比较好理解,比如说域用户张三、李四。

第二个权限类型也比较好理解,允许权限还是拒绝权限。

第四个该权限能否被继承也很好理解,就是这个ACE能不能被子对象继承。比如我们在OU上应用了一个ACE,如果该ACE能被继承,则该OU内的用户和组均能继承该ACE;如果该ACE不能被继承,则这条ACE只应用于该OU。

我们着重来看看第三个具体的权限,这里具体权限可以分为三种:

\1) 基本权限:就是对安全对象的基本权限。如图所示:

基本权限包括泛型权限和通用权限。如修改、读取、写入、完全控制、修改所有者、修改DACL等权限。

泛型权限

●○GENERIC _ READ:读取对象维护的信息 的权利。

○GENERIC _ WRITE:写入由对象维护的信息的权利。

○GENERIC _ EXECUTE:执行或查看对象的权利。

○GENERIC _ ALL:读取、写入和执行对象的权利。

通用权限适用于所有对象类型:

●○DELETE:删除对象的权利。

○READ _ CONTROL:读取对象的信息。

○WRITE _ DACL: 修改对象的DACL信息。

○WRITE _ OWNER:修改对象的所有者 SID 的权利。

○SYNCHRONIZE:在给定对象上等待 。

\2) 对属性的权限:域中每个安全对象对应于一个条目,一个条目包含若干个属性,基本权限是对整个条目的权限,域内的ACL同时也支持对某个属性的权限。如图所示:

\3) 扩展权限:域内的安全对象相对较为复杂,基本权限和对属性的权限不够用,因此域内的ACL也支持扩展权限,比如复制目录更改权限、复制目录更改所有项权限等。扩展权限都存储在CN=Extended-Rights,CN=Configuration,DC=xie,DC=com里面。如图所示:

如图所示,通过ADExplorer连接活动目录查看CN=Extended-Rights, CN=Configuration,DC=xie,DC=com下的扩展权限。

2

ACL的判断流程

ACL的解析优先级如下:

· 显式拒绝

· 显式允许

· 继承的拒绝

· 继承的允许

如图所示,显示了这些安全主体访问安全对象时的流程。

系统会按照顺序检查DACL中的每条ACE,直到找到一条或多条允许所有请求访问权限的ACE,或者直到找到一条或多条拒绝所有访问请求的ACE。当所有ACE都没匹配上的时候,是拒绝访问的。如果该安全对象对象没有DACL,系统将授予所有人完全的访问权限。如果该对象有DACL,但是DACL中没有ACE,则系统将拒绝所有人访问该对象,因为该DACL不允许有任何访问权限。

我们接下来举个例子来说明一下,以下只是说明下流程,并未说明具体的权限以及继承相关问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
安全主体A:
  sid=100
  groupsid=110
  groupsid=120
安全主体B:
  sid=200
  groupsid=210
  groupsid=220
安全主体C:
  sid=300
  groupsid=310
  groupsid=320
安全对象DACE:拒绝sid=200的对象访问
  ACE:允许sid=100和groupsid=210的对象访问
安全对象E:
  有DACL,但是DACL中的ACE条目为0
安全对象F:
  无DACL

当安全主体A访问安全对象D时,首先匹配第一条拒绝sid=200的访问,没匹配上,然后匹配第二条允许sid=100和sid=210的对象访问,匹配上了,所以允许安全主体A访问。

当安全主体B访问安全对象D时,首先匹配第一条拒绝sid=200的访问,匹配上了,于是拒绝安全主体B对该安全对象D的访问。即使第二条ACE允许了sid=210的对象访问匹配上了,但是因为拒绝的ACE优先级大于允许的ACE,所以最后还是拒绝主体B访问。

当安全主体C访问安全对象D时,第一条ACE和第二条ACE都没匹配上,所以拒绝安全主体C访问。

由于安全对象E有DACL,但是DACL中的ACE条目为0,所以不允许任何主体访问,因此安全主体A、安全主体B、安全主体C均不能访问安全对象E。

由于安全对象F无DACL,因此安全主体A、安全主体B、安全主体C均能访问安全对象F。

如图所示,显示了对象的 DACL 如何允许访问一个线程,同时拒绝访问另一个线程。

对于线程 A,系统读取 ACE 1 并立即拒绝访问,因为拒绝访问的 ACE 适用于线程的访问令牌中的用户。 在这种情况下,系统不会检查 AES 2 和 3。 对于线程 B,ACE 1 不适用,因此系统将继续访问 ACE 2(允许写入访问)和 ACE 3(允许读取和执行访问权限)。

由于系统在显式授予或拒绝请求的访问权限时停止检查 AES,因此 DACL 中的 AES 顺序非常重要。 请注意,如果示例中的 ACE 顺序不同,则系统可能授予了对线程 A 的访问权限。对于系统对象,操作系统在 DACL 中定义AES的首选顺序。

SDDL安全描述符定义语言

安全描述符定义语言(SDDL,Security Descriptor Definition Language)是一种定义可以描述对象权限的方法。SDDL语言格式主要包含以下四个组件:

· Owner (O: ) :标识对象的所有者的SID字符串。

· Group (G: ) :标识对象的所属组的SID字符串,Windows 通常忽略此参数(由于兼容性原因,该值仍在安全描述符中)。

· DACL (D: ) :包含DACL的安全描述符控制标志,DACL中包含一系列ACE。

· SACL (S: ):包含SACL的安全描述符控制标志,SACL中包含一系列ACE。

对象的ACL存储在nTSecurityDescriptor属性中。因此,我们可以使用如下语句过滤对象的nTSecurityDescriptor属性,以查看对象SDDL语言格式呈现的ACL。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AdFind.exe -b "CN=hack,CN=Users,DC=xie,DC=com" nTSecurityDescriptor -sddl

如图所示,使用adfind查看查询nTSecurityDescriptor属性。

nTSecurityDescriptor属性的值由以下几部分构成:

· [OWNER]DA

· [GROUP]DA

· DACL(ACE).....

· SACL(ACE).....

接下来,我们来看看ACL中ACE具体的结构和语法。

1

ACE的结构

ACE具体的结构及顺序如下,结构间用分号(;)分隔。一个完整的ACE有6个分号(;),共分隔7个字段,每条ACE被括在括号中。

注:默认情况下,由于Resource_ Attribute属性是可选的,因此只有5个分号(;),分隔6个字段。

各个字段的含义如下:

· ACE_Type:主要说明是什么类型的· ACE,如允许、拒绝、审计等。

· ACE_Flags:主要设置一些标识符。

· Rights:主要说明是什么权限,如可读、可写等。

· Object_Guid:主要说明对象的GUID值。

· Inherit_Object_Guid:主要说明继承对象的GUID值。

· Account_Sid:主要说明对象的SID值。

· Resource_Attribute:主要说明数据类型,是一个可选字段。

下面看一下每个字段的含义以及包含的值。

(1) ACE_Type

ACE_Type包含的字段和值如下表所示:

(2) ACE_Flags

ACE标志:说明这是继承的权限还是显式给定的权限。ACE_Flags有如下一些值:

(3) Rights

表示由ACE控制的访问权限的字符串。此字符串可以是访问权限的十六进制字符串表示,如"0x7800003F",也可以是以下字符串的连接。

通用访问权限

标准访问权限

活动目录服务对象访问权限

文件访问权限

注册表密钥访问权限

强制性标签访问权限

(4) Object_Guid

权限对象的rightsGuid属性值,如复制目录更改权限,其对应的rightsGuid值为1131f6aa-9c07-11d1-f79f-00c04fc2dcd2。扩展权限对象保存在CN=Extended-Rights,CN=Configuration,DC=xie,DC=com里面。下表列出了一些常见的权限对象rightsGuid值:

如图所示,可以看到复制目录更改权限,其对应的rightsGuid值为1131f6aa-9c07-11d1-f79f-00c04fc2dcd2。

(5) Inherit_object_guid

继承权限对象的rightsGuid属性值。

(6) Account_sid

表示ACE指定的安全主体的objectSid属性值。如,这条ACE表示hack用于对该安全对象的权限,则Account_sid的值就为hack用户的objectSid。

(7) Resource_attribute

可选结构,resource_attribute仅适用于资源ace,并且是可选的,指示数据类型的字符串。

2

ACE的解析

了解了ACE的结构顺序以及每个字段的含义后,我们来解析下ACE语句。如下,有一条ACE。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(OA;CI;CR;{1131F6AA-9C07-11D1-F79F-00C04FC2DCD2};;S-1-5-21-1313979556-3624129433-4055459191-1105)

我们来对其进行分析:

· 第一个ACE_Type字段对应的是“OA”值,而“OA”又代表ACCESS_ALLOWED_OBJECT_ACE_TYPE(允许对象访问)。因此,可以知道这条是允许类型的ACE。

· 第二个ACE_Flags字段对应的是“CI”值,而“CI”又代表CONTAINER_INHERIT_ACE(容器继承)。因此,可以知道这条ACE是容器继承。

· 第三个Rights字段对应的是“CR”值,而“CR”又代表ADS_RIGHT_DS_CONTROL_ACCESS。因此,可以知道这条ACE是活动目录对象控制访问权限。

· 第四个Object_Guid对应的是“{1131F6AA-9C07-11D1-F79F-00C04FC2DCD2}”值,如图所示,通过查询可以得知其对应的是DS-Replication-Get-Changes扩展权限。因此,可以知道这条ACE所代表的扩展权限是复制目录更改权限。

· 第五个Inherit_object_guid字段是空值,这里我们不管他。

· 第六个Account_sid字段对应的是S-1-5-21-1313979556-3624129433-4055459191-1105值,如图所示,通过查询得知该SID对应的是xie\hack用户。因此,可以知道这条ACE所指定的安全主体是xie\hack用户。

综上所述,我们可以从这条ACE中得到如下权限信息:xie\hack用户对当前安全对象具有复制目录更改的权限!

官方文档:https://docs.microsoft.com/en-us/windows/win32/secauthz/ace-strings

https://docs.microsoft.com/en-us/windows/win32/adschema/attributes-all

域对象ACL的查看和修改

域对象除了具有基本权限外,其还具有属性权限、扩展权限。因此,在域内ACL还提供对Active Directory目录服务对象的属性权限和扩展权限进行定义。我们现在来看看域对象ACL的查看和修改。

1

图形化查看和修改

如下操作图形化查看域对象xie.com的ACL。

如图所示,打开Active Directory用户和计算机窗口,右键xie.com,点击属性。

在“安全”选项卡即可看到不同用户对域对象的不同权限了。如图所示:

由于域对象有很多的权限,因此这不足以显示。我们可以点击高级查看更多的权限,如图所示:

如图所示,即可看到不同主体所拥有的不同权限了。

如果想查看某个主体拥有的具体权限,可以点击编辑,就可以看到详细的权限信息了。

如图所示,域对象除了具有基本权限外,其还具有属性权限、扩展权限。

如果想添加指定用户对该域对象的权限,可以点击“添加”。如图所示:

在弹出的对话框中选择主体,我这里选的是hack用户,类型是允许,权限信息自行勾选即可。如图所示:

2

Adfind查询ACL

Adfind是一款优秀的Ldap查询工具,其支持对域内对象的ACL进行查询。-sddlfilter参数支持使用SDDL语言格式过滤对象。格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-sddlfilter ;;;;;

后面跟的参数对应的是ACE条目相应的参数,需要说明的是,过滤的格式跟输出的格式要保持一致:

· 如果-rawsddl ,最后一个参数是sid值,这个时候用-sddlfilter进行过滤的话,最后一个参数就要用sid的形式。

· 如果是-sddl+++,最后一个参数是已经解析后的账号名,这个时候用-sddlfilter进行过滤的话,最后一个参数就要用账号名的形式。

注:普通域用户无法使用adfind进行ACL相关的查询!

(1) 查询指定对象的ACL

使用-b参数指定要查询的对象,然后过滤nTSecurityDescriptor属性。使用-sddl进行显示,可以使用+使结果更易读,最多使用三个+。具体 命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#查找指定对象的ACL
AdFind.exe -b "CN=hack,CN=Users,DC=xie,DC=com" nTSecurityDescriptor -sddl

#查找指定对象的ACL,使结果更直观
AdFind.exe -b "CN=hack,CN=Users,DC=xie,DC=com" nTSecurityDescriptor -sddl+
AdFind.exe -b "CN=hack,CN=Users,DC=xie,DC=com" nTSecurityDescriptor -sddl++
AdFind.exe -b "CN=hack,CN=Users,DC=xie,DC=com" nTSecurityDescriptor -sddl+++

如图所示,查看hack用户的ACL。

如图所示,更加直观的查看hack用户的ACL。

(2) 查询指定对象在域内的ACL

可以直接使用该对象的SID值或者使用该对象的名字执行如下命令即可查询指定对象在域内的ACL。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#使用该对象的SID值
AdFind.exe -s subtree -b "DC=xie,DC=com" nTSecurityDescriptor -sddl -sddlfilter ;;;;;"S-1-5-21-1313979556-3624129433-4055459191-1105" -recmute

#使用该对象的用户名
AdFind.exe -s subtree -b "DC=xie,DC=com" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;;;"xie\hack" -recmute

如图所示,查看指定SID为S-1-5-21-1313979556-3624129433-4055459191-1105对应的用户在域内的ACL。

(3) 查询指定权限在域内被哪些对象拥有

如下命令,查询复制目录权限和复制目录更改权限被域内哪些对象拥有。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#查询复制目录权限被域内哪些对象拥有
AdFind.exe -s subtree -b "DC=xie,DC=com" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute -resolvesids

#查询复制目录更改权限被域内哪些对象拥有
AdFind.exe -s subtree -b "DC=xie,DC=com" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes All";; -recmute -resolvesids

如图所示,查询复制目录权限和复制目录更改权限被域内哪些对象拥有。

3

PowerShell脚本查询和修改ACL

Empire中的powerview.ps1脚本已经集成了ACL的相关功能。可以使用该脚本进行ACL的查询和修改,前提是该用户具备查询和修改的权限。

(1) 查询指定对象的ACL

通过Get-DomainObjectAcl脚本执行如下命令查询win2012R2机器的ACL,该结果不是每一条ACE显示,而是把每个ACE中的每个权限都单独显示出来。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Import-Module .\powerview.ps1
Get-DomainObjectAcl -Identity win2012R2 -ResolveGUIDs

如图所示,通过Get-DomainObjectAcl脚本查询win2012R2机器的ACL。

我们来看看第一个权限表达的意思,主要看以下字段:

· AceQualifier的值为AccessAllowed,表示是访问允许的ACE。

· ObjectDN的值为CN=WIN2012R2, CN=Computers,DC=xie,DC=com,表示的安全对象是机器Win2012R2。

· ActiveDirectoryRights的值为WriteProperty,说明的是拥有写入属性

· ObjectAceType的值为User-Logon,说明的权限是用户登录。

· ObjectSID代表的是安全对象也就是机器Win2012R2的objectSid

· InheritanceFlags表示的是继承标签

· AceType的值为AccessAllowedObject,表示的是允许访问对象类型的ACE,与AceQualifier类似

· ObjectAceFlags表示的是对象ACE类型

· SecurityIdentifier表示的是安全主体的SID,通过查询S-1-5-21-1313979556-3624129433-4055459191-1105发现其对应的域用户为xie\hack

· IsInherited表示的是该ACE是否可继承

· InheritedObjectAceType表示的是继承对象ACE类型

最终从下面的权限信息我们可以知道,xie\hack用户拥有登录WIN2012R2机器的权限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AceQualifier           : AccessAllowed
ObjectDN               : CN=WIN2012R2,CN=Computers,DC=xie,DC=com
ActiveDirectoryRights  : WriteProperty
ObjectAceType          : User-Logon
ObjectSID              : S-1-5-21-1313979556-3624129433-4055459191-1106
InheritanceFlags       : None
BinaryLength           : 72
AceType                : AccessAllowedObject
ObjectAceFlags         : ObjectAceTypePresent, InheritedObjectAceTypePresent
IsCallback             : False
PropagationFlags       : None
SecurityIdentifier     : S-1-5-21-1313979556-3624129433-4055459191-1105
AccessMask             : 32
AuditFlags             : None
IsInherited            : False
AceFlags               : None
InheritedObjectAceType : Computer
OpaqueLength           : 0

(2) 添加指定用户对指定域对象的完全控制权限

通过powerview.ps1脚本执行如下命令添加指定hack用户对指定域对象xie.com的完全访问权限,该操作需要高权限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Import-Module .\powerview.ps1
#添加用户hack对指定域对象xie.com的完全访问权限
Add-DomainObjectAcl -TargetIdentity 'DC=xie,DC=com' -PrincipalIdentity hack -Rights All -Verbose

如图所示,通过Get-DomainObjectAcl脚本添加指定hack用户对指定域对象xie.com的完全访问权限。

添加完成后,我们可以去查询下域xie.com的权限,看hack用户是否对其拥有完全访问权限。

如图所示,打开Active Directory用户和计算机窗口,右键xie.com,点击属性。

在弹出的对话框中点击高级选项卡,如图所示:

如图所示,可以看到hack用户对该安全对象具有完全控制的权限了。

(3) 移除指定用户对指定域对象的完全控制权限

通过Remove-DomainObjectAcl脚本执行如下命令移除指定hack用户对指定域对象xie.com的完全访问权限,该操作需要高权限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Import-Module .\powerview.ps1
#移除用户hack对指定域对象xie.com的完全访问权限
Remove-DomainObjectAcl -TargetIdentity 'DC=xie,DC=com' -PrincipalIdentity hack -Rights All -Verbos

如图所示,通过Remove-DomainObjectAcl脚本移除指定hack用户对指定域对象xie.com的完全访问权限。

(4) 添加指定用户对指定域对象的指定权限

通过Add-DomainObjectAcl脚本执行如下命令添加指定hack用户对指定域对象xie.com的DCSync权限,该操作需要高权限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Import-Module .\powerview.ps1
#添加用户hack对指定域对象xie.com的DCSync权限
Add-DomainObjectAcl -TargetIdentity 'DC=xie,DC=com' -PrincipalIdentity hack -Rights DCSync -Verbose

如图所示,通过Add-DomainObjectAcl脚本添加指定hack用户对指定域对象xie.com的DCSync权限。

添加完成后,我们可以去查询下域xie.com的权限,看hack用户是否对其拥有DCSync权限。

如图所示,打开Active Directory用户和计算机窗口,右键xie.com,点击属性。

在弹出的对话框中点击高级选项卡,如图所示:

如图所示,然可以看到hack用户对该安全对象具有复制目录更改、复制目录更改所有项、以及复制筛选集中的目录更改权限(也就是DCSync权限)了。

(5) 移除指定用户对指定域对象的指定权限

通过Remove-DomainObjectAcl脚本执行如下命令移除指定hack用户对指定域对象xie.com的DCSync权限,该操作需要高权限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Import-Module .\powerview.ps1
#移除用户hack对指定域对象xie.com的DCSync权限
Remove-DomainObjectAcl -TargetIdentity 'DC=xie,DC=com' -PrincipalIdentity hack -Rights DCSync -Verbose

如图所示,通过Remove-DomainObjectAcl脚本移除指定hack用户对指定域对象xie.com的DCSync权限。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 谢公子学安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
内网渗透|域内的组策略和ACL
ADDS可以理解为跟DNS,DHCP一样是集成在Windows Server中的一个角色功能,AD DS域是用来管理用户,计算机,组和其他对象的逻辑容器。AD DS 数据库存储所有域对象,每个域控制器存储数据库的副本。
HACK学习
2021/08/13
2.4K0
Adfind的使用
Adfind是一个使用C++语言写的活动目录查询工具,它允许用户轻松地搜索各种活动目录信息。它不需要安装,因为它是基于命令行的。它提供了许多选项,可以细化搜索并返回相关细节。下面讲解Adfind的参数以及其使用。执行如下命令即可查看Adfind的所有参数。
谢公子
2024/04/01
6250
Adfind的使用
Windows原理深入学习系列-访问控制列表
在上一篇讲强制完整性控制的时候提到过,在权限检查的时候,会先进行强制完整性检查,然后再进行 DACL 检查,DACL 就是包含在这次要提到的 ACL 当中的。
信安成长计划_Stars
2022/03/10
7680
Windows原理深入学习系列-访问控制列表
本地帐户和活动目录帐户
本地帐户Local Accounts存储在本地的服务器上。这些帐户可以在本地服务器上分配权限,但只能在该服务器上分配。默认的本地帐户是内置帐户(如administrator、guest等),在安装Windows时自动创建。Windows安装后,无法删除默认的本地帐户。此外,默认的本地帐户不提供对网络资源的访问。默认的本地帐户用于根据分配给该帐户的权限来管理对本地服务器资源的访问。默认的本地帐户和后期创建的本地帐户都位于“用户”文件夹中。
谢公子
2023/09/01
2.2K0
本地帐户和活动目录帐户
ATT&CK视角下的红蓝对抗之Windows访问控制模型
访问控制模型(Access Control Model)是指Windows操作系统关于安全性的一个概念,由访问令牌和安全描述符两部分构成,其中访问令牌是指由当前登录的Windows账号的用户持有,其中会包含了该账号的基础信息,包括用户帐户的标识和特权信息,安全描述符由要访问的对象持有,里面会包含当前对象的安全信息。假设当用户登录时,操作系统会对用户的帐户名和密码进行身份验证, 当登录成功时,系统会自动分配访问令牌(Access Token),访问令牌包含安全标识符,用于标识用户的帐户以及该用户所属的任何组帐户,当我们去创建一个进程也就是访问一个资源(进程资源)的时候,Access Token会被复制一份给进程,进程通过它的创建者所给它设置的安全描述符中的ACL来判断我们是否可以去访问,是否有权限去执行某步操作。
一只特立独行的兔先生
2024/01/20
3850
ATT&CK视角下的红蓝对抗之Windows访问控制模型
从转储lsass学习Windows安全
​ Access Token是描述进程或线程的安全上下文的对象。其中包括进程或线程关联的用户账户的身份和权限。
Nayon
2023/04/17
1.1K0
从转储lsass学习Windows安全
域内最新提权漏洞原理深入分析
2021年11月9日,微软发布11月份安全补丁更新。在该安全补丁更新中,修复了两个域内提权漏洞CVE-2021-42287/CVE-2021-42278。但是当时这两个漏洞的利用详情和POC并未公布出来,因此并未受到太多人关注。
谢公子
2022/01/20
2.3K0
域内最新提权漏洞原理深入分析
本地组和域组
当机器安装完系统后,会自动创建默认的本地组。通过执行命令net localgroup可以查询出本机上的本地组,如图所示:
谢公子
2023/09/01
1.7K0
本地组和域组
【T1543.003】利用 ACL 隐藏恶意 Windows 服务
系统中每个 Service 在 Windows 中属于都一种对象(Object),用户在访问对象时的权限会被和对象绑定的安全描述信息(Security Descriptors)所限定,例如 修改、删除、读写等权限。
CN_Simo
2020/11/11
1.1K0
DACL原理.控制文件的访问权限(文件,注册表.目录.等任何带有安全属性的对象.)
DACL称为自主访问的控制列表.是应用程序开发必要且重要的部分.由于空DACL 允许对所有用户进行类型的访问.所以一般程序开发中都是传入NULL
IBinary
2019/09/29
2.6K0
DACL原理.控制文件的访问权限(文件,注册表.目录.等任何带有安全属性的对象.)
内网渗透测试:DCSync 攻击技术的利用研究
在域环境中,不同域控制器(DC)之间,每 15 分钟都会有一次域数据的同步。当一个域控制器(DC 1)想从其他域控制器(DC 2)获取数据时,DC 1 会向 DC 2 发起一个 GetNCChanges 请求,该请求的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。DCSync 就是利用的这个原理,通过 Directory Replication Service(DRS) 服务的 GetNCChanges 接口向域控发起数据同步请求。
FB客服
2021/09/16
3K0
域渗透技巧
由于每台服务器都需要注册用于Kerberos身份验证服务的SPN,因此这为在不进行大规模端口扫描的情况下收集有关内网域环境的信息提供了一个更加隐蔽的方法。
Gamma实验室
2021/07/23
1.3K0
域渗透技巧
企业域安全设置
在针对大型企业的域渗透过程会发现,普通域用户无法执行类似于net group "domain admins" /domain 和 net group "domain controllers" /domain的命令查询域管理员和域控等敏感组,会提示发生系统错误拒绝访问。这主要是由于目标企业针对域做了安全加固,设置了ACL限制了普通域用户对敏感用户组的查询。绕过方法也很简单,条条大道通罗马,可以换个方式来进行查询,可以使用powershell或者adfind工具换个方式来进行查询。
谢公子
2022/01/20
1.3K0
企业域安全设置
域目录分区Directory Partitions
我们使用ADExplorer连接活动目录数据库就可以看到不同的目录分区,如图所示,用红色框住的分别是域目录分区、配置目录分区和架构目录分区,而后面两个则是应用程序目录分区。
谢公子
2023/09/01
6310
域目录分区Directory Partitions
windows UAC 浅谈及绕过
随着网络攻击的日益繁多,自windows 7以及后续的windows系统中,微软引入了一种名叫UAC(User Account Control,用户账户控制)的一种安全功能,启用UAC后,在用户没有显示允许的情况下,即便是本地管理员账户也无法更改操作系统,这在很大程度上保护了我们的系统安全,以至后来我们常说的bypass UAC。
Khan安全团队
2021/03/10
7.2K0
windows UAC 浅谈及绕过
Kekeo的使用
Kekeo是MimiKatz的作者Benjamin用C语言写的针对Kerberos协议进行攻击的工具。它可以发起Kerberos请求,并将请求的票据导入内存中,从而模拟针对Kerberos协议各个阶段发起攻击,以方便安全研究员进行研究和学习。然而由于种种原因,并且其功能其实也没有Rubeus工具强大,导致Kekeo并没有很大范围的被使用。以下简要的讲述Kekeo的一些简单用法,本文的目的是希望大家对Kekeo工具有一个简单的了解。
谢公子
2024/04/19
5450
Kekeo的使用
深入分析CVE-2022-26923 ADCS权限提升漏洞
https://www.xie-sec.com/detail/l_628764a1e4b01a485201cba3/4
谢公子
2022/06/09
5.6K0
深入分析CVE-2022-26923 ADCS权限提升漏洞
SPN服务主体名称
SPN(ServicePrincipal Names)服务主体名称,是服务实例(如:HTTP、SMB、Exchange等服务)的唯一标识符。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林或域中的计算机上安装多个服务实例,则每个实例都必须具有自己的 SPN。如果客户端使用多个名称进行身份验证,则给定服务实例可以具有多个SPN。SPN 始终包含运行服务实例的主机名,因此服务实例可以为其主机的每个名称或别名注册SPN。一个用户账户下可以有多个SPN,但一个SPN只能注册到一个账户。如果想使用 Kerberos 协议来认证服务,那么必须正确配置SPN。
谢公子
2023/10/28
9090
SPN服务主体名称
利用Account Operators组实现接管域控或权限提升
在域渗透的过程中,我们往往只会关注Domain admins组和Enterprise Admins组,而会忽略了其它组。今天,我们要讲的是Account Operators组。该组是内置的本地域组。该组的成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器。但是,不能更改属于Administrators或Domain Admins组的账号,也不能更改这些组。在默认情况下,该组中没有成员。也就是说,该组默认是域内管理用户和组的特殊权限组。可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录
谢公子
2022/01/20
2.2K0
利用Account Operators组实现接管域控或权限提升
内网渗透-活动目录利用方法
https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/acl-persistence-abuse
亿人安全
2024/08/30
5060
内网渗透-活动目录利用方法
相关推荐
内网渗透|域内的组策略和ACL
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验