Active
Platform
HackTheBox
O.S
Windows
Level
Easy
Skills
SMB enumeration
GPP
Cracking
Kerberoasting
Fase 1: Reconocimiento
Para empezar, vamos a analizar con nmap que puertos TCP tiene abiertos la máquina.
sudo nmap -sS -p- --open --min-rate 5000 -n -Pn -vv 10.10.10.100 -oN target

Luego escaneamos cada puerto, descubrimiento versiones en los protocolos que corren en cada uno y lanzando scripts de NSE por defecto.
nmap -sCV -p88,135,445,636 10.10.10.100 -oN ports

Antes de empezar a enumerar, explotar o realizar cualquier acción, vamos a obtener toda la información relacionada al dominio y al nombre del PC víctima.

Para posteriormente agregarlos al fichero /etc/hosts
y así lograr que nuestra máquina atacante asocie la IP al nombre de dominio, nombre de host y FQDN.

Procedemos ahora si a enumerar los recursos compartidos SMB y a ver los permisos que tenemos sobre ellos con una sesión anónima.

Fase 2: Explotación
Una vez identificado el recurso Replication, sobre el cual tenemos permisos de lectura, accedemos a el para ver que información útil podemos encontrar para posteriores acciones de explotación

Una vez dentro, noto que existen muchos ficheros y directorios, por lo cual decido descargarlo todo a local para analizarlo de una manera más ordenada.

Una vez tengo los archivos en mi máquina local, filtro todos los ficheros que hayan y entre todo veo que hay archivos básicos y por defecto en cada GPO (GPT.INI), archivos de "setup information" usados por Windows para instalar software del sistema (archivos .inf), entre otros...
Pero me llama la atención el fichero Groups.xml.

Este archivo es generado por las Group Policy Preferences (GPP) cuando un administrador configura la creación o modificación de cuentas locales a través de GPOs.
Entro a ver el archivo con un editor de texto y veo que existe una contraseña en el campo cpassword y un nombre de usuario justo abajo.

Como no tenía ni idea de que cifrado estaba utilizando, le he preguntado a mi colega a ver que me decía 🫣.

Perfecto, ahora todo tiene sentido.
Investigando un poco más, veo que las contraseñas almacenadas en los archivos XML generados por GPP están cifradas con AES de 32 bytes utilizando una clave fija y públicamente conocida. Además, existe una herramienta llamada gpp-decrypt
que permite descifrar fácilmente estas contraseñas.

Una vez obtenida la contraseña en texto plano la pruebo con el usuario encontrado en el mismo archivo para ver si es válida a nivel de dominio y así aprovecho a enumerar shares para comprobar si tengo nuevos permisos sobre otros recursos.

Perfecto, aunque aún no tendríamos acceso a través de psexec, ya que no tenemos permisos de escritura ni sobre el recurso C$ ni sobre el recurso ADMIN$, poseemos permisos de lectura sobre un share bastante interesante llamado users.
Así que me autentico contra él a ver que información puedo obtener.

Bueno, al parecer podemos obtener directamente la flag del usuario, ya que se encontraba en el Desktop del usuario actual, directorio sobre el cual teníamos permisos.

Fase 3: Post-Explotación
El nombre del usuario nos da una pista de que es una cuenta de servicio de AD, específicamente de algún servicio relacionado al TGS (Ticket Granting Service).
Bien, pues vamos a ver si podemos realizar un Kerberoasting.
Este ataque consiste en pedir al KDC un TGS para los usuarios que tengan un SPN asociado. Para los usuarios que tengan este SPN, el KDC nos devuelve un TGS el cual está cifrado con el hash de la contraseña del usuario dueño.
La librería de Impacket que vamos a utilizar lo que hace es automatizar este proceso por nosotros devolviéndonos el TGS en un formato que podamos crackear posteriormente con herramientas como hashcat o john.
En este caso, el usuario administrator tiene el SPN CIFS (el servicio de compartición de archivos SMB) asociado, lo que indica que las peticiones de autenticación para SMB pueden obtener un ticket TGS cifrado con la clave de este usuario.

Perfecto, tenemos el TGS del usuario administrator, vamos a crackearlo 🙂↕️.

Buscamos en hashcat que tipo ponemos para crackear este TGS.

Ahora si, corremos el hashcat y dejemos que cocine 👀.


Obtenida la contraseña, comprobamos que sea válida a nivel de dominio para el usuario administrator.

Una vez sabemos que es válida y que tenemos permisos de escritura sobre el recurso compartido ADMIN$, vamos a entrar al host con ayuda de psexec
.

La flag del usuario se encuentra en el Desktop del mismo.

Last updated