
شوكة من TokenTactics العظيم مع دعم لـ CAE ونقطة نهاية الرمز v2
______ __ __ __ _ ___
/_ __/___ / /_____ ____ / /_____ ______/ /_(_)_________ _ __ |__ \
/ / / __ \/ //_/ _ \/ __ \ / __/ __ `/ ___/ __/ / ___/ ___/ | | / / __/ /
/ / / /_/ / ,< / __/ / / / / /_/ /_/ / /__/ /_/ / /__(__ ) | |/ / / __/
/_/ \____/_/|_|\___/_/ /_/ \__/\__,_/\___/\__/_/\___/____/ |___(_)____/
هذه نسخة محدثة من TokenTactics التي كتبها في الأصل Stephan Borosh @rvrsh3ll و Bobby Cooke @0xBoku.
تسمح لك رموز الوصول الخاصة بـ Azure بالمصادقة على نقاط نهاية معينة كمستخدم يسجل الدخول باستخدام رمز جهاز. إذا كنت تمتلك رمز تحديث قادر على FOCI (عائلة معرفات العميل) يمكنك استخدامه للحصول على رموز وصول لجميع نقاط النهاية المعروفة والقادرة على FOCI. نظرًا لأن رمز التحديث يحتوي أيضًا على معلومات حول ما إذا كان المستخدم قد قام بالمصادقة متعددة العوامل، فيمكنك الاستفادة من ذلك. بمجرد حصولك على رمز وصول للمستخدم، قد تتمكن من الوصول إلى تطبيقات معينة مثل Outlook وSharePoint وOneDrive وMSTeams وغيرها.
على سبيل المثال، إذا كان لديك رمز تحديث Graph أو MSGraph، فيمكنك الاتصال بـ Azure وتفريغ المستخدمين والمجموعات وما إلى ذلك. يمكنك بعد ذلك، حسب سياسات الوصول المشروط، التبديل إلى رمز Azure Core Management وتشغيل AzureHound. ثم الحصول على رمز وصول Outlook وقراءة/إرسال رسائل البريد الإلكتروني أو MS Teams وقراءة/إرسال رسائل Teams!
لمزيد من المعلومات حول أنواع رموز Azure، راجع رموز الوصول لمنصة هوية Microsoft
توجد بعض الأمثلة على الطلبات إلى نقاط النهاية في مجلد الموارد. يوجد أيضًا قالب تصيد مثالي لتصيد رمز الجهاز.
يمكنك أيضًا استخدام هذه الرموز مع 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. للوصول إلى رمز الوصول، استخدم $response.access_token من نافذة PowerShell لعرض الرمز. يمكنك أيضًا عرض رمز التحديث باستخدام $response.refresh_token. تلميح: ستحتاج إلى رمز التحديث للاستمرار في تحديث الرموز الجديدة!
Get-EntraIDToken -Client DODMSGraph
[!IMPORTANT] تم تقديم هذه الميزة في الإصدار 0.2.20 وتتطلب PowerShell 7.0
إذا قمت بإنشاء مفتاح مرور في موفر تابع لجهة خارجية مثل KeePassXC أو Bitwarden أو 1Password أو ما شابه ذلك، يمكنك تصدير مادة المفتاح الخاص.
[!CAUTION] تصدير مادة المفتاح الخاص الخاص بك خطير للغاية. تأكد من فهمك للمخاطر قبل المتابعة.
تنسيق ملف مفتاح المرور KeePassXC مدعوم أصليًا ويمكنك توجيه cmdlet إلى الملف مباشرة. سيحصل إجراء تسجيل الدخول الأولي فقط على ملف تعريف الارتباط ESTSAUTH المطلوب ويجب عليك استخدام 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
إذا حصلت على ملف تعريف ارتباط sccauth من جلسة مصادقة إلى security.microsoft.com (على سبيل المثال، عبر Evilginx أو أدوات المطورين في المتصفح)، فيمكنك استخدامه لاسترداد رموز الوصول Entra ID لمجموعة واسعة من الموارد من خلال بوابة Microsoft Defender XDR.
# 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 التي تسمح، لبعض الموارد، بتجاوز متطلبات الامتثال للجهاز.
تم نشر هذه المعلومات أولاً بواسطة @dirkjan ثم تم إصدارها في Black Hat Europe لجمهور أوسع بواسطة @TEMP43487580
نشرت JumpsecLabs مقالة مدونة و إثبات مفهوم بعد ذلك بوقت قصير.
الآن نفس الإمكانيات متاحة في 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 ساعة. يمكن لخدمات معينة قادرة على CAE مثل MSGraph وExchange وTeams وSharePoint حظر رموز الوصول بناءً على أحداث معينة يتم تشغيلها بواسطة 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 بشكل كبير بالبحث الرائع للدكتور Nestori Syynimaa على https://o365blog.com/.
Get-EntraIDTokenFromSCCAUTHCookie لاسترداد رموز الوصول Entra ID لموارد مختلفة (Azure، MicrosoftGraph، MATP، MCAS، Purview، إلخ) باستخدام ملف تعريف ارتباط sccauth من security.microsoft.com. يقبل اختياريًا رمز XSRF؛ إذا تم حذفه، يقوم بالتمهيد تلقائيًا. يدعم معلمة اختيارية TenantId لحقن الرأس وبناء مورد PurviewACC.Get-Azure إلى Get-EntraIDInvoke-EntraIDPasskeyLogin لأتمتة تدفقات تسجيل الدخول بمفتاح المرور. سيحفظ ملف تعريف الارتباط ESTSAUTH وجلسة الويب كمتغيرات عامة لإعادة الاستخدام في cmdlets أخرى مثل Get-EntraIDTokenFromESTSCookieInvoke-EntraIDPasskeyLogin و Get-EntraIDTokenFromCookie و Get-EntraIDTokenFromRefreshTokenCredentialCookie و Get-EntraIDTokenFromESTSCookie-Username لملء معلمة login_hint مسبقًا في cmdlet Get-AzureAuthorizationCode-CopyToClipboard في cmdlet Get-AzureAuthorizationCodeForeach-Object -parallel)-CustomUserAgent. شكرًا لـ Pri3stResourceTenant لـ Get-EntraIDToken لدعم تصيد رمز جهاز B2BUseCodeVerifier لدعم إثبات المفتاح لتبادل الكود (PKCE)UseV1Endpoint لبعض الوظائف لدعم مجموعة أوسع من اختبارات نقطة النهايةGet-AzureTokenFromRefreshTokenCredentialCookie ("x-ms-RefreshTokenCredential") وإضافة Get-AzureTokenFromCookie modularizedGet-AzureTokenFromESTSCookieGet-AzureTokenFromAuthorizationCode إلى إخراج Get-AzureAuthorizationCodeGet-AzureTokenFromESTSCookie لدعم نقطة النهاية appverifyGet-AzureTokenFromESTSCookieGet-AzureAuthorizationCode و Get-AzureTokenFromAuthorizationCodeGet-AzureAuthorizationCodeGet-AzureAuthorizationCode و Get-AzureTokenFromAuthorizationCode Invoke-RefreshToDeviceRegistrationToken وهو إصدار TokenTactics من cmdlet AADInternals Get-AccessTokenForAADJoinInvoke-RefreshToToken مع UseV1Endpoint. كان هذا مطلوبًا لإضافة Invoke-RefreshToDeviceRegistrationTokenConvertFrom-JWTtokenGet-ForgedUserAgentv2.0 من نقطة نهاية OAuth2 الخاصة بـ Azure AD-UseCAEClientId معلمةclient_id لـ MSTeamsIssuedAt و NotBefore و ExpirationDate و ValidForHours في إخراج ConvertFrom-JWTtoken بتنسيق قابل للقراءة البشرية