Home Forest - Write Up (HTB) ❤
Post
Cancel

Forest - Write Up (HTB) ❤

Buenas a tod@s, el día de hoy les traigo un write-up de la máquina Forest de HackTheBox.

Untitled

Como en cada write-up, lo primero hago es lanzar un escaneo de puertos con nmap con el objetivo de identificar potenciales vías de ataque.

Como podrán ver a continuación, específico el parámetro -sS con el objetivo de que el escaneo sea vía TCP SYNC, lo que de cierto modo me permitirá agilizarlo, debido a que no hay Three-Way-HandShake como en TCP.

Lo otro es que configuré el --min-rate en 3000 con la idea de no enviar una cantidad menor a 3000 paquetes por segundo.

Advertencia: No aconsejo lanzar este escaneo en entornos productivos debido a que es ultra ruidoso y agresivo. En este caso lo estoy lanzando en un entorno controlado de HTB, donde no hay problema si un servicio se llega a caer.

1
nmap -v -sS --min-rate 3000 -n -Pn -p- 10.10.10.161 -oG tcp_ports.txt

Untitled

Posterior a ello, nuevamente utilizando nmap, lanzo un escaneo de enumeración a todos los puertos abiertos con el objetivo de identificar detalles más específicos acerca de los servicios que se encuentran corriendo.

En base al resultado obtenido, tendré mucho más contexto para saber bien por dónde atacar y/o probar cosas.

1
map -v -sCV -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49671,49676,49677,49684,49706,49969 10.10.10.161 -oN port_scan.txt

En el resultado del escaneo, identifico varios servicios de interés, entre ellos: WinRPC, SMB, LDAP, WinRM y Kerberos. Sin embargo, ya con sólo ver al servicio Kerberos, tengo claro de que estoy ante un entorno de Active Directory, por lo que ya sé más o menos cómo enforcar mi estrategia de ataque y enumeración.

Untitled

Al realizar una prueba sobre el servicio WinRPC, detectó que este posee habilitado el null session, lo que me da la posibilidad de acceder y recopilar información importante del dominio.

Untitled

En este caso, ejecutando el siguiente one-liner extraigo a todos los usuarios listados en WinRPC, con la herramienta rpcclient.

1
rpcclient -N -U '' 10.10.10.161 -c 'enumdomusers' | grep -oP '\[.*?\]' | grep -v '0x' | tr -d ']['

Untitled

Posterior a esto, con la herramienta kerbrute puedo verificar si estos usuarios son realmente válidos y se encuentran registrados en el dominio.

1
kerbrute userenum --dc 10.10.10.161 -d htb.local users.txt

Untitled

Sabiendo esto, con el listado de usuarios en mano, ejecuto un ataque AS-REPRoasting, donde se identificó que el usuario svc-alfresco tiene habilitado el privilegio UF_DONT_REQUIRE_PREAUTH.

Este privilegio permite efectuar una solicitud del tipo KRB_AS_REQ al servicio Kerberos, sin previa autenticación del usuario, la cual es respondida con KRB_AS_REP. Esta respuesta como tal, entrega el Ticket Granting Ticket (TGT) del usuario, el cual posteriormente puede ser crackeado. De ahí surge el nombre del ataque.

En este caso, logramos identificar que el ataque se efectúa exitosamente sobre el usuario svc-alfresco.

1
impacket-GetNPUsers -no-pass -usersfile users.txt htb.local/

Untitled

Un atacante puede obtener la contraseña de un usuario crackeando un Ticket Granting Ticket (TGT), debido a que parte de este se encuentra cifrado con la misma contraseña.

En base a esto, crackeo el TGT obtenido, lo cual me permite tener credenciales en el entorno y hacer pruebas con ello.

Untitled

Una vez obtenidas las credenciales, utilizando crackmapexec, valido que el usuario svc-alfresco es parte del grupo Remote Management Users lo cual me permite conectarme y ejecutar comandos en el servidor, a través del servicio WinRM.

1
crackmapexec winrm 10.10.10.161 -u 'svc-alfresco' -p 's3rvice'

Untitled

Como se muestra en imagen, con la herramienta evil-winrm logro acceder correctamente a la terminal del usuario svc-alfesco, mediante WinRM.

1
evil-winrm -i 10.10.10.161 -u 'svc-alfresco' -p 's3rvice'

Untitled

Posterior a esto, ejecuto la herramienta bloodhound-python con la cual enumero gran parte de la configuración existente en el directorio activo, a partir de las credenciales obtenidas.

1
bloodhound-python -u 'svc-alfresco' -p 's3rvice' -d htb.local --auth-method ntlm -ns 10.10.10.161 -c all

Untitled

Como se observa en la imagen, el usuario svc-alfresco pertenece al grupo Service Accounts, el cual es miembro del grupo Privileged IT Accounts, el que a su vez es miembro del grupo Account Operators.

El grupo Account Operators tiene dos cualidades particulares de las cuales me puedo aprovechar como atacante:

  • Puede crear y administrar cuentas de usuarios y grupos no administradores en el dominio.
  • Pueden iniciar sesión en el Domain Controller (DC) localmente.

Untitled

Dado que el usuario svc-alfresco forma parte de Account Operators, significa que tengo la capacidad de gestionar cuentas y grupos en el dominio.

Para ello, previamente, listo todos los grupos que puedan ser de utilidad para posteriormente escalar privilegios.

Entre estos identificó a Exchange Windows Permissions, el cual corresponde a un grupo de Active Directory que, de manera predeterminada posee habilitado el permiso WriteDACL, lo cual me permitiría asignar ciertos permisos al resto de usuarios en el dominio, entre ellos DCSync.

DCSync es una técnica que se utiliza para pedir las claves de cualquier usuario a un controlador de dominio, a través del protocolo de replicación DRSUAPI.” - Tarlogic

Por lo general, en entornos de AD donde se encuentra se instalado Microsoft Exchange, suelen haber una cantidad mayor de usuarios en el grupo Exchange Windows Permissions.

Untitled

Sabiendo esto, creo la cuenta de usuario sha16 en el dominio y la añado al grupo local Remote Management Users, con el objetivo de que este puede acceder al servidor mediante el servicio WinRM.

Por otro lado, también añado al usuario al grupo del dominio, Exchange Windows Permissions, el cual tiene la capacidad WriteDacl, lo cual me permitiría escalar privilegios, mediante la asignación de permisos críticos.

Para dar contexto, las DACL son las Dictionary Access Control List con las cuales es posible gestionar de manera efectiva los accesos en los entornos de directorio activo.

Untitled

Como se muestra en imagen, dicho grupo posee el permisos WriteDacl sobre el dominio.

Untitled

Dado esto, con la siguiente instrucción en PowerShell, habiendo importado PowerView previamente, asigno el permiso DCSync a la cuenta del usuario sha16.

1
2
# Add-DomainObjectAcl = Add-ObjectAcl
Add-ObjectAcl -PrincipalIdentity sha16 -Domain htb.local -Rights DCSync

Untitled

Hecho esto, como se muestra en imagen, el usuario sha16 tiene la capacidad de volcar todo el NTDS, pudiendo obtener todos los hashes NTLM de los usuarios del dominio.

1
impacket-secretsdump 'htb.local/sha16:Admin12345$@10.10.10.161'

Untitled

Ya con el hash NTLM del usuario Administrador, me puedo conectar a su cuenta a través del servicio WinRM y obtener una terminal interactiva directamente en el servidor.

Untitled

This post is licensed under CC BY 4.0 by the author.