Publicaciones HTB-SAUNA
Post
Cancel

HTB-SAUNA

Decripción del entorno

Atacante

OSKali Linux
IP10.10.15.131

Maquina Objetivo

OSWindows
IP10.10.10.175
Dificultad4.9/10 / Easy
URLSauna

Enumeración

Se realiza la enumeración habitual para el reconocimiento e identificación de los puertos abiertos en el sistema:

1
$ nmap -sS -sV -sC -oA nmap_sauna 10.10.10.175

Escaneo con Nmap Resultado escaneo con nmap

Procedemos con la revisión detallada del sitio web pero no se encuentran enlaces o funcionalidades interactivas para atacar, solo son archivos CSS y HTML estático:

Sitio Web puerto 80 Sitio Web puerto 80

Por lo cual, nos vamos a enfocar estrictamente en los puertos y servicios adicionales, los cuales son propios de un controlador de dominio:

  • Puerto 53: Corre un servicio de DNS
  • Puerto 88: Corre el servicio de kerberos
  • Puerto 3268: Corre un servicio LDAP

Todos estos servicios nos permiten identificar el servidor como un controlador de dominio, por lo que se recolecta la mayor cantidad de información del Active Directory mediante todos los servicios desplegados:

1
$ enum4linux 10.10.10.175

La herramienta enum4linux hace uso a modo de envoltorio de diferentes herramientas como SAMBA, SMBClient y RPCclient para poder recolectar la mayor cantidad de información, tal como:

  • Identificación del sistema operativo
  • SID y nombre del dominio
  • Usuarios de maquina
  • Carpetas o archivos compartidos
  • Identificación de grupos
  • Impresoras asociadas

Mediante la ejecución de esta herramienta, se identifica el nombre del Dominio EGOTISTICALBANK:

Nombre de Dominio Enumeracion nombre de Dominio

Como no tenemos más información y los demás puertos no parecen ser concluyentes en cuanto a algún servicio vulnerable y otro vector de ataque, se intenta la enumeración de usuarios por diccionario. Para poder lograr esto, realizamos esta enumeración mediante el servicio de kerberos (puerto 88).

  • Nota:

    En este punto realmente es poco claro el camino a la explotación, ya que por lo general uno espera encontrar un servicio vulnerable o una especie de aplicativo web, sin embargo, también es muy importante plantearse la idea principal y es que estamos trabajando contra un Active Directory, por tanto, se deben considerar sus servicios más importantes (SMB, DNS, LDAP y Kerberos).

Para la enumeración de usuarios frente a un controlador de dominio tenemos diferentes opciones entre las que se encuentran hacer procesos de autenticación contra SMB o LDAP, y probando muchos usuarios, sin embargo, este tipo de enumeraciones puede resultar en un ataque demasiado ruidoso y que posibilita el bloqueo de los usuarios probados o de nuestra IP, sin mencionar que es bastante lento. No obstante, también es posible realizar una enumeración mediante el servicio de kerberos, utilizando una técnica llamada “Kerberos Pre-Authentication”.

Kerberos Pre-Authentication

Esta técnica tiene una gran ventaja respecto a las demás de enumeración de usuarios o ataques de fuerza bruta, ya que solo hace falta tener visibilidad con el AD y el nombre del dominio. Adicional, los errores en la pre-authentication de kerberos no son marcados como errores de Logon Failure (4625) sino como un evento especifico de Kerberos Pre-Authentication Failure (4771), esto nos permite evitar los filtros habituales de alertas o monitoreo, haciendo el ataque más sigiloso.

Enumeracion por kerberos

Para realizar este ataque utilizamos la herramienta kerbrute, la cual nos permite diferentes tipos de ataque sobre el servicio de kerberos en un AD:

  • Enumeración de usuarios
  • Fuerza Bruta
  • Fuerza bruta a un usuario
  • Password Spray
1
$ ./kerbrute userenum –dc sauna.htb -d AGOTISTICALBANK [FILE_usernames]

kerbrute Enumeracion con la herramienta kerbrute

Utilizamos la opción de enumeración de usuarios y obtenemos como resultado la identificación de 3 usuarios del sistema:

  • Administrator
  • Fsmith
  • Hsmith

  • Nota:

    Considerando el patrón que existe con la variación de [CHAR]Smith, creamos un script para intentar identificar más usuarios. Esta prueba NO nos arroja resultados, pero había que intentarlo ;).

En este punto, al tener solo los usuarios y estar centrados en el servicio de kerberos, probamos una técnica llamada ASREPRoast Kerberos la cual nos permite capturar el hash de la contraseña de aquellos usuarios que tengan deshabilitada la opción de pre-authentication kerberos, con lo cual, el servidor de kerberos acepta la petición KRB_AS_REQ sin verificar que el usuario que las envía este previamente autenticado: (ver referencias si se quiere profundizar)

KRB_AS_REQ Esquema del KRB_AS_REQ

De esto, como solo depende del parámetro username y el SPN Krbtgt es el mismo siempre, podemos obtener una respuesta KRB_AS_REP que se encuentra firmada o cifrada con el hash NTLM de la contraseña del usuario que utilizamos:

KRB_AS_REP Esquema del KRB_AS_REP

Como se puede observar, aunque lo importante de la respuesta es el Ticket (TGT) que nos permitiría el acceso a más tickets de servicio, este viene cifrado con el hash del krbtgt por lo cual NO podemos ver su contenido ni intentar password cracking, sin embargo, otros datos como el session_key y el TGT_expiration_Time están cifrados con el hash de la contraseña del usuario que ingresamos, por lo tanto, el proceso de captura del hash del usuario esta dado de la siguiente manera:

  1. Se envia un intento KRB_AS_REQ con un usuario enumerado previamente.
  2. Se recibe un KRB_AS_REP:
    • Se toma la parte cifrada con el hash del usuario
      • Session_key
      • TGT_expiration_time
    • Se intenta realizar password cracking
      • Se prueba una posible contraseña.
      • Se convierte a NTLM.
      • El hash NTLM lo probamos como posible contraseña de los parametros anteriores.
        • Si obtenemos la información en claro, ya hemos descubierto la contraseña original ;)
        • Si no obtenemos la información, intentamos la siguiente contraseña :c

De esta manera, podemos realizar un proceso offline de cracking de password para los usuarios que sean vulnerables a ASREPRoast Kerberos. (para más información del funcionamiento de kerberos, leer: https://www.tarlogic.com/blog/como-funciona-kerberos/)

GetNPUsers - ASREPRoast Kerberos

1
$ GetNPUsers.py AGOTISTICALBANK/ -usersfile usernames.txt -format hashcat -dc-ip 10.10.10.175 -outputfile hashes.asreproast 

Al pasarle los usuarios identificados, vemos que el usuario fsmith es vulnerable a este tipo de ataques, por lo cual, podemos capturar su hash:

GetNPUsers GetNPUsers para realizar el ataque ASREPRoast

Posterior a capturar su hash, utilizamos la herramienta hashcat para realizar un proceso de password cracking basado en un ataque por diccionario utilizando el rockyou.txt:

1
$ hashcat -m 18200 -a 0 hash.asreproast rocktou.txt

Logrando obtener así la contraseña original del usuario fsmith:

  • Fsmith: Thestrokes23

Nota: En este punto de la explotación duramos atascados un tiempo al no poder descubrir una forma de interactuar con el servidor e incluir las nuevas credenciales obtenidas, se prueban múltiples servicios sin resultado, así que se decide re escanear todos los puertos de la maquina en busca de más información.

1
$ nmap -sS -p- 10.10.10.175

Nuevo nmap Nuevo escaneo completo sobre el equipo

En este nuevo escaneo profundo y completo, descubrimos el puerto 5985 que no teníamos presente al inicio, este puerto es utilizado para el manejo remoto de los equipos Microsoft a través del protocolo WINRM (Servicio de Administrador remoto), así que podemos aprovecharlo como una puerta de entrada para la ejecución remota e interactiva de comandos, para esto, descargamos la herramienta llamada evil-winrm hecha por hackplayers https://github.com/Hackplayers/evil-winrm.

evil-winrm

1
ruby evil-winrm.rb -i 10.10.10.175 -u fsmith -p Thestrokes23

Evil-Winrm Conexion utilizando la herramienta Evil-Winrm

En este punto, ya tenemos acceso interactivo con la maquina y podemos capturar la flag de bajos privilegios user.txt.

Elevación de Privilegios

Una vez tenemos el acceso interactivo mediante evil-winrm procedemos a realizar la escala de privilegios, por lo cual hacemos una carga de los siguientes scripts de powershell al sistema víctima, esto se logra con la opción -s e indicando la ruta local donde estarán los scripts:

  • PowerView.ps1
    • Script especial para la prueba e interacción con sistemas de directorio activo.
  • PowerUp.ps1
    • Compilación de scripts y técnicas para la recolección local de información y la explotación automática en escala de privilegios.

Lo primero que se hace es utilizar el script Invoke-AllChecks de PowerUp, que de forma automática lanzará todos los escáneres en busca de malas configuraciones que nos permitan elevar privilegios:

Autologon Mala configuración, captura de contraseña en el registro usando Autologon

El script identifica una mala configuración en la propiedad de Autologon que se guarda en el registro del equipo y partiendo de eso, logra la captura y lectura en texto claro de la credencial del usuario svc_loanmanager:

  • svc_loanmanager: Moneymakestheworldgoround!

En este punto de la explotación ya tenemos acceso a 3 de los 4 usuarios en el sistema, por lo cual vamos a intentar conectarnos con estas nuevas credenciales, sin embargo, es importante recordar que por la información previa recolectada del dominio, el nombre de usuario para conectarnos es svc_loanmgr y lo realizamos también con Evil-WinRM.

1
ruby evil-winrm.rb -i 10.10.10.175 -u svc_loanmgr -p Moneymakestheworldgoround! -s /home/csl/shared/ 

Teniendo estas credenciales hacemos uso de secretsdump.py de Impacket para extraer los hashes de todos los usuarios del dominio, de forma remota:

1
python3 /usr/share/doc/python3-impacket/examples/secretsdump.py EGOTISTICALBANK/svc_loanmgr:Moneymakestheworldgoround\!@10.10.10.175

secretdump Uso de la herramienta SecretDump para extraer hashes del AD

Pass The Hash

Teniendo los hashes de los usuarios, tomamos el del administrator y se hace un Pass The Hash, por lo cual, usando el wmiexec.py de Impacket y pasamos los parámetros y el hash del administrador, esto nos permite ejecutar comandos e impersonar a dicho usuario:

1
python3 /usr/share/doc/python3-impacket/examples/wmiexec.py EGOTISTICAL-BANK.LOCAL/administrator@10.10.10.175  -hashes aad3b435b51404eeaad3b435b51404ee:d9485863c1e9e05851aa40cbb4ab9df

Pass The Hash Impersonación del usuario Administrator con Pass The Hash

De esta forma, se logra la elevación de privilegios por medio de diferetes configuraciones inseguras en el Controlador de Dominio.

Referencias

  1. Funcionamiento de Kerberos y algunos de sus ataques:
  2. Recopilación de distintas herramientas y ataques para Directorio Activo:
  3. WriteUP de una maquina en la que se ataca un directorio activo:
  4. Lectura interesante sobre el abuso de privilegios y acls en directorios activos:
This post is licensed under CC BY 4.0 by the author.
Tabla de Contenido