Az - Pass the PRT
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
У розділі SSO State ви повинні бачити AzureAdPrt
, встановлений на YES.
У тому ж виході ви також можете побачити, чи пристрій приєднано до Azure (в полі AzureAdJoined
):
PRT cookie насправді називається x-ms-RefreshTokenCredential
і це JSON Web Token (JWT). JWT містить 3 частини, заголовок, корисне навантаження та підпис, розділені .
і всі кодуються в base64, безпечному для URL. Типовий PRT cookie містить наступний заголовок і тіло:
Актуальний Primary Refresh Token (PRT) інкапсульований у refresh_token
, який зашифрований ключем під контролем Azure AD, що робить його вміст непрозорим і нездешевним для нас. Поле is_primary
позначає інкапсуляцію основного токена оновлення в цьому токені. Щоб забезпечити прив'язку куки до конкретної сесії входу, request_nonce
передається зі сторінки logon.microsoftonline.com
.
Процес LSASS надішле до TPM KDF context, а TPM використає session key (зібраний під час реєстрації пристрою в AzureAD і збережений у TPM) та попередній контекст для виведення ключа, і цей виведений ключ використовується для підписання куки PRT (JWT).
KDF context - це nonce з AzureAD та PRT, що створює JWT, змішаний з контекстом (випадкові байти).
Отже, навіть якщо PRT не можна витягти, оскільки він знаходиться всередині TPM, можливо зловживати LSASS для запиту виведених ключів з нових контекстів і використовувати згенеровані ключі для підписання куків.
Як звичайний користувач, можливо запитати використання PRT, звернувшись до LSASS за даними SSO. Це можна зробити як нативні додатки, які запитують токени у Web Account Manager (брокер токенів). WAM передає запит до LSASS, який запитує токени, використовуючи підписане твердження PRT. Або це можна зробити за допомогою браузерних (веб) потоків, де PRT cookie використовується як заголовок для автентифікації запитів до сторінок входу Azure AS.
Як SYSTEM ви могли б викрасти PRT, якщо він не захищений TPM або взаємодіяти з ключами PRT у LSASS, використовуючи крипто API.
Для отримання додаткової інформації про цей спосіб перевірте цей пост. ROADtoken запустить BrowserCore.exe
з правильного каталогу та використає його для отримання куки PRT. Цю куки потім можна використовувати з ROADtools для автентифікації та отримання постійного токена оновлення.
Щоб згенерувати дійсну куки PRT, перше, що вам потрібно, це nonce. Ви можете отримати це за допомогою:
Або використовуючи roadrecon:
Тоді ви можете використовувати roadtoken, щоб отримати новий PRT (запустіть інструмент з процесу користувача для атаки):
Як однорядковий:
Тоді ви можете використовувати згенерований cookie для генерації токенів для входу за допомогою Azure AD Graph або Microsoft Graph:
Get-AADIntUserPRTToken
отримує PRT токен користувача з комп'ютера, приєднаного до Azure AD або гібридного приєднання. Використовує BrowserCore.exe
для отримання PRT токена.
Або, якщо у вас є значення з Mimikatz, ви також можете використовувати AADInternals для генерації токена:
Перейдіть за посиланням https://login.microsoftonline.com, очистіть всі куки для login.microsoftonline.com та введіть новий куки.
Тоді перейдіть на https://portal.azure.com
Решта повинна бути за замовчуванням. Переконайтеся, що ви можете оновити сторінку, і кукі не зникне, якщо це станеться, ви могли зробити помилку і вам доведеться пройти процес знову. Якщо ні, то все має бути в порядку.
PRT (Основний токен оновлення) витягується з LSASS (Служба підсистеми локальної безпеки) і зберігається для подальшого використання.
Наступним витягується ключ сесії. Оскільки цей ключ спочатку видається, а потім повторно шифрується локальним пристроєм, це вимагає розшифровки за допомогою майстер-ключа DPAPI. Докладну інформацію про DPAPI (API захисту даних) можна знайти в цих ресурсах: HackTricks, а для розуміння його застосування зверніться до атаки Pass-the-cookie.
Після розшифровки ключа сесії, отримуються похідний ключ і контекст для PRT. Вони є критично важливими для створення кукі PRT. Зокрема, похідний ключ використовується для підписання JWT (JSON Web Token), що складає кукі. Докладне пояснення цього процесу надано Дірком-Яном, доступне тут.
Зверніть увагу, що якщо PRT знаходиться всередині TPM, а не всередині lsass
, mimikatz не зможе його витягти.
Однак, буде можливим отримати ключ з похідного ключа з контексту з TPM і використовувати його для підписання кукі (перевірте опцію 3).
Ви можете знайти детальне пояснення виконаного процесу для витягнення цих деталей тут: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/
Це не буде точно працювати після виправлень серпня 2021 року для отримання PRT токенів інших користувачів, оскільки тільки користувач може отримати свій PRT (локальний адміністратор не може отримати PRT інших користувачів), але може отримати свій.
Ви можете використовувати mimikatz для витягнення PRT:
(Images from https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)
Скопіюйте частину, позначену Prt, і збережіть її.
Також витягніть ключ сесії (значення KeyValue
поля ProofOfPossesionKey
), яке ви можете побачити, виділене нижче. Це зашифровано, і нам потрібно буде використати наші майстер-ключі DPAPI для його розшифровки.
Якщо ви не бачите жодних даних PRT, це може бути тому, що у вас немає жодних PRT, оскільки ваш пристрій не приєднаний до Azure AD, або ви використовуєте стару версію Windows 10.
Щоб розшифрувати ключ сесії, вам потрібно підвищити свої привілеї до SYSTEM, щоб працювати в контексті комп'ютера і мати можливість використовувати майстер-ключ DPAPI для його розшифровки. Ви можете використовувати такі команди для цього:
Тепер ви хочете скопіювати обидва значення Context:
І значення похідного ключа:
Нарешті, ви можете використати всю цю інформацію для генерації PRT cookies:
Перейдіть на https://login.microsoftonline.com, очистіть всі куки для login.microsoftonline.com і введіть новий куки.
Потім перейдіть на https://portal.azure.com
Решта повинна бути за замовчуванням. Переконайтеся, що ви можете оновити сторінку, і кукі не зникне, якщо це станеться, ви могли зробити помилку і вам потрібно буде пройти процес знову. Якщо ні, то все має бути добре.
Спочатку оновіть PRT, що зберегти його в roadtx.prt
:
Тепер ми можемо запитувати токени за допомогою інтерактивного браузера з roadtx browserprtauth
. Якщо ми використаємо команду roadtx describe
, ми побачимо, що токен доступу містить вимогу MFA, оскільки PRT, який я використав у цьому випадку, також мав вимогу MFA.
Маючи контекст і похідний ключ, вивантажений за допомогою mimikatz, можна використовувати roadrecon для генерації нового підписаного cookie з:
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)