Translated ['src/mobile-pentesting/ios-pentesting/ios-universal-links.md

This commit is contained in:
Translator 2025-07-18 08:44:36 +00:00
parent 82846fc2a9
commit 6fedde5a01
4 changed files with 105 additions and 105 deletions

View File

@ -20,7 +20,7 @@ Universal links 为用户提供了 **无缝重定向** 的体验,通过直接
``` ```
对于更全面的见解,请参考[归档的 Apple 开发者文档](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2)。 对于更全面的见解,请参考[归档的 Apple 开发者文档](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2)。
如果使用的是编译的应用程序,可以按照[本指南](extracting-entitlements-from-compiled-application.md)中概述的方法提取权限。 如果使用的是编译的应用程序,可以按照[本指南](extracting-entitlements-from-compiled-application.md)中概述的方法提取权限。
### **检索 Apple App Site Association 文件** ### **检索 Apple App Site Association 文件**
@ -56,7 +56,7 @@ application.open(url, options: [:], completionHandler: nil)
return true return true
} }
``` ```
URLs 应该被仔细解析和验证,特别是当它们包含参数时,以防止潜在的欺骗或格式错误的数据。`NSURLComponents` API 对此目的非常有用,如下所示: URLs 应该被仔细解析和验证,特别是当它们包含参数时,以防止潜在的欺骗或格式错误的数据。`NSURLComponents` API 对此非常有用,如下所示:
```swift ```swift
func application(_ application: UIApplication, func application(_ application: UIApplication,
continue userActivity: NSUserActivity, continue userActivity: NSUserActivity,
@ -88,8 +88,8 @@ return false
| # | 弱点 | 测试方法 | 利用/影响 | | # | 弱点 | 测试方法 | 利用/影响 |
|---|----------|------------|-----------------------| |---|----------|------------|-----------------------|
| 1 | **AASA 文件中的 `paths` / `components` 过于宽泛**(例如 `"/": "*"` 或通配符如 `"/a/*"`)。 | • 检查下载的 AASA寻找 `*`、尾部斜杠或 `{"?": …}` 规则。<br>• 尝试请求仍符合规则的未知资源(`https://domain.com/a/evil?_p_dp=1`)。 | 通用链接劫持:注册相同域名的恶意 iOS 应用可以声称所有这些链接并呈现钓鱼 UI。一个现实世界的例子是 2025 年 5 月的 Temu.com 漏洞赏金报告,其中攻击者可以将任何 `/a/*` 路径重定向到他们自己的应用。 | | 1 | **AASA 文件中的 `paths` / `components` 过于宽泛**(例如 `"/": "*"` 或通配符如 `"/a/*"`)。 | • 检查下载的 AASA寻找 `*`、尾部斜杠或 `{"?": …}` 规则。<br>• 尝试请求仍然匹配规则的未知资源(`https://domain.com/a/evil?_p_dp=1`)。 | 通用链接劫持:注册相同域名的恶意 iOS 应用可以声称所有这些链接并呈现钓鱼 UI。一个现实世界的例子是 2025 年 5 月的 Temu.com 漏洞赏金报告,其中攻击者可以将任何 `/a/*` 路径重定向到他们自己的应用。 |
| 2 | **缺少深层链接路径的服务器端验证**。 | 在识别允许的路径后,向不存在的资源发出 `curl`/Burp 请求并观察 HTTP 状态码。任何不是 `404` 的状态(例如 200/302都是可疑的。 | 攻击者可以在允许的路径后托管任意内容,并通过合法域名提供,从而提高钓鱼或会话令牌盗窃的成功率。 | | 2 | **缺少深层链接路径的服务器端验证**。 | 在识别允许的路径后,向不存在的资源发出 `curl`/Burp 请求并观察 HTTP 状态码。任何不是 `404` 的状态(例如 200/302都是可疑的。 | 攻击者可以在允许的路径后托管任意内容,并通过合法域名提供,从而提高钓鱼或会话令牌盗窃的成功率。 |
| 3 | **应用端 URL 处理未进行方案/主机白名单**CVE-2024-10474 Mozilla Focus < 132)。 | 查找直接的 `openURL:`/`open(_:options:)` 调用或转发任意 URL JavaScript 桥接 | 内部页面可以走私 `myapp://` `https://` URL绕过浏览器的 URL 栏安全检查导致欺骗或意外的特权操作 | | 3 | **应用端 URL 处理未进行方案/主机白名单**CVE-2024-10474 Mozilla Focus < 132)。 | 查找直接的 `openURL:`/`open(_:options:)` 调用或转发任意 URL JavaScript 桥接 | 内部页面可以走私 `myapp://` `https://` URL绕过浏览器的 URL 栏安全检查导致欺骗或意外的特权操作 |
| 4 | **在权限中使用通配符子域**`*.example.com`)。 | 在权限中 `grep` 查找 `*.`。 | 如果任何子域被接管(例如通过未使用的 S3 存储桶),攻击者将自动获得通用链接绑定。 | | 4 | **在权限中使用通配符子域**`*.example.com`)。 | 在权限中 `grep` 查找 `*.`。 | 如果任何子域被接管(例如通过未使用的 S3 存储桶),攻击者将自动获得通用链接绑定。 |
@ -104,7 +104,7 @@ return false
## 工具 ## 工具
- [GetUniversal.link](https://getuniversal.link/): 帮助简化应用的通用链接和 AASA 文件的测试和管理。只需输入您的域名以验证 AASA 文件的完整性,或使用自定义仪表板轻松测试链接行为。该工具还帮助您确定 Apple 下次何时索引您的 AASA 文件。 - [GetUniversal.link](https://getuniversal.link/): 帮助简化应用的通用链接和 AASA 文件的测试和管理。只需输入您的域名以验证 AASA 文件的完整性,或使用自定义仪表板轻松测试链接行为。该工具还帮助您确定 Apple 下次何时索引您的 AASA 文件。
- [Knil](https://github.com/ethanhuang13/knil): 开源 iOS 工具,获取、解析并让您在设备上直接 **点击测试** 每个由域声明的通用链接。 - [Knil](https://github.com/ethanhuang13/knil): 开源 iOS 工具,获取、解析并让您直接在设备上 **tap-test** 每个由域声明的通用链接。
- [universal-link-validator](https://github.com/urbangems/universal-link-validator): CLI / Web 验证器,执行严格的 AASA 合规性检查并突出危险的通配符。 - [universal-link-validator](https://github.com/urbangems/universal-link-validator): CLI / Web 验证器,执行严格的 AASA 合规性检查并突出危险的通配符。
## 参考文献 ## 参考文献

View File

@ -26,7 +26,7 @@ Annotation: Messenger Service
UUID: 00000000-0000-0000-0000-000000000000 UUID: 00000000-0000-0000-0000-000000000000
Binding: ncadg_ip_udp:<IP>[1028] Binding: ncadg_ip_udp:<IP>[1028]
``` ```
通过特定协议启用对RPC定位服务的访问ncacn_ip_tcp和ncadg_ip_udp用于通过端口135访问ncacn_np用于SMB连接以及ncacn_http用于基于Web的RPC通信。以下命令示例展示了利用Metasploit模块审计和与MSRPC服务交互主要集中在端口135 通过特定协议启用对RPC定位服务的访问ncacn_ip_tcp和ncadg_ip_udp用于通过端口135访问ncacn_np用于SMB连接ncacn_http用于基于Web的RPC通信。以下命令示例展示了利用Metasploit模块审计和与MSRPC服务交互主要集中在端口135
```bash ```bash
use auxiliary/scanner/dcerpc/endpoint_mapper use auxiliary/scanner/dcerpc/endpoint_mapper
use auxiliary/scanner/dcerpc/hidden use auxiliary/scanner/dcerpc/hidden
@ -34,7 +34,7 @@ use auxiliary/scanner/dcerpc/management
use auxiliary/scanner/dcerpc/tcp_dcerpc_auditor use auxiliary/scanner/dcerpc/tcp_dcerpc_auditor
rpcdump.py <IP> -p 135 rpcdump.py <IP> -p 135
``` ```
所有选项除了 `tcp_dcerpc_auditor` 都是专门针对端口 135 上的 MSRPC 进行攻击设计的。 所有选项除了 `tcp_dcerpc_auditor` 都是专门针对端口 135 上的 MSRPC 进行攻击的。
#### 显著的 RPC 接口 #### 显著的 RPC 接口
@ -71,7 +71,7 @@ rpcdump.py <IP> -p 135
### 使用有效凭据执行 RCE ### 使用有效凭据执行 RCE
如果有有效用户的凭据,可以使用来自 impacket 框架的 [dcomexec.py](https://github.com/fortra/impacket/blob/master/examples/dcomexec.py) 在机器上执行远程代码 如果有有效用户的凭据,可以在机器上执行远程代码,使用来自 impacket 框架的 [dcomexec.py](https://github.com/fortra/impacket/blob/master/examples/dcomexec.py)。
**记得尝试不同的可用对象** **记得尝试不同的可用对象**
@ -85,7 +85,7 @@ rpcdump.py <IP> -p 135
## MSRPC 接口的自动模糊测试 ## MSRPC 接口的自动模糊测试
MS-RPC 接口暴露了一个大型且通常未记录的攻击面。开源的 [MS-RPC-Fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) PowerShell 模块基于 James Forshaw 的 `NtObjectManager` 动态创建 RPC 客户端存根,使用 Windows 二进制文件中已存在的接口元数据。一旦存在存根,该模块可以用变异输入轰炸每个过程并记录结果,使 **可重复的大规模 RPC 端点模糊测试成为可能,而无需编写一行 IDL** MS-RPC 接口暴露了一个大型且通常未记录的攻击面。开源的 [MS-RPC-Fuzzer](https://github.com/warpnet/MS-RPC-Fuzzer) PowerShell 模块基于 James Forshaw 的 `NtObjectManager` 动态创建 RPC 客户端存根,使用 Windows 二进制文件中已存在的接口元数据。一旦存在存根,该模块可以用变异输入轰炸每个过程并记录结果,使 **可重复的大规模 RPC 端点模糊测试成为可能,而无需编写一行 IDL**
### 1. 清点接口 ### 1. 清点接口
```powershell ```powershell
@ -176,18 +176,18 @@ Connect-RpcClient $client -stringbinding 'ncacn_np:127.0.0.1[\\pipe\\efsrpc]' `
$ctx = New-Object Marshal.NdrContextHandle $ctx = New-Object Marshal.NdrContextHandle
$client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0) $client.EfsRpcOpenFileRaw([ref]$ctx, "\\\127.0.0.1\test", 0)
``` ```
认证Kerberos / NTLM和加密级别`PacketIntegrity``PacketPrivacy`,…)可以通过 `Connect-RpcClient` cmdlet 直接提供 这对于**绕过保护高权限命名管道的安全描述符**非常理想。 认证Kerberos / NTLM和加密级别`PacketIntegrity``PacketPrivacy`,…)可以通过 `Connect-RpcClient` cmdlet 直接提供 这对于 **绕过保护高权限命名管道的安全描述符** 理想。
### 上下文感知的 RPC 模糊测试 (MS-RPC-Fuzzer) ### 上下文感知的 RPC 模糊测试 (MS-RPC-Fuzzer)
静态接口知识很好,但你真正想要的是**覆盖引导模糊测试**,它理解*上下文句柄*和复杂的参数链。开源的**MS-RPC-Fuzzer**项目正是自动化了这个工作流程: 静态接口知识很好,但你真正想要的是 **覆盖引导模糊测试**,它理解 *上下文句柄* 和复杂的参数链。开源的 **MS-RPC-Fuzzer** 项目正是自动化了这个工作流程:
1. 枚举目标二进制文件导出的每个接口/过程(`Get-RpcServer`)。 1. 枚举目标二进制文件导出的每个接口/过程(`Get-RpcServer`)。
2. 为每个接口生成动态客户端(`Format-RpcClient`)。 2. 为每个接口生成动态客户端(`Format-RpcClient`)。
3. 随机化输入参数(宽字符串长度、整数范围、枚举),同时尊重原始 **NDR 类型** 3. 随机化输入参数(宽字符串长度、整数范围、枚举),同时尊重原始 **NDR 类型**
4. 跟踪一个调用返回的*上下文句柄*,以自动提供后续过程。 4. 跟踪由一次调用返回的 *上下文句柄*,以自动提供后续过程。
5. 对所选传输ALPC、TCP、HTTP 或命名管道)发起高频调用。 5. 对所选传输ALPC、TCP、HTTP 或命名管道)发起高频调用。
6. 记录退出状态/故障/超时,并导出**Neo4j**导入文件以可视化*接口 → 过程 → 参数*关系和崩溃集群。 6. 记录退出状态/故障/超时,并导出 **Neo4j** 导入文件以可视化 *接口 → 过程 → 参数* 关系和崩溃集群。
示例运行(命名管道目标): 示例运行(命名管道目标):
```powershell ```powershell
@ -198,7 +198,7 @@ Invoke-MSRPCFuzzer -Pipe "\\.\pipe\efsrpc" -Auth NTLM `
``` ```
一个单一的越界写入或意外异常将立即显示出触发它的确切 opnum + 模糊负载——这是一个稳定的概念验证漏洞利用的完美起点。 一个单一的越界写入或意外异常将立即显示出触发它的确切 opnum + 模糊负载——这是一个稳定的概念验证漏洞利用的完美起点。
> ⚠️ 许多 RPC 服务在以 **NT AUTHORITY\SYSTEM** 身份运行的进程中执行。这里的任何内存安全问题通常会导致本地特权提升或(当通过 SMB/135 暴露时)*远程代码执行*。 > ⚠️ 许多 RPC 服务在以 **NT AUTHORITY\SYSTEM** 身份运行的进程中执行。这里的任何内存安全问题通常会转化为本地特权提升或(当通过 SMB/135 暴露时)*远程代码执行*。
## 参考文献 ## 参考文献

View File

@ -4,9 +4,9 @@
## Basic overview ## Basic overview
**Active Directory** 是一项基础技术,使 **网络管理员** 能够高效地创建和管理网络中的 **域**、**用户** 和 **对象**。它被设计为可扩展,便于将大量用户组织成可管理的 **组****子组**,同时在不同级别上控制 **访问权限** **Active Directory** 作为基础技术,使 **网络管理员** 能够高效地创建和管理网络中的 **域**、**用户** 和 **对象**。它被设计为可扩展,便于将大量用户组织成可管理的 **组****子组**,同时在不同级别上控制 **访问权限**
**Active Directory** 的结构由三个主要层次组成:**域**、**树** 和 **森林**。一个 **域** 包含一组对象,如 **用户****设备**,共享一个公共数据库。**树** 是通过共享结构连接的这些域的组,而 **森林** 代表多个树的集合,通过 **信任关系**相连接,形成组织结构的最上层。可以在每个层次上指定特定的 **访问****通信权限** **Active Directory** 的结构由三个主要层次组成:**域**、**树** 和 **森林**。一个 **域** 包含一组对象,如 **用户****设备**,共享一个公共数据库。**树** 是这些域的组,彼此通过共享结构连接,而 **森林** 代表多个树的集合,通过 **信任关系**,形成组织结构的最上层。可以在每个层次上指定特定的 **访问****通信权限**
**Active Directory** 中的关键概念包括: **Active Directory** 中的关键概念包括:
@ -14,7 +14,7 @@
2. **对象** 指目录中的实体,包括 **用户**、**组** 或 **共享文件夹** 2. **对象** 指目录中的实体,包括 **用户**、**组** 或 **共享文件夹**
3. **域** 作为目录对象的容器,多个域可以在一个 **森林** 中共存,每个域维护自己的对象集合。 3. **域** 作为目录对象的容器,多个域可以在一个 **森林** 中共存,每个域维护自己的对象集合。
4. **树** 一组共享公共根域的域。 4. **树** 一组共享公共根域的域。
5. **森林** Active Directory 中组织结构的顶点,由多个树组成,树之间存在 **信任关系** 5. **森林** Active Directory 中组织结构的顶点,由多个树组成,彼此之间有 **信任关系**
**Active Directory 域服务 (AD DS)** 包含一系列对网络内集中管理和通信至关重要的服务。这些服务包括: **Active Directory 域服务 (AD DS)** 包含一系列对网络内集中管理和通信至关重要的服务。这些服务包括:
@ -25,7 +25,7 @@
5. **权限管理** 通过规范其未经授权的分发和使用来帮助保护版权材料。 5. **权限管理** 通过规范其未经授权的分发和使用来帮助保护版权材料。
6. **DNS 服务** **域名** 的解析至关重要。 6. **DNS 服务** **域名** 的解析至关重要。
有关更详细的说明,请查看:[**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory) 有关更详细的解释,请查看:[**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
### **Kerberos Authentication** ### **Kerberos Authentication**
@ -58,7 +58,7 @@
../../network-services-pentesting/pentesting-smb/ ../../network-services-pentesting/pentesting-smb/
{{#endref}} {{#endref}}
- **枚举 LDAP** - **枚举 Ldap**
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>` - `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
- 有关如何枚举 LDAP 的更详细指南可以在这里找到(请 **特别注意匿名访问** - 有关如何枚举 LDAP 的更详细指南可以在这里找到(请 **特别注意匿名访问**
@ -69,7 +69,7 @@
- **毒化网络** - **毒化网络**
- 收集凭据 [**通过 Responder 冒充服务**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) - 收集凭据 [**通过 Responder 冒充服务**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- 通过 [**滥用中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) 访问主机 - 通过 [**滥用中继攻击**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) 访问主机
- 收集凭据 **暴露** [** UPnP 服务与 evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856) - 收集凭据 **暴露** [**伪造的 UPnP 服务与 evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html): - [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html):
- 从内部文档、社交媒体、服务(主要是 Web中提取用户名/姓名,以及从公开可用的信息中提取。 - 从内部文档、社交媒体、服务(主要是 Web中提取用户名/姓名,以及从公开可用的信息中提取。
- 如果您找到公司员工的完整姓名,您可以尝试不同的 AD **用户名约定****[阅读此文](https://activedirectorypro.com/active-directory-user-naming-convention/)**。最常见的约定是_NameSurname_、_Name.Surname_、_NamSur_每个三个字母、_Nam.Sur_、_NSurname_、_N.Surname_、_SurnameName_、_Surname.Name_、_SurnameN_、_Surname.N_、3 个 _随机字母和 3 个随机数字_abc123 - 如果您找到公司员工的完整姓名,您可以尝试不同的 AD **用户名约定****[阅读此文](https://activedirectorypro.com/active-directory-user-naming-convention/)**。最常见的约定是_NameSurname_、_Name.Surname_、_NamSur_每个三个字母、_Nam.Sur_、_NSurname_、_N.Surname_、_SurnameName_、_Surname.Name_、_SurnameN_、_Surname.N_、3 个 _随机字母和 3 个随机数字_abc123
@ -81,7 +81,7 @@
- **匿名 SMB/LDAP 枚举:** 检查 [**渗透测试 SMB**](../../network-services-pentesting/pentesting-smb/index.html) 和 [**渗透测试 LDAP**](../../network-services-pentesting/pentesting-ldap.md) 页面。 - **匿名 SMB/LDAP 枚举:** 检查 [**渗透测试 SMB**](../../network-services-pentesting/pentesting-smb/index.html) 和 [**渗透测试 LDAP**](../../network-services-pentesting/pentesting-ldap.md) 页面。
- **Kerbrute 枚举**:当请求 **无效用户名** 时,服务器将使用 **Kerberos 错误** 代码 _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ 响应,从而使我们能够确定用户名无效。 **有效用户名** 将引发 **AS-REP** 响应中的 **TGT** 或错误 _KRB5KDC_ERR_PREAUTH_REQUIRED_指示用户需要进行预身份验证。 - **Kerbrute 枚举**:当请求 **无效用户名** 时,服务器将使用 **Kerberos 错误** 代码 _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ 响应,从而使我们能够确定用户名无效。 **有效用户名** 将引发 **AS-REP** 响应中的 **TGT** 或错误 _KRB5KDC_ERR_PREAUTH_REQUIRED_指示用户需要进行预身份验证。
- **对 MS-NRPC 的无身份验证**:在域控制器上使用 auth-level = 1无身份验证对 MS-NRPCNetlogon接口进行操作。该方法在绑定 MS-NRPC 接口后调用 `DsrGetDcNameEx2` 函数,以检查用户或计算机是否存在而无需任何凭据。[NauthNRPC](https://github.com/sud0Ru/NauthNRPC) 工具实现了这种类型的枚举。研究可以在 [这里](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf) 找到。 - **对 MS-NRPC 的无身份验证**:在域控制器上使用 auth-level = 1无身份验证对 MS-NRPCNetlogon接口进行调用。该方法在绑定 MS-NRPC 接口后调用 `DsrGetDcNameEx2` 函数,以检查用户或计算机是否存在而无需任何凭据。 [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) 工具实现了这种类型的枚举。研究可以在 [这里](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf) 找到。
```bash ```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases ./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -118,7 +118,7 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
- [**ASREPRoast**](asreproast.md):如果用户 **没有** 属性 _DONT_REQ_PREAUTH_你可以 **请求该用户的 AS_REP 消息**,其中将包含一些由用户密码的派生加密的数据。 - [**ASREPRoast**](asreproast.md):如果用户 **没有** 属性 _DONT_REQ_PREAUTH_你可以 **请求该用户的 AS_REP 消息**,其中将包含一些由用户密码的派生加密的数据。
- [**密码喷洒**](password-spraying.md):让我们尝试对每个发现的用户使用最 **常见的密码**,也许某个用户使用了一个糟糕的密码(记住密码策略!)。 - [**密码喷洒**](password-spraying.md):让我们尝试对每个发现的用户使用最 **常见的密码**,也许某个用户使用了一个糟糕的密码(记住密码策略!)。
- 请注意,你还可以 **喷洒 OWA 服务器**,以尝试访问用户的邮件服务器。 - 请注意,你也可以 **喷洒 OWA 服务器**尝试访问用户的邮件服务器。
{{#ref}} {{#ref}}
password-spraying.md password-spraying.md
@ -134,19 +134,19 @@ password-spraying.md
### NTLM 中继 ### 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 凭证
如果你可以使用 **null 或访客用户** **访问其他 PC 或共享**,你可以 **放置文件**(如 SCF 文件),如果以某种方式被访问,将 **触发对你的 NTLM 认证**,这样你就可以 **取** **NTLM 挑战** 进行破解: 如果你可以使用 **null 或访客用户** **访问其他 PC 或共享**,你可以 **放置文件**(如 SCF 文件),如果以某种方式被访问,将 **触发对你的 NTLM 认证**,这样你就可以 **取** **NTLM 挑战** 进行破解:
{{#ref}} {{#ref}}
../ntlm/places-to-steal-ntlm-creds.md ../ntlm/places-to-steal-ntlm-creds.md
{{#endref}} {{#endref}}
## 使用凭/会话枚举活动目录 ## 使用凭/会话枚举活动目录
在这个阶段,你需要 **获取有效域账户的凭据或会话。** 如果你有一些有效的凭据或作为域用户的 shell**你应该记住之前给出的选项仍然是妥协其他用户的选项**。 在这个阶段,你需要 **获取有效域账户的凭证或会话。** 如果你有一些有效的凭证或作为域用户的 shell**你应该记住之前给出的选项仍然是妥协其他用户的选项**。
在开始经过身份验证的枚举之前,你应该知道 **Kerberos 双跳问题。** 在开始经过身份验证的枚举之前,你应该知道 **Kerberos 双跳问题。**
@ -163,11 +163,11 @@ kerberos-double-hop-problem.md
- 你可以使用 [**CMD 进行基本侦查**](../basic-cmd-for-pentesters.md#domain-info) - 你可以使用 [**CMD 进行基本侦查**](../basic-cmd-for-pentesters.md#domain-info)
- 你也可以使用 [**powershell 进行侦查**](../basic-powershell-for-pentesters/index.html),这将更加隐蔽 - 你也可以使用 [**powershell 进行侦查**](../basic-powershell-for-pentesters/index.html),这将更加隐蔽
- 你还可以 [**使用 powerview**](../basic-powershell-for-pentesters/powerview.md) 提取更详细的信息 - 你还可以 [**使用 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 枚举工具有:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**AD 的 DNS 记录**](ad-dns-records.md),因为它们可能包含有趣的信息。 - [**AD 的 DNS 记录**](ad-dns-records.md),因为它们可能包含有趣的信息。
- 你可以使用 **AdExplorer.exe** 这个 **GUI 工具** 来枚举目录,来自 **SysInternal** 套件。 - 你可以使用 **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) 以获取其他方法。 - 你还可以使用 **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) 枚举域。 - 如果你使用 **Linux**,你也可以使用 [**pywerview**](https://github.com/the-useless-one/pywerview) 枚举域。
- 你还可以尝试自动化工具,如: - 你还可以尝试自动化工具,如:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch) - [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
@ -188,19 +188,19 @@ Kerberoasting 涉及获取 **TGS 票证**,这些票证用于与用户账户相
kerberoast.md kerberoast.md
{{#endref}} {{#endref}}
### 远程连接RDP、SSH、FTP、Win-RM 等) ### 远程连接 (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)。 本书中有一整页关于 [**Windows 中的本地权限提升**](../windows-local-privilege-escalation/index.html) 和一个 [**检查表**](../checklist-windows-privilege-escalation.md)。此外,不要忘记使用 [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)。
### 当前会话票证 ### 当前会话票证
你很 **不可能** 在当前用户中找到 **票证**,使你能够访问意外的资源,但你可以检查: 你很 **不可能** 在当前用户中找到 **票证**,使你能够访问意外的资源,但你可以检查:
```bash ```bash
## List all tickets (if not admin, only current user tickets) ## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage .\Rubeus.exe triage
@ -234,25 +234,25 @@ kerberoast.md
printnightmare.md printnightmare.md
{{#endref}} {{#endref}}
## 在具有特权凭据/会话的活动目录上进行特权提升 ## 使用特权凭据/会话在活动目录上进行特权提升
**对于以下技术,普通域用户是不够的,你需要一些特殊的特权/凭据来执行这些攻击。** **对于以下技术,普通域用户是不够的,你需要一些特殊的特权/凭据来执行这些攻击。**
### 哈希提取 ### 哈希提取
希望你已经成功**破坏了一些本地管理员**账户,使用 [AsRepRoast](asreproast.md)、[Password Spraying](password-spraying.md)、[Kerberoast](kerberoast.md)、[Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 包括中继、[EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)、[本地提升特权](../windows-local-privilege-escalation/index.html)。\ 希望你已经成功**破坏了一些本地管理员**账户,使用 [AsRepRoast](asreproast.md)、[Password Spraying](password-spraying.md)、[Kerberoast](kerberoast.md)、[Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) 包括中继、[EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)、[本地提升特权](../windows-local-privilege-escalation/index.html)。\
然后,是时候转储内存和本地的所有哈希了。\ 然后,是时候在内存和本地转储所有哈希了。\
[**阅读此页面了解获取哈希的不同方法。**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md) [**阅读此页面了解获取哈希的不同方法。**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### 传递哈希 ### 传递哈希
**一旦你拥有用户的哈希**,你可以用它来**冒充**该用户。\ **一旦你拥有用户的哈希**,你可以用它来**冒充**该用户。\
你需要使用些**工具**来**执行**使用该**哈希**的**NTLM 认证****或者**你可以创建一个新的**sessionlogon**并**注入**该**哈希**到**LSASS**中,这样当任何**NTLM 认证被执行**时,该**哈希将被使用。**最后一个选项就是 mimikatz 所做的。\ 你需要使用些**工具**来**执行**使用该**哈希**的**NTLM 认证****或者**你可以创建一个新的**sessionlogon**并**注入**该**哈希**到**LSASS**中,这样当任何**NTLM 认证被执行**时,该**哈希将被使用。**最后一个选项就是 mimikatz 所做的。\
[**阅读此页面以获取更多信息。**](../ntlm/index.html#pass-the-hash) [**阅读此页面以获取更多信息。**](../ntlm/index.html#pass-the-hash)
### 超越哈希/传递密钥 ### 超越传递哈希/传递密钥
此攻击旨在**使用用户的 NTLM 哈希请求 Kerberos 票证**,作为常见的 NTLM 协议下的传递哈希的替代方案。因此,这在**禁用 NTLM 协议**且仅允许**Kerberos**作为认证协议的网络中可能特别**有用**。 此攻击旨在**使用用户的 NTLM 哈希请求 Kerberos 票证**,作为常见的 NTLM 协议下的传递哈希的替代方案。因此,这在**禁用 NTLM 协议**且仅允许**Kerberos**作为认证协议的网络中尤其**有用**。
{{#ref}} {{#ref}}
over-pass-the-hash-pass-the-key.md over-pass-the-hash-pass-the-key.md
@ -260,7 +260,7 @@ over-pass-the-hash-pass-the-key.md
### 传递票证 ### 传递票证
在**传递票证 (PTT)** 攻击方法中,攻击者**窃取用户的认证票证**而不是他们的密码或哈希值。然后使用这个被窃取的票证来**冒充用户**,获得对网络中资源和服务的未授权访问。 在**传递票证 (PTT)** 攻击方法中,攻击者**窃取用户的认证票证**而不是他们的密码或哈希值。然后使用这个被窃取的票证来**冒充用户**,获得对网络中资源和服务的未授权访问。
{{#ref}} {{#ref}}
pass-the-ticket.md pass-the-ticket.md
@ -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。\ 如果发现任何具有属性 [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) 冒充他。\ 因此,如果**域管理员登录到计算机**将能够转储他的 TGT并使用 [Pass the Ticket](pass-the-ticket.md) 冒充他。\
由于受限委派,甚至可以**自动妥协打印服务器**(希望它是 DC 由于受限委派,甚至可以**自动妥协打印服务器**(希望它是 DC
{{#ref}} {{#ref}}
unconstrained-delegation.md unconstrained-delegation.md
@ -300,7 +300,7 @@ unconstrained-delegation.md
### 受限委派 ### 受限委派
如果用户或计算机被允许进行“受限委派”,它将能够**冒充任何用户以访问计算机中的某些服务**。\ 如果用户或计算机被允许进行“受限委派”,它将能够**冒充任何用户以访问计算机中的某些服务**。\
然后,如果您**妥协**此用户/计算机的哈希,您将能够**冒充任何用户**(甚至是域管理员)以访问某些服务。 然后,如果你**妥协**该用户/计算机的哈希,你将能够**冒充任何用户**(甚至是域管理员)以访问某些服务。
{{#ref}} {{#ref}}
constrained-delegation.md constrained-delegation.md
@ -308,7 +308,7 @@ constrained-delegation.md
### 基于资源的受限委派 ### 基于资源的受限委派
在远程计算机的 Active Directory 对象上拥有**WRITE**权限可以实现**提升权限**的代码执行: 在远程计算机的 Active Directory 对象上拥有**写入**权限可以实现**提升权限**的代码执行:
{{#ref}} {{#ref}}
resource-based-constrained-delegation.md resource-based-constrained-delegation.md
@ -316,7 +316,7 @@ resource-based-constrained-delegation.md
### 权限/ACL 滥用 ### 权限/ACL 滥用
被妥协的用户可能对某些域对象拥有一些**有趣的权限**,这可能让**横向移动**/**提升**权限。 被妥协的用户可能对某些域对象拥有一些**有趣的权限**,这可能让**横向移动**/**提升**权限。
{{#ref}} {{#ref}}
acl-persistence-abuse/ acl-persistence-abuse/
@ -341,7 +341,7 @@ rdp-sessions-abuse.md
### LAPS ### LAPS
**LAPS** 提供了一种管理域加入计算机上**本地管理员密码**的系统,确保其**随机化**、唯一且频繁**更改**。这些密码存储在 Active Directory 中,访问通过 ACL 控制,仅限授权用户。拥有足够权限访问这些密码后,转向其他计算机变得可能。 **LAPS** 提供了一种管理域加入计算机上**本地管理员密码**的系统,确保其**随机化**、唯一且频繁**更改**。这些密码存储在 Active Directory 中,访问通过 ACL 控制,仅限授权用户。拥有足够权限访问这些密码后,转向其他计算机变得可能。
{{#ref}} {{#ref}}
laps.md laps.md
@ -357,17 +357,17 @@ ad-certificates/certificate-theft.md
### 证书模板滥用 ### 证书模板滥用
如果配置了**易受攻击的模板**则可以滥用它们以提升权限: 如果配置了**易受攻击的模板**可以利用它们来提升权限:
{{#ref}} {{#ref}}
ad-certificates/domain-escalation.md ad-certificates/domain-escalation.md
{{#endref}} {{#endref}}
## 使用高权限账户的后期利用 ## 高权限账户的后期利用
### 转储域凭据 ### 转储域凭据
一旦您获得**域管理员**或更好的**企业管理员**权限,您可以**转储**域数据库_ntds.dit_。 一旦你获得**域管理员**或更好的**企业管理员**权限,你可以**转储**域数据库_ntds.dit_。
[**有关 DCSync 攻击的更多信息可以在这里找到**](dcsync.md)。 [**有关 DCSync 攻击的更多信息可以在这里找到**](dcsync.md)。
@ -376,7 +376,7 @@ ad-certificates/domain-escalation.md
### 权限提升作为持久性 ### 权限提升作为持久性
之前讨论的一些技术可以用于持久性。\ 之前讨论的一些技术可以用于持久性。\
例如,可以: 例如,可以:
- 使用户易受 [**Kerberoast**](kerberoast.md) 攻击 - 使用户易受 [**Kerberoast**](kerberoast.md) 攻击
@ -398,7 +398,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
### 银票 ### 银票
**银票攻击**为特定服务创建一个**合法的票据授予服务TGS票据**,使用**NTLM 哈希**(例如,**PC 账户的哈希**)。此方法用于**访问服务权限**。 **银票攻击**为特定服务创建一个**合法的票据授予服务 (TGS) 票据**,使用**NTLM 哈希**(例如,**PC 账户的哈希**)。此方法用于**访问服务权限**。
{{#ref}} {{#ref}}
silver-ticket.md silver-ticket.md
@ -406,7 +406,7 @@ silver-ticket.md
### 金票 ### 金票
**金票攻击**涉及攻击者在 Active Directory (AD) 环境中获取**krbtgt 账户的 NTLM 哈希**。该账户是特殊的,因为它用于签署所有**票据授予票据TGTs**,这些票据对于在 AD 网络中进行身份验证至关重要。 **金票攻击**涉及攻击者在 Active Directory (AD) 环境中获取**krbtgt 账户的 NTLM 哈希**。该账户是特殊的,因为它用于签署所有**票据授予票据 (TGTs)**,这些票据对于在 AD 网络中进行身份验证至关重要。
一旦攻击者获得此哈希,他们可以为他们选择的任何账户创建**TGTs**(银票攻击)。 一旦攻击者获得此哈希,他们可以为他们选择的任何账户创建**TGTs**(银票攻击)。
@ -416,7 +416,7 @@ golden-ticket.md
### 钻石票 ### 钻石票
这些就像金票,以一种**绕过常见金票检测机制**的方式伪造 这些票据类似于金票,但伪造的方式**绕过常见的金票检测机制**
{{#ref}} {{#ref}}
diamond-ticket.md diamond-ticket.md
@ -440,13 +440,13 @@ ad-certificates/domain-persistence.md
### AdminSDHolder 组 ### AdminSDHolder 组
Active Directory 中的**AdminSDHolder**对象通过在这些组中应用标准**访问控制列表ACL**来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可能被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这个本应保护的安全措施因此可能适得其反,允许未经授权的访问,除非进行严格监控。 Active Directory 中的 **AdminSDHolder** 对象通过在这些组中应用标准的**访问控制列表 (ACL)** 来确保**特权组**(如域管理员和企业管理员)的安全,以防止未经授权的更改。然而,这一功能可能被利用;如果攻击者修改 AdminSDHolder 的 ACL 以授予普通用户完全访问权限,该用户将获得对所有特权组的广泛控制。这个本应保护的安全措施因此可能适得其反,允许未经授权的访问,除非进行严格监控。
[**有关 AdminDSHolder 组的更多信息。**](privileged-groups-and-token-privileges.md#adminsdholder-group) [**有关 AdminDSHolder 组的更多信息。**](privileged-groups-and-token-privileges.md#adminsdholder-group)
### DSRM 凭据 ### DSRM 凭据
在每个**域控制器DC**内部,存在一个**本地管理员**账户。通过在这样的机器上获得管理员权限,可以使用**mimikatz**提取本地管理员哈希。随后,需要进行注册表修改以**启用使用此密码**,允许远程访问本地管理员账户。 在每个**域控制器 (DC)** 内,存在一个**本地管理员**账户。通过在这样的机器上获得管理员权限,可以使用**mimikatz**提取本地管理员哈希。随后,需要进行注册表修改以**启用使用此密码**,允许远程访问本地管理员账户。
{{#ref}} {{#ref}}
dsrm-credentials.md dsrm-credentials.md
@ -454,7 +454,7 @@ dsrm-credentials.md
### ACL 持久性 ### ACL 持久性
可以**给予**某个**用户**对某些特定域对象的**特殊权限**,这将使该用户**在未来提升权限**。 可以**给予**某个**用户**对某些特定域对象的**特殊权限**,这将使该用户**在未来提升权限**。
{{#ref}} {{#ref}}
acl-persistence-abuse/ acl-persistence-abuse/
@ -462,13 +462,13 @@ acl-persistence-abuse/
### 安全描述符 ### 安全描述符
**安全描述符**用于**存储**对象对另一个对象的**权限**。如果您只需对对象的**安全描述符**进行**小改动**,就可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。 **安全描述符**用于**存储**对象对另一个对象的**权限**。如果你只需在对象的**安全描述符**中**进行一点更改**,你可以在不需要成为特权组成员的情况下获得对该对象的非常有趣的权限。
{{#ref}} {{#ref}}
security-descriptors.md security-descriptors.md
{{#endref}} {{#endref}}
### 骨架钥 ### 骨架
在内存中更改**LSASS**以建立一个**通用密码**,授予对所有域账户的访问权限。 在内存中更改**LSASS**以建立一个**通用密码**,授予对所有域账户的访问权限。
@ -479,7 +479,7 @@ skeleton-key.md
### 自定义 SSP ### 自定义 SSP
[在这里了解什么是 SSP安全支持提供者](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\ [在这里了解什么是 SSP安全支持提供者](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
可以创建自己的**SSP**以**捕获**用于访问机器的**凭据**的**明文**。 可以创建自己的**SSP**以**捕获**用于访问机器的**凭据**的**明文**。
{{#ref}} {{#ref}}
custom-ssp.md custom-ssp.md
@ -487,8 +487,8 @@ custom-ssp.md
### DCShadow ### DCShadow
它在 AD 中注册一个**新的域控制器**,并使用它在指定对象上**推送属性**SIDHistory、SPNs...**不留**任何关于**修改**的**日志**。您**需要 DA** 权限并在**根域**内。\ 它在 AD 中注册一个**新的域控制器**,并使用它在指定对象上**推送属性**SIDHistory、SPNs...**不留下**任何关于**修改**的**日志**。你**需要 DA** 权限并在**根域**内。\
请注意,如果使用错误的数据,会出现相当丑陋的日志。 请注意,如果使用错误的数据,会出现相当丑陋的日志。
{{#ref}} {{#ref}}
dcshadow.md dcshadow.md
@ -496,7 +496,7 @@ dcshadow.md
### LAPS 持久性 ### LAPS 持久性
之前我们讨论了如果有**足够的权限读取 LAPS 密码**,如何提升权限。然而,这些密码也可以用于**维持持久性**。\ 之前我们讨论了如果有**足够的权限读取 LAPS 密码**,如何提升权限。然而,这些密码也可以用于**维持持久性**。\
检查: 检查:
{{#ref}} {{#ref}}
@ -509,23 +509,23 @@ 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授予用户访问该服务的权限。 在典型场景中,如果用户打算访问**受信任域**中的服务,他们必须首先从自己域的 DC 请求一个称为**跨领域 TGT**的特殊票据。此 TGT 使用两个域已达成一致的共享**密钥**进行加密。然后,用户将此 TGT 提交给**受信任域的 DC**以获取服务票据(**TGS**)。在受信任域的 DC 成功验证跨领域 TGT 后,它会发出 TGS授予用户访问该服务的权限。
**步骤** **步骤**
1. **域 1**中的**客户端计算机**使用其**NTLM 哈希**向其**域控制器DC1**请求**票据授予票据TGT**,以启动该过程 1. **域 1** 中的 **客户端计算机**开始该过程,使用其**NTLM 哈希**向其**域控制器 (DC1)** 请求**票据授予票据 (TGT)**
2. 如果客户端成功通过身份验证DC1 发出新的 TGT。 2. 如果客户端成功通过身份验证DC1 发出新的 TGT。
3. 客户端然后向 DC1 请求一个**跨领域 TGT**,该 TGT 是访问**域 2**中资源所需的。 3. 客户端然后向 DC1 请求一个**跨领域 TGT**,该 TGT 是访问**域 2**中资源所需的。
4. 跨领域 TGT 使用作为双向域信任的一部分在 DC1 和 DC2 之间共享的**信任密钥**进行加密。 4. 跨领域 TGT 使用作为双向域信任的一部分在 DC1 和 DC2 之间共享的**信任密钥**进行加密。
5. 客户端将跨领域 TGT 带到**域 2 的域控制器DC2**。 5. 客户端将跨领域 TGT 带到**域 2 的域控制器 (DC2)**。
6. DC2 使用其共享信任密钥验证跨领域 TGT如果有效则为客户端想要访问的域 2 中的服务器发出**票据授予服务TGS**。 6. DC2 使用其共享信任密钥验证跨领域 TGT如果有效则为客户端想要访问的域 2 中的服务器发出**票据授予服务 (TGS)**。
7. 最后,客户端将此 TGS 提交给服务器,该 TGS 使用服务器的账户哈希进行加密,以获取对域 2 中服务的访问权限。 7. 最后,客户端将此 TGS 提交给服务器,该 TGS 使用服务器的账户哈希进行加密,以获取对域 2 中服务的访问权限。
### 不同的信任 ### 不同的信任
重要的是要注意,**信任可以是单向或双向**。在双向选项中,两个域将相互信任,但在**单向**信任关系中,一个域将是**受信任**的,另一个是**信任**的域。在最后一种情况下,**只能从受信任的域访问信任域内的资源**。 重要的是要注意,**信任可以是单向或双向**。在双向选项中,两个域将相互信任,但在**单向**信任关系中,一个域将是**受信任**的,另一个是**信任**的域。在最后一种情况下,**只能从受信任的域访问信任域内的资源**。
如果域 A 信任域 BA 是信任域B 是受信任域。此外,在**域 A**中,这将是**出站信任**;而在**域 B**中,这将是**入站信任**。 如果域 A 信任域 BA 是信任域B 是受信任域。此外,在**域 A**中,这将是**出站信任**;而在**域 B**中,这将是**入站信任**。
@ -534,33 +534,33 @@ laps.md
- **父子信任**:这是同一森林内的常见设置,子域自动与其父域建立双向传递信任。这意味着身份验证请求可以在父域和子域之间无缝流动。 - **父子信任**:这是同一森林内的常见设置,子域自动与其父域建立双向传递信任。这意味着身份验证请求可以在父域和子域之间无缝流动。
- **交叉链接信任**:被称为“快捷信任”,这些信任在子域之间建立,以加快引用过程。在复杂的森林中,身份验证引用通常必须向森林根部上行,然后再向目标域下行。通过创建交叉链接,旅程缩短,这在地理分散的环境中特别有利。 - **交叉链接信任**:被称为“快捷信任”,这些信任在子域之间建立,以加快引用过程。在复杂的森林中,身份验证引用通常必须向森林根部上行,然后再向目标域下行。通过创建交叉链接,旅程缩短,这在地理分散的环境中特别有利。
- **外部信任**:这些信任在不同的、不相关的域之间建立,通常是非传递的。根据[微软的文档](<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>)。 - **树根信任**:这些信任在森林根域和新添加的树根之间自动建立。虽然不常见,但树根信任对于将新域树添加到森林非常重要,使能够保持唯一的域名并确保双向传递性。有关更多信息,请参见[微软的指南](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>)。
- **森林信任**:这种类型的信任是两个森林根域之间的双向传递信任,也强制执行 SID 过滤以增强安全措施。 - **森林信任**:这种类型的信任是两个森林根域之间的双向传递信任,也强制执行 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或**非传递的**。 - 信任关系也可以是**传递的**A 信任 BB 信任 C则 A 信任 C或**非传递的**。
- 信任关系可以设置为**双向信任**相互信任)或**单向信任**(只有一个信任另一个)。 - 信任关系可以设置为**双向信任**彼此信任)或**单向信任**(只有一个信任另一个)。
### 攻击路径 ### 攻击路径
1. **枚举**信任关系 1. **枚举**信任关系
2. 检查是否有任何**安全主体**(用户/组/计算机)对**其他域**的资源有**访问**权限,可能通过 ACE 条目或通过在其他域的组中。寻找**跨域的关系**(信任可能是为此创建的)。 2. 检查是否有任何**安全主体**(用户/组/计算机)对**其他域**的资源有**访问**权限,可能通过 ACE 条目或通过在其他域的组中。寻找**跨域的关系**(信任可能是为此创建的)。
1. 在这种情况下kerberoast 可能是另一个选项。 1. 在这种情况下kerberoast 可能是另一个选项。
3. **妥协**可以**跨域**进行**转移**的**账户** 3. **妥协**可以**跨域**进行**转移**的**账户**
攻击者可以通过三种主要机制访问另一个域中的资源: 攻击者可以通过三种主要机制访问另一个域中的资源:
- **本地组成员资格**:主体可能被添加到机器上的本地组中,例如服务器上的“管理员”组,从而授予他们对该机器的重大控制。 - **本地组成员资格**:主体可能被添加到机器上的本地组中,例如服务器上的“管理员”组,从而授予他们对该机器的重大控制。
- **外部域组成员资格**:主体也可以是外部域中组的成员。然而,方法的有效性取决于信任的性质和组的范围。 - **外部域组成员资格**:主体也可以是外部域中组的成员。然而,这种方法的有效性取决于信任的性质和组的范围。
- **访问控制列表ACLs**:主体可能在**ACL**中被指定,特别是在**DACL**中的**ACE**内,提供对特定资源的访问权限。对于那些希望深入了解 ACL、DACL 和 ACE 机制的人,题为“[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)”的白皮书是一个宝贵的资源。 - **访问控制列表 (ACL)**:主体可能在**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 ```powershell
# Get users that are i groups outside of the current domain # Get users that are i groups outside of the current domain
Get-DomainForeignUser Get-DomainForeignUser
@ -568,7 +568,7 @@ Get-DomainForeignUser
# Get groups inside a domain with users our # Get groups inside a domain with users our
Get-DomainForeignGroupMember Get-DomainForeignGroupMember
``` ```
### 子到父森林权提升 ### 子到父森林权提升
```bash ```bash
# Fro powerview # Fro powerview
Get-DomainTrust Get-DomainTrust
@ -622,7 +622,7 @@ sid-history-injection.md
**危害森林中的任何 gMSA** **危害森林中的任何 gMSA**
一个攻击向量涉及针对域内特权 gMSA。KDS 密钥是计算 gMSA 密码所必需的,存储在配置 NC 中。通过在任何 DC 上拥有 SYSTEM 权限,可以访问 KDS 密钥并计算森林中任何 gMSA 的密码。 一个攻击向量涉及针对域内特权 gMSA。KDS Root 密钥是计算 gMSA 密码所必需的,存储在配置 NC 中。通过在任何 DC 上拥有 SYSTEM 权限,可以访问 KDS Root 密钥并计算森林中任何 gMSA 的密码。
详细分析和逐步指导可以在以下内容中找到: 详细分析和逐步指导可以在以下内容中找到:
@ -636,13 +636,13 @@ golden-dmsa-gmsa.md
此方法需要耐心,等待新特权 AD 对象的创建。通过 SYSTEM 权限,攻击者可以修改 AD 架构,以授予任何用户对所有类的完全控制。这可能导致对新创建的 AD 对象的未经授权的访问和控制。 此方法需要耐心,等待新特权 AD 对象的创建。通过 SYSTEM 权限,攻击者可以修改 AD 架构,以授予任何用户对所有类的完全控制。这可能导致对新创建的 AD 对象的未经授权的访问和控制。
有关进一步阅读的信息,请参见 [架构变更信任攻击](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent)。 有关进一步阅读,请参见 [架构变更信任攻击](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent)。
**从 DA 到 EA 的 ADCS ESC5** **通过 ADCS ESC5 从 DA 到 EA**
ADCS ESC5 漏洞针对对公钥基础设施 (PKI) 对象的控制,以创建一个证书模板,使其能够作为森林中的任何用户进行身份验证。由于 PKI 对象位于配置 NC 中,危害可写的子 DC 使得执行 ESC5 攻击成为可能。 ADCS ESC5 漏洞针对对公钥基础设施 (PKI) 对象的控制,以创建一个证书模板,使其能够作为森林中的任何用户进行身份验证。由于 PKI 对象位于配置 NC 中,危害可写的子 DC 使得执行 ESC5 攻击成为可能。
有关更多详细信息,请参见 [从 DA 到 EA 的 ESC5](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 ```bash
@ -655,7 +655,7 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM WhenChanged : 2/19/2021 10:50:56 PM
``` ```
在这种情况下,**您的域受到外部域的信任**,这使您对其拥有**不确定的权限**。您需要找出**您的域中的哪些主体对外部域具有哪些访问权限**,然后尝试利用 在这种情况下,**您的域被外部域信任**,这使您拥有**不确定的权限**。您需要找出**您的域中的哪些主体对外部域具有哪些访问权限**,然后尝试利用这些权限
{{#ref}} {{#ref}}
external-forest-domain-oneway-inbound.md external-forest-domain-oneway-inbound.md
@ -673,9 +673,9 @@ TrustDirection : Outbound --> Outbound trust
WhenCreated : 2/19/2021 10:15:24 PM WhenCreated : 2/19/2021 10:15:24 PM
WhenChanged : 2/19/2021 10:15:24 PM WhenChanged : 2/19/2021 10:15:24 PM
``` ```
在这种情况下,**您的域**正在**信任**来自**不同域**的主体的一些**权限**。 在这种情况下,**您的域**正在向来自**不同域**的主体**信任**一些**权限**。
然而,当一个**域被信任**时,受信任的域**创建一个用户**,其**名称是可预测的**,并使用**受信任的密码**作为**密码**。这意味着可以**访问来自信任域的用户以进入受信任域**,以枚举它并尝试提升更多权限: 然而,当一个**域被信任**时,受信任的域**创建一个用户**,其**名称是可预测的**,并使用**受信任的密码**作为**密码**。这意味着可以**访问来自信任域的用户以进入受信任域**,以枚举它并尝试提升更多权限:
{{#ref}} {{#ref}}
external-forest-domain-one-way-outbound.md external-forest-domain-one-way-outbound.md
@ -683,7 +683,7 @@ external-forest-domain-one-way-outbound.md
另一种妥协受信任域的方法是找到一个在**域信任的相反方向**创建的[**SQL受信任链接**](abusing-ad-mssql.md#mssql-trusted-links)(这并不常见)。 另一种妥协受信任域的方法是找到一个在**域信任的相反方向**创建的[**SQL受信任链接**](abusing-ad-mssql.md#mssql-trusted-links)(这并不常见)。
另一种妥协受信任域的方法是等待在一台**受信任域用户可以访问**的机器上,通过**RDP**登录。然后攻击者可以在RDP会话进程中注入代码并从那里**访问受害者的源域**。\ 另一种妥协受信任域的方法是在一台**受信任域用户可以访问**的机器上等待,通过**RDP**登录。然后攻击者可以在RDP会话进程中注入代码并从那里**访问受害者的源域**。\
此外,如果**受害者挂载了他的硬盘**,攻击者可以在**RDP会话**进程中将**后门**存储在**硬盘的启动文件夹**中。这种技术称为**RDPInception**。 此外,如果**受害者挂载了他的硬盘**,攻击者可以在**RDP会话**进程中将**后门**存储在**硬盘的启动文件夹**中。这种技术称为**RDPInception**。
{{#ref}} {{#ref}}
@ -694,12 +694,12 @@ rdp-sessions-abuse.md
### **SID过滤** ### **SID过滤**
- 通过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) [**有关域信任的更多信息请访问ired.team。**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
@ -717,19 +717,19 @@ 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)` - **临时权限限制**对于需要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)。 - 有关部署欺骗技术的更多信息,请访问[Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception)。
### **识别欺骗** ### **识别欺骗**
- **对于用户对象**可疑指标包括不寻常的ObjectSID、稀少的登录、创建日期和低错误密码计数。 - **对于用户对象**可疑指标包括不寻常的ObjectSID、频率低的登录、创建日期和低错误密码计数。
- **一般指标**:比较潜在诱饵对象的属性与真实对象的属性可以揭示不一致性。像[HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)这样的工具可以帮助识别这种欺骗。 - **一般指标**:比较潜在诱饵对象的属性与真实对象的属性可以揭示不一致性。工具如[HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster)可以帮助识别此类欺骗。
### **绕过检测系统** ### **绕过检测系统**

View File

@ -10,18 +10,18 @@ Windows 托管服务账户MSA是专门设计用于运行服务的特殊主
1. **gMSA** 组托管服务账户 可以在其 `msDS-GroupMSAMembership` 属性中授权的多个主机上使用。 1. **gMSA** 组托管服务账户 可以在其 `msDS-GroupMSAMembership` 属性中授权的多个主机上使用。
2. **dMSA** 委派托管服务账户 gMSA 的(预览)继任者,依赖于相同的加密技术,但允许更细粒度的委派场景。 2. **dMSA** 委派托管服务账户 gMSA 的(预览)继任者,依赖于相同的加密技术,但允许更细粒度的委派场景。
对于这两种变体,**密码不会存储**在每个域控制器DC就像常规的 NT-hash 一样。相反,每个 DC 可以 **动态推导** 当前密码,基于: 对于这两种变体,**密码不会存储**在每个域控制器DC就像常规的 NT 哈希一样。相反,每个 DC 可以**动态推导**当前密码,基于:
* 林范围的 **KDS 根密钥** (`KRBTGT\KDS`) 随机生成的 GUID 命名的秘密,复制到每个 DC 下的 `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` 容器中。 * 林范围的 **KDS 根密钥** (`KRBTGT\KDS`) 随机生成的 GUID 命名的秘密,复制到每个 DC 下的 `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` 容器中。
* 目标账户的 **SID** * 目标账户的 **SID**
* 在 `msDS-ManagedPasswordId` 属性中找到的每个账户的 **ManagedPasswordID**GUID * 在 `msDS-ManagedPasswordId` 属性中找到的每个账户的 **ManagedPasswordID**GUID
推导公式为:`AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 字节的 blob 最终 **base64 编码** 并存储在 `msDS-ManagedPassword` 属性中。 推导公式为:`AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 字节的 blob 最终**进行 base64 编码**并存储在 `msDS-ManagedPassword` 属性中。
在正常密码使用期间,无需 Kerberos 流量或域交互 只要成员主机知道这三个输入,就可以在本地推导密码。 在正常密码使用期间,无需 Kerberos 流量或域交互 只要成员主机知道这三个输入,就可以在本地推导密码。
## Golden gMSA / Golden dMSA 攻击 ## Golden gMSA / Golden dMSA 攻击
如果攻击者能够 **离线** 获取所有三个输入,他们可以计算出 **林中任何 gMSA/dMSA 的有效当前和未来密码**,而无需再次接触 DC从而绕过 如果攻击者能够**离线**获取所有三个输入,他们可以计算出**任何 gMSA/dMSA 的有效当前和未来密码**,而无需再次接触 DC从而绕过
* Kerberos 预身份验证 / 票证请求日志 * Kerberos 预身份验证 / 票证请求日志
* LDAP 读取审计 * LDAP 读取审计
@ -50,7 +50,7 @@ mimikatz # lsadump::trust /patch # shows KDS root keys too
### 第 2 阶段 枚举 gMSA/dMSA 对象 ### 第 2 阶段 枚举 gMSA/dMSA 对象
至少检索 `sAMAccountName``objectSid``msDS-ManagedPasswordId` 检索至少 `sAMAccountName``objectSid``msDS-ManagedPasswordId`
```powershell ```powershell
# Authenticated or anonymous depending on ACLs # Authenticated or anonymous depending on ACLs
Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \ Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \