HTB{ Active }

Hola !
Esta semana, se retiró Active de HTB, una máquina de dificultad baja (aunque por ser windows yo diría que es media), la cual nos ayuda a repasar sobre temas relacionados a Active Directory (de ahí su nombre), por lo que es un buen ejercicio para aquellos que están empezando a entender más sobre como funciona este mundo. Les dejo entonces mi solución 🙂

Activeicon

  1. Recon
  2. user.txt
  3. root.txt

Antes de comenzar directamente con la máquina, me gustaría repasar un par de conceptos claves para poder entender los pasos realizados en este writeup, así que, partamos por algunas definiciones

  • Active Directory: Servidor que controla todos los recursos, usuarios y máquinas de una red activa windows.
  • LDAP: Protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuído para buscar información en un entorno de red. Similar a un directorio telefónico, LDAP nos permite encontrar la información de distintos objetos pertenecientes a la red (usuarios, dominios, máquinas, etc).
  • Kerberos: Kerberos es un protocolo de autenticación que se utiliza para verificar la identidad de un usuario o host. Cuando un usuario desea autenticarse en una red AD, en lugar de transmitir su contraseña real a través de la red, Kerberos opera con una serie de tickets.
  • TGT y ST(TGS): El Ticket Grant Ticket permite la autenticación de los usuarios en la Red del AD mediante kerberos. Cuando estos se autentican solicitando un TGT, pueden acceder a los recursos de su cuenta. El service Ticket es exactamente la misma lógica, pero es utilizado para acceder a los recursos o servicios de la red.
  • SPN: Service Principal Names, es un identificador único que permite relacionar una instancia de un servicio específico con un inicio de sesión de servicio.

Recon

Como en todas las máquinas, empezamos con una enumeración a nivel de puertos para ver la información que arroja la máquina a atacar. Utilizamos:

h4tt0r1@pandora:~$ nmap -sS -sV -o active.nmap 10.10.10.100

obteniendo lo siguiente:

active.nmap

A partir de aquí, debemos decidir cual de todos los servicios listados es el que debemos explorar. A mi juicio, los más interesantes vienen siendo los puertos que estan estrechamente relacionados a un Active Directory. Estos son:

  • Puerto 88 Kerberos
  • Puerto 389 LDAP
  • Puerto 445 SMB

Los demás puertos no hay que descartarlos los exploraremos solo si llega a ser necesario.

Partimos entonces con SMB en el puerto 445, un protococolo utilizado para la compartición de recursos en la red, muy útil cuando se quiere acceder a archivos y/o directorios de otros dispositivos, permitiéndonos extraer información útil de la red. Debemos identificar entonces, que usuarios y que directorios son accesibles a traves de SMB. Una herramienta llamada Nullinux, bastante poderosa para enumeración SMB, nos permite listar dichos recursos disponibles:

h4tt0r1@pandora:~$ python nullinux.py -all 10.10.10.100

null1

null2

null3

De esta enumeración, ya se obtiene detalles importantísimos de la máquina que nos ayudarán tanto en la fase inicial como en la de post explotación.

De la información obtenida en la enumeración anterior debemos destacar:

  • Domain users: Administrator, krbtgt, SVC_TGS, Guesta
  • Directorios SMB: ADMIN$, C$, IPC$, NETLOGON$, Replication, SYSVOL, Users y todos los respectivos subdirectorios obtenidos
  • Domain: active.htb

User.txt

Con la información obtenida anteriormente, podemos ver que SMB es una puerta directa de acceso a la máquina. Además, nos damos cuenta que el usuario Anonymous esta permitido, por lo que intentamos ingresar a algunas de las carpetas de SMB utilizandolo:

inside_smb

Bingo!, entramos 😀

De aquí, el árbol de directorios es algo tedioso. Muchos de los caminos que se tomen llevarán a callejones sin salida, por lo que hay que armarse de paciencia para encontrar el archivo que necesitamos. Luego de un par de minutos, damos con un archivo bastante interesante. Este se ubica en:

smb: \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml

Dicho archivo, es típico de servidores active directory y contiene credenciales de ciertos usuarios. En nuestro caso, el contenido del archivo, nos permitía ver las credenciales del usuario SVC_TGS:

<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}"><User clsid="{DF5F1855-51E5-4d24-8B1A
-D9BDE98BA1D1}" name="active.htb\SVC_TGS" image="2" changed="2018-07-18 20:46:06" uid=
"{EF57DA28-5F69-4530-A59E-AAB58578219D}"><Properties action="U" newName="" fullName=""
description="" cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVY
dYw/NglVmQ" changeLogon="0" noChange="1" neverExpires="1" acctDisabled="0"
userName="active.htb\SVC_TGS"/></User></Groups>
  • name=”active.htb\SVC_TGS”
  • cpassword=”edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ”

El hash anterior, esta encriptado mediante AES-256 y la llave privada es típicamente provista por microsoft. Lo que podemos hacer entonces, es crackearla utilizando algo de fuerza bruta. Buscando un poco como desencriptar este tipo de llaves, me topé con GPP-Decrypt, una herramienta que cumple los requisitos mencionados anteriormente para poder obtener la clave:

gpp

Obteniendo así la password del usuario SVC_TGS. Ahora podemos intentar usar estas credenciales para intentar entrar a la carpeta del usuario mediante SMB (en la fase de enumeración SMB pudimos ver como se mostraba el contenido de su carpeta).

smbclient \\\\10.10.10.100\\Users -U 'active.htb\SVC_TGS'

user.txt

Ya estamos dentro de la máquina y con esto ya podemos leer el user.txt ubicado en el Desktop del usuario SVC_TGS 🙂

Root.txt

Ahora comencemos la parte de escalación de privilegios. La primera vez que me enfrenté a esta máquina, me di muchas vueltas intentando enumerar el interior de esta. Revisé miles de directorios, procesos, usuarios o cualquier información que pudiera ayudarme a escalar. Si bien, encontré ciertos vectores que podían ser potenciales vulnerabilidades para llegar al usuario Administrator, ninguno de estos era una escalación limpia y ya saben que a la gente de HTB les gusta explotar la lógica de las máquinas, es por eso que decidí pensar en lo que tenía antes de lanzar exploits a lo loco.

Me llama la atención, que el usuario de la máquina fuese llamado SVC_TGS, pues la forma inicial de llegar al user.txt, no tenía nada que ver con el uso de un TGS, por lo que me puse a investigar un poco sobre esto, llegando al Kerberoasting.

kerberos_process

El kerberoasting se realiza haciendo la petición de los Servicios principales de nombres (SPNs) de la cuenta objetivo. Estas peticiones usan un TGT de usuario de dominio válido, para pedir uno o varios ST. El controlador de dominio por su lado, mira aquellos SPNs en el active directory y encripta el ticket. Esta encriptación es RC4_HMAC_MD5, lo que quiere decir que el hash NTLM de la contraseña de la cuenta de servicio es usada para encriptar el ticket.

Los ST vienen cifrados con el hash NTLM de la cuenta de dominio a la que está ligada el servicio, por lo que si un usuario solicita un ST de un servicio que está ligado a un usuario, una vez obtenido el ST se lo puede llevar a otra máquina e intentar crackear la contraseña del usuario, que por lo general suele contar con bastantes privilegios en el dominio.

Sabiendo ya todo esto, podemos intentar un Kerberoasting limpio utilizando la herramienta de Impacket, utilizando el modulo en python GetUserSPNs.py.

h4tt0r1@pandora:~$ python GetUserSPNs.py -request -dc-ip 10.10.10.100 active.htb/SVC_TGS

kerberoast

Como se observa en la imagen, se obtuvo satisfactoriamente un HASH NTLM y que mejor, que el del mismo administrador de la máquina !! .

Lo que nos queda por hacer entonces, es crackear el Hash del Administrador y para ello, utilizamos Hashcat en conjunto al diccionario rockyou.txt (utilicé mi máquina Windows en este caso).

hashcat

  • Administrator pasword: Ticketmaster1968

Ya con esto, estamos aptos para loguear como administrator en la carpeta de administrador encontrada en la enumeración SMB 🙂

root_login

Finalmente ya con esto podemos leer el root.txt ubicado en el Desktop del Administrador 😀

Espero se haya entendido todo. Definitivamente, se requiere algo de lectura cruda para la parte del root, pero entendiendo el proceso, es cosa de utilizar el script correcto. Cualquier duda que tengan no duden en hacerla :)!

Se despide como siempre H4tt0r1

Agregar un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *