El Arte del Cracking

Reverse Engineering y más

PRTGenerator: Aplicación escrita en FLASK para extraer el token PRT

19 Mar 2022 - David Cuadrado

PRT_PORTADA

Buenas a todos, en este post voy a enseñaros una herramienta desarrollada por mi que sirve para poder hacer ataques Pass The PRT y así conseguir acceder a un recurso en Azure que esté restringido sin necesidad de utilizar una máquina autorizada.

A modo resumen, PRT viene de las siglas, Primary Refresh Token y es un token que sirve para poder obtener un token de acceso a la aplicación, si quereis información detallada de como funciona el ataque Pass the PRT y como montaros vuestro propio laboratorio totalmente gratuíto os dejo el enlace a mi post que habla sobre el tema:

Ataques Laterales en el Cloud: Pass The PRT.

Para extraer este token, es necesario estar en una máquina la cual si tenga acceso a ese recurso y como necesitaba extraer ese token de manera rápida y eficiente decidí desarrollar una herramienta en FLASK.

PRTGenerator: Una herramienta para extraer paso a paso el token PRT

PRTGenerator es una aplicación desarrollada en FLASK que permite paso a paso extraer el token PRT de una maquina que si tiene acceso a ese recurso. Esta herramienta levanta un servicio web para poder extraer el token a través del navegador.

FLASK_WEB

Primeros pasos

La herramienta se encuentra en el siguiente github: https://github.com/Davidc96/PRTGenerator

IMAGEN_REPO

Una vez clonado el repositorio, creamos un entorno virtual con venv ejecutando el siguiente comando:

python3 -m venv .\venv

Activamos el entorno virtual ejecutando el script

.\venv\Scripts\activate.bat

Instalamos FLASK, seteamos la variable FLASK_APP que apunte a main.py.

pip install flask
set FLASK_APP=main.py

IMPORTANTE: Es necesario que esta herramienta esté en el ordenador víctima para poder generar el Token PRT, si no, no va a funcionar

Antes de ejecutar la aplicación es necesario obtener una URL dummy para generar un token PRT no funcional. Para ello abrimos el navegador en modo incognito en el ordenador que queremos suplantar y vamos a la URL https://teams.microsoft.com y aparecerá la pantalla de login de Microsoft.

LOGIN_MICROSOFT

Copiamos la URL que aparece en el login y la pegamos dentro del fichero main.py en la línea 4 dentro de la variable DUMMY_URI, esto solo lo hacemos una vez.

DUMMY_URI_PYTHON_CODE

Ahora si, ejecutamos la aplicación con flask run --host 0.0.0.0

Uso de la aplicación

Al entrar a la URL http://<IP DE LA MÁQUINA>:5000, aparecerá la siguiente pantalla:

MAIN_SCREEN

La pantalla tiene un paso a paso que se debe de seguir para poder obtener el token PRT.

Pasos:

  1. Copiamos la URL de la primera caja de texto y el primer token PRT generado en la segunda caja de texto, entramos y creamos una cookie de la siguiente manera
  • Nombre: x-ms-RefreshTokenCredential
  • Value: El base64 entregado
  • HttpOnly: True
  1. Al hacer F5 a la página, volvemos de nuevo al login pero con una URL diferente, copiamos la URL y la pegamos en la tercera caja de texto y le damos a generar.

F5_LOGIN_COOKIE

  1. Copiamos el valor del nuevo token PRT generado y lo ponemos en la cookie x-ms-RefreshTokenCredential y al darle a F5 ya hemos accedido al recurso o a la ventana de MFA.

LOGIN_MFA

Y con esto ya estaríamos dentro de la aplicación sin necesidad de credenciales

Troubleshootings

Este ataque solo funciona en Google Chrome o derivados (creo que si funciona en Microsoft Edge) pero no en Firefox, al menos, no he conseguido que funcione. En Microsoft Teams, a veces se muestra un error que dice: Ops, algo sale mal. Para resolver esto, haga clic en Cerrar sesión e intente iniciar sesión nuevamente. No te preocupes cuando se cierre la sesión porque cuando vuelvas a iniciarla se utilizará el PRT ya generado.

En Microsoft Teams al entrar con el token PRT, entrá en un bucle infinito, para resolver esto, simplemente escribe en la URL https://teams.microsoft.com y se resolverá el problema.

¿Donde está la magia? Como weaponizarlo para auditorias de Red team

Como podeis observar, la herramienta no está pensada para auditorias (está más bien pensada para otros fines xd) por lo que desplegar esto en una auditoría genera bastante ruído.

La magia de esta herramienta reside en el fichero pass_prt.py, ahí es donde se encuentra todo lo necesario para generar el Token. El código está pensado para que se pueda weaponizar facilmente mediante línea de comandos sin necesidad de instalar toda la aplicación entera.

Agradecimientos

@Dirkjanm por el script de Pass-The-PRT y el autor de haber encontrado esto.