Buenas a tod@s, el día de hoy les traigo un write-up
de la máquina Forest
de HackTheBox
.
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
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.
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.
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 ']['
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
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/
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.
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'
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'
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
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.
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ónDRSUAPI
.” - 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
.
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.
Como se muestra en imagen, dicho grupo posee el permisos WriteDacl
sobre el dominio.
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
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'
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.