
महान TokenTactics का एक fork जिसमें CAE और token endpoint v2 के लिए समर्थन है
______ __ __ __ _ ___
/_ __/___ / /_____ ____ / /_____ ______/ /_(_)_________ _ __ |__ \
/ / / __ \/ //_/ _ \/ __ \ / __/ __ `/ ___/ __/ / ___/ ___/ | | / / __/ /
/ / / /_/ / ,< / __/ / / / / /_/ /_/ / /__/ /_/ / /__(__ ) | |/ / / __/
/_/ \____/_/|_|\___/_/ /_/ \__/\__,_/\___/\__/_/\___/____/ |___(_)____/
यह TokenTactics का अद्यतन संस्करण है, जिसे मूल रूप से Stephan Borosh @rvrsh3ll और Bobby Cooke @0xBoku द्वारा लिखा गया था।
Azure एक्सेस टोकन आपको डिवाइस कोड से साइन इन करने वाले उपयोगकर्ता के रूप में कुछ एंडपॉइंट्स पर प्रमाणित करने की अनुमति देते हैं। यदि आपके पास FOCI (Family of Client IDs) समर्थित रिफ्रेश टोकन है, तो आप इसका उपयोग सभी ज्ञात FOCI समर्थित एंडपॉइंट्स के लिए एक्सेस टोकन प्राप्त करने के लिए कर सकते हैं। चूँकि रिफ्रेश टोकन में यह जानकारी भी होती है कि उपयोगकर्ता ने बहु-कारक प्रमाणीकरण किया है या नहीं, आप इसका उपयोग कर सकते हैं। एक बार आपके पास उपयोगकर्ता का एक्सेस टोकन आ जाने पर, Outlook, SharePoint, OneDrive, MSTeams और अन्य जैसे कुछ ऐप्स तक पहुँच संभव हो सकती है।
उदाहरण के लिए, यदि आपके पास Graph या MSGraph रिफ्रेश टोकन है, तो आप Azure से कनेक्ट होकर उपयोगकर्ताओं, समूहों आदि को डंप कर सकते हैं। फिर, सशर्त पहुँच नीतियों के आधार पर, आप Azure Core Management टोकन पर स्विच कर सकते हैं और AzureHound चला सकते हैं। उसके बाद, Outlook एक्सेस टोकन प्राप्त करके ईमेल पढ़/भेज सकते हैं या MS Teams टोकन प्राप्त करके टीम संदेश पढ़/भेज सकते हैं!
Azure टोकन प्रकारों के बारे में अधिक जानकारी के लिए Microsoft identity platform access tokens देखें।
resources फ़ोल्डर में एंडपॉइंट्स के लिए कुछ उदाहरण अनुरोध दिए गए हैं। साथ ही, डिवाइस कोड फ़िशिंग के लिए एक उदाहरण फ़िशिंग टेम्पलेट भी है।
आप इन टोकन का उपयोग AAD Internals के साथ भी कर सकते हैं। हम दृढ़ता से अनुशंसा करते हैं कि आप इस अद्भुत टूल को देखें।
Import-Module .\TokenTactics.psd1
Get-Help Get-EntraIDToken
Invoke-RefreshToSubstrateToken -Domain "myclient.org"
परीक्षण सूट के लिए PowerShell 7 और Pester 5.7.1 की आवश्यकता होती है। यह मॉक की गई HTTP प्रतिक्रियाओं का उपयोग करता है और इसके लिए Entra ID क्रेडेंशियल या नेटवर्क एक्सेस की आवश्यकता नहीं होती है।
Install-Module Pester -RequiredVersion 5.7.1 -Scope CurrentUser
pwsh ./tests/Invoke-Tests.ps1
यही सूट हर पुल रिक्वेस्ट के लिए Linux, macOS और Windows पर चलता है।
Get-EntraIDToken -Client MSGraph
उपयोगकर्ता के लॉग इन करने के बाद, आपको JWT प्रस्तुत किया जाएगा और यह $response वेरिएबल में सहेजा जाएगा। एक्सेस टोकन प्रदर्शित करने के लिए अपनी PowerShell विंडो में $response.access_token का उपयोग करें। आप रिफ्रेश टोकन को $response.refresh_token के साथ भी प्रदर्शित कर सकते हैं। संकेत: आप नए टोकन प्राप्त करते रहने के लिए रिफ्रेश टोकन चाहेंगे!
Get-EntraIDToken -Client DODMSGraph
[!IMPORTANT] यह सुविधा v0.2.20 में पेश की गई थी और इसके लिए PowerShell 7.0 की आवश्यकता थी।
यदि आपने KeePassXC, Bitwarden, 1Password या इसी तरह के किसी तृतीय-पक्ष प्रदाता में पासकी बनाई है, तो आप निजी कुंजी सामग्री निर्यात कर सकते हैं।
[!CAUTION] अपनी निजी कुंजी सामग्री निर्यात करना अत्यंत खतरनाक है। आगे बढ़ने से पहले सुनिश्चित करें कि आप जोखिम समझते हैं।
KeePassXC पासकी फ़ाइल प्रारूप मूल रूप से समर्थित है और आप cmdlet को सीधे फ़ाइल की ओर इंगित कर सकते हैं। प्रारंभिक साइन-इन प्रक्रिया केवल आवश्यक ESTSAUTH कुकी प्राप्त करेगी और इस कुकी को बियरर टोकन (access token, refresh token, और id token) में बदलने के लिए आपको Get-EntraIDTokenFromESTSCookie का उपयोग करना होगा।
# Retrieve the ESTSAUTH cookie value
Invoke-EntraIDPasskeyLogin -Verbose -KeyFilePath "C:\Users\Fabian\Microsoft.passkey"
# Exchange the ESTSAUTH cookie for bearer tokens
Get-EntraIDTokenFromESTSCookie -CookieValue $Global:ESTSAUTH
यदि आपके पास असमर्थित फ़ाइल प्रारूप है, तो आप आवश्यक मान मैन्युअल रूप से निर्दिष्ट करके समान लक्ष्य प्राप्त कर सकते हैं।
Invoke-EntraIDPasskeyLogin -Verbose -UserPrincipalName "[email protected]" -UserHandle "XYZ" -CredentialId "9e9c8297-0cde-4726-8852-16c141e15bd3" -PrivateKey $PrivateKey
Get-EntraIDTokenFromESTSCookie -CookieValue $Global:ESTSAUTH
यदि आपने security.microsoft.com पर एक प्रमाणित सत्र से sccauth कुकी प्राप्त की है (जैसे Evilginx या ब्राउज़र DevTools के माध्यम से), तो आप Microsoft Defender XDR पोर्टल के माध्यम से संसाधनों के व्यापक सेट के लिए Entra ID एक्सेस टोकन प्राप्त करने हेतु इसका उपयोग कर सकते हैं।
# Retrieve a Microsoft Graph token using the sccauth cookie
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -ResourceName MicrosoftGraph
# Provide an XSRF token explicitly to skip the bootstrapping request
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -XSRF "your_xsrf_value" -ResourceName Azure
# Use a custom resource URL
Get-EntraIDTokenFromSCCAUTHCookie -SCCAuth "your_sccauth_value" -Resource "https://management.core.windows.net/"
समर्थित -ResourceName मान: Azure, LogAnalytics, MATP, MCAS, MicrosoftGraph, MicrosoftOffice, Purview, PurviewACC, ThreatIntelligencePortal।
Get-EntraIDTokenFromESTSCookie -ESTSAuthCookie "0.AbcApTk..."
यह मॉड्यूल ESTSAuth (या ESTSAuthPersistent) कुकी का उपयोग करके एक्सेस टोकन और रिफ्रेश टोकन प्राप्त करने के लिए ऑथराइज़ेशन कोड फ्लो का उपयोग करता है। यह उपयोगी है यदि आपने Evilginx के माध्यम से किसी सत्र को फ़िश किया है या अन्यथा यह कुकी प्राप्त की है।
सही कुकी का उपयोग करना सुनिश्चित करें! ESTSAuthPersistent केवल तभी उपयोगी है जब CA नीति वास्तव में एक स्थायी सत्र प्रदान करती है। अन्यथा, आपको ESTSAuth का उपयोग करना चाहिए। आप आमतौर पर लंबाई के आधार पर बता सकते हैं कि किसका उपयोग करना है, लंबी कुकी वही है जिसका आप उपयोग करना चाहते हैं :)
नोट: यह सभी मामलों में काम नहीं कर सकता क्योंकि इसमें उपयोगकर्ता की सहभागिता की आवश्यकता हो सकती है। यदि ऐसा है, तो ऊपर दिए गए डिवाइस कोड फ्लो का उपयोग करें, या roadtx interactiveauth --estscookie आज़माएं।
यह सुविधा मूल रिपॉजिटरी में rotarydrone द्वारा पुल रिक्वेस्ट से बैकपोर्ट की गई थी।
इस oauth2 फ्लो के सबसे प्रमुख उदाहरणों में से एक (कम से कम 2025 की शुरुआत में) Intune Company Portal है, जो कुछ संसाधनों के लिए डिवाइस अनुपालन आवश्यकताओं को बायपास करने की अनुमति देता है।
यह इंटेल पहले @dirkjan द्वारा प्रकाशित किया गया था और फिर @TEMP43487580 द्वारा Black Hat Europe में व्यापक दर्शकों के लिए जारी किया गया।
JumpsecLabs ने कुछ ही समय बाद एक ब्लॉग लेख और TokenSmith के रूप में एक POC प्रकाशित किया।
अब यही क्षमताएँ TokenTacticsV2 में उपलब्ध हैं।
Get-AzureAuthorizationCode एक URL बनाएगा जिसका उपयोग आप प्रमाणीकरण के लिए कर सकते हैं।
Get-EntraIDTokenFromAuthorizationCode या तो पूर्ण URL का उपयोग करता है या AuthorizationCode और RedirectUrl पैरामीटर के साथ उपयोग किया जा सकता है, ताकि ऑथ कोड को एक्सेस और रिफ्रेश टोकन में बदला जा सके। उसके बाद आप हमेशा की तरह अन्य संसाधनों तक पहुँच प्राप्त करने का प्रयास कर सकते हैं।

यदि आप रिफ्रेश टोकन निर्दिष्ट नहीं करते हैं, तो cmdlets डिफ़ॉल्ट रूप से $response.refresh_token का उपयोग करेंगे।
Invoke-RefreshToOutlookToken -domain "myclient.org"
$OutlookToken.access_token
Connect-AzureAD -AadAccessToken $response.access_token -AccountId [email protected]
Invoke-RefreshToMSGraphToken -Domain "myclient.org"
Connect-MgGraph -AccessToken $MSGraphToken.access_token -Scopes "User.Read.All","Group.ReadWrite.All"
यह किसी भी टोकन वेरिएबल को हटा देगा।
Clear-Token -Token All
निरंतर एक्सेस मूल्यांकन के साथ Microsoft अतिरिक्त सुरक्षा उपाय लागू करता है, लेकिन एक्सेस टोकन के अधिकतम जीवनकाल को 24 घंटे तक भी बढ़ाता है। MSGraph, Exchange, Teams और SharePoint जैसी कुछ CAE-सक्षम सेवाएँ Azure AD द्वारा ट्रिगर की गई कुछ घटनाओं के आधार पर एक्सेस टोकन को ब्लॉक कर सकती हैं। वर्तमान में ये महत्वपूर्ण घटनाएँ हैं:
Invoke-RefreshToMSGraphToken -Domain "myclient.org" -UseCAE
if ((Parse-JWTtoken $MSGraphToken.access_token).ValidForHours -gt 23) { "MSGraph token is CAE capable" }
यदि आपके पास AADInternals भी इंस्टॉल है, तो आप बनाए गए एक्सेस टोकन का उपयोग कर सकते हैं।
Invoke-RefreshToMSTeamsToken -UseCAE -Domain "myclient.org"
Set-AADIntTeamsStatusMessage -Message "My cool status message" -AccessToken $MSTeamsToken.access_token -Verbose
Get-Command -Module TokenTactics
केवल समर्थित उपयोगकर्ता-उन्मुख कमांड निर्यात किए जाते हैं; पार्सिंग, PKCE, सामान्य रिफ्रेश और FIDO क्रिप्टोग्राफ़िक सहायक निजी कार्यान्वयन विवरण बने रहते हैं।
TokenTactics की विधियाँ https://o365blog.com/ पर Dr Nestori Syynimaa के उत्कृष्ट शोध से अत्यधिक प्रभावित हैं।
security.microsoft.com से sccauth कुकी का उपयोग करके विभिन्न संसाधनों (Azure, MicrosoftGraph, MATP, MCAS, Purview, आदि) के लिए Entra ID एक्सेस टोकन प्राप्त करने हेतु Get-EntraIDTokenFromSCCAUTHCookie जोड़ें। वैकल्पिक रूप से XSRF टोकन स्वीकार करता है; यदि छोड़ दिया जाए, तो स्वचालित रूप से बूटस्ट्रैप होता है। हेडर इंजेक्शन और PurviewACC संसाधन निर्माण के लिए एक वैकल्पिक TenantId पैरामीटर का समर्थन करता है।Get-Azure cmdlets का नाम बदलकर Get-EntraID कर दिया गयाInvoke-EntraIDPasskeyLogin जोड़ें। यह ESTSAUTH कुकी और वेबसेशन को Get-EntraIDTokenFromESTSCookie जैसे अन्य cmdlets में पुन: उपयोग के लिए वैश्विक वेरिएबल के रूप में सहेजेगा।Invoke-EntraIDPasskeyLogin, Get-EntraIDTokenFromCookie, Get-EntraIDTokenFromRefreshTokenCredentialCookie और Get-EntraIDTokenFromESTSCookie के लिए प्रॉक्सी समर्थन जोड़ेंGet-AzureAuthorizationCode में login_hint पैरामीटर को पहले से भरने के लिए -Username पैरामीटर जोड़ेंGet-AzureAuthorizationCode में -CopyToClipboard पैरामीटर जोड़ेंForeach-Object -parallel में चलाने पर)-CustomUserAgent संपत्ति का उपयोग करके किसी भी UserAgent को स्वतंत्र रूप से परिभाषित करने की क्षमता जोड़ें। Pri3st को धन्यवाद।Get-EntraIDToken हेतु ResourceTenant जोड़ेंUseCodeVerifier जोड़ेंUseV1Endpoint जोड़ेंGet-AzureTokenFromRefreshTokenCredentialCookie ("x-ms-RefreshTokenCredential") जोड़ें और मॉड्यूलराइज़्ड Get-AzureTokenFromCookie जोड़ेंGet-AzureTokenFromESTSCookie में कुकी प्रकार (ESTSAuth, ESTSAUTHPERSISTENT) चुनने के लिए पैरामीटर जोड़ेंGet-AzureAuthorizationCode आउटपुट में Get-AzureTokenFromAuthorizationCode के लिए नमूना आउटपुट जोड़ेंGet-AzureTokenFromESTSCookie का विस्तार करेंGet-AzureTokenFromESTSCookie की कुकी प्रबंधन में सुधार करेंGet-AzureAuthorizationCode और Get-AzureTokenFromAuthorizationCode में कस्टम स्कोप बग ठीक करेंGet-AzureAuthorizationCode के लिए डिफ़ॉल्ट रीडायरेक्ट Uri बदलेंGet-AzureAuthorizationCode और Get-AzureTokenFromAuthorizationCode जोड़े गए Invoke-RefreshToDeviceRegistrationToken जोड़ा गया, जो AADInternals cmdlet Get-AccessTokenForAADJoin का TokenTactics संस्करण है।UseV1Endpoint के साथ Invoke-RefreshToToken के लिए v1 एंडपॉइंट समर्थन जोड़ा गया। Invoke-RefreshToDeviceRegistrationToken जोड़ने के लिए यह आवश्यक था।ConvertFrom-JWTtoken के लिए पाइपलाइन समर्थन जोड़ा गयाGet-ForgedUserAgent में डिफ़ॉल्ट मान जोड़ेंv2.0 पर स्विच किया गया-UseCAE स्विच का उपयोग करके निरंतर एक्सेस मूल्यांकन के लिए समर्थनClientId को एक पैरामीटर बनाया गयाclient_id बदला गयाConvertFrom-JWTtoken आउटपुट में मानव-पठनीय प्रारूप में IssuedAt, NotBefore, ExpirationDate और ValidForHours जोड़े गए