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)
En la sección del Estado SSO, deberías ver el AzureAdPrt
configurado en SÍ.
En la misma salida también puedes ver si el dispositivo está unido a Azure (en el campo AzureAdJoined
):
La cookie PRT se llama en realidad x-ms-RefreshTokenCredential
y es un JSON Web Token (JWT). Un JWT contiene 3 partes, el encabezado, carga útil y firma, divididas por un .
y todas codificadas en base64 seguras para URL. Una cookie PRT típica contiene el siguiente encabezado y cuerpo:
El Primary Refresh Token (PRT) actual está encapsulado dentro del refresh_token
, que está encriptado por una clave bajo el control de Azure AD, lo que hace que su contenido sea opaco e indecriptable para nosotros. El campo is_primary
significa la encapsulación del token de actualización principal dentro de este token. Para asegurar que la cookie permanezca vinculada a la sesión de inicio de sesión específica para la que fue destinada, el request_nonce
se transmite desde la página logon.microsoftonline.com
.
El proceso LSASS enviará al TPM el KDF context, y el TPM usará la session key (recolectada cuando el dispositivo fue registrado en AzureAD y almacenada en el TPM) y el contexto anterior para derivar una clave, y esta clave derivada se usa para firmar la cookie PRT (JWT).
El KDF context es un nonce de AzureAD y el PRT creando un JWT mezclado con un contexto (bytes aleatorios).
Por lo tanto, incluso si el PRT no puede ser extraído porque está ubicado dentro del TPM, es posible abusar de LSASS para solicitar claves derivadas de nuevos contextos y usar las claves generadas para firmar Cookies.
Como usuario regular es posible solicitar el uso de PRT pidiendo a LSASS datos de SSO. Esto se puede hacer como aplicaciones nativas que solicitan tokens del Web Account Manager (intermediario de tokens). WAM pasa la solicitud a LSASS, que pide tokens usando una afirmación de PRT firmada. O se puede hacer con flujos basados en navegador (web) donde se usa una cookie PRT como encabezado para autenticar solicitudes a las páginas de inicio de sesión de Azure AS.
Como SYSTEM podrías robar el PRT si no está protegido por TPM o interactuar con las claves PRT en LSASS usando APIs criptográficas.
Para más información sobre esta forma consulta esta publicación. ROADtoken ejecutará BrowserCore.exe
desde el directorio correcto y lo usará para obtener una cookie PRT. Esta cookie puede ser utilizada con ROADtools para autenticar y obtener un token de actualización persistente.
Para generar una cookie PRT válida, lo primero que necesitas es un nonce. Puedes obtener esto con:
O usando roadrecon:
Luego puedes usar roadtoken para obtener un nuevo PRT (ejecuta la herramienta desde un proceso del usuario a atacar):
Como una sola línea:
Luego puedes usar la cookie generada para generar tokens para iniciar sesión usando Azure AD Graph o Microsoft Graph:
Get-AADIntUserPRTToken
obtiene el token PRT del usuario de la computadora unida a Azure AD o unida de forma híbrida. Utiliza BrowserCore.exe
para obtener el token PRT.
O si tienes los valores de Mimikatz, también puedes usar AADInternals para generar un token:
Ve a https://login.microsoftonline.com, borra todas las cookies para login.microsoftonline.com e ingresa una nueva cookie.
Luego ve a https://portal.azure.com
El resto debería ser los valores predeterminados. Asegúrate de poder actualizar la página y que la cookie no desaparezca; si lo hace, es posible que hayas cometido un error y debas repetir el proceso. Si no, deberías estar bien.
El PRT (Token de Actualización Primario) se extrae de LSASS (Servicio de Subsistema de Autoridad de Seguridad Local) y se almacena para su uso posterior.
La Clave de Sesión se extrae a continuación. Dado que esta clave se emite inicialmente y luego se vuelve a cifrar por el dispositivo local, requiere descifrado utilizando una clave maestra de DPAPI. Se puede encontrar información detallada sobre DPAPI (Interfaz de Programación de Aplicaciones de Protección de Datos) en estos recursos: HackTricks y para entender su aplicación, consulta Ataque Pass-the-cookie.
Después del descifrado de la Clave de Sesión, se obtienen la clave derivada y el contexto para el PRT. Estos son cruciales para la creación de la cookie PRT. Específicamente, la clave derivada se utiliza para firmar el JWT (Token Web JSON) que constituye la cookie. Una explicación completa de este proceso ha sido proporcionada por Dirk-jan, accesible aquí.
Ten en cuenta que si el PRT está dentro del TPM y no dentro de lsass
, mimikatz no podrá extraerlo.
Sin embargo, será posible obtener una clave de una clave derivada de un contexto del TPM y usarla para firmar una cookie (ver opción 3).
Puedes encontrar una explicación detallada del proceso realizado para extraer estos detalles aquí: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/
Esto no funcionará exactamente después de las correcciones de agosto de 2021 para obtener los tokens PRT de otros usuarios, ya que solo el usuario puede obtener su PRT (un administrador local no puede acceder a los PRT de otros usuarios), pero puede acceder al suyo.
Puedes usar mimikatz para extraer el PRT:
(Images from https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)
Copia la parte etiquetada como Prt y guárdala.
Extrae también la clave de sesión (el KeyValue
del campo ProofOfPossesionKey
) que puedes ver resaltada a continuación. Esto está cifrado y necesitaremos usar nuestras claves maestras de DPAPI para descifrarlo.
Si no ves ningún dato de PRT, podría ser que no tengas ningún PRT porque tu dispositivo no está unido a Azure AD o podría ser que estás ejecutando una versión antigua de Windows 10.
Para descifrar la clave de sesión, necesitas elevar tus privilegios a SYSTEM para ejecutar bajo el contexto de la computadora y poder usar la clave maestra de DPAPI para descifrarla. Puedes usar los siguientes comandos para hacerlo:
Ahora quieres copiar tanto el valor de Contexto:
Como el valor de la clave derivada:
Finalmente, puedes usar toda esta información para generar cookies PRT:
Ve a https://login.microsoftonline.com, borra todas las cookies para login.microsoftonline.com e ingresa una nueva cookie.
Luego ve a https://portal.azure.com
El resto debería ser los valores predeterminados. Asegúrate de poder actualizar la página y que la cookie no desaparezca; si lo hace, es posible que hayas cometido un error y debas repetir el proceso. Si no lo hace, deberías estar bien.
Renueva el PRT primero, lo que lo guardará en roadtx.prt
:
Ahora podemos solicitar tokens utilizando el navegador interactivo con roadtx browserprtauth
. Si usamos el comando roadtx describe
, vemos que el token de acceso incluye un reclamo de MFA porque el PRT que utilicé en este caso también tenía un reclamo de MFA.
Teniendo el contexto y la clave derivada volcada por mimikatz, es posible usar roadrecon para generar una nueva cookie firmada con:
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)