Intelligence
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
Intelligence
es una máquina Windows de dificultad media que muestra una serie de ataques comunes en un entorno de Active Directory. Después de recuperar documentos PDF internos almacenados en el servidor web (mediante la fuerza bruta de un esquema de nombres común) e inspeccionar sus contenidos y metadatos, que revelan una contraseña predeterminada y una lista de posibles usuarios de AD, la pulverización de contraseñas conduce al descubrimiento de una cuenta de usuario válida, lo que otorga un punto de apoyo inicial en el sistema.
Se descubre un script de PowerShell
programado que envía solicitudes autenticadas a servidores web en función de su nombre de host; al agregar un registro DNS personalizado, es posible forzar una solicitud que se puede interceptar para capturar el hash de un segundo usuario, que es fácil de descifrar. A este usuario se le permite leer la contraseña de una cuenta de servicio administrada por un grupo, que a su vez tiene acceso de delegación restringido al controlador de dominio, lo que da como resultado un shell con privilegios administrativos.
Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina Intelligence.
Lanzaremos una serie de scripts básicos para intentar buscar vulnerabilidades en los puertos que hemos encotrado expuestos.
Comprobaremos el nombre del dominio con el cual nos enfrentamos a través del siguiente comando.
Procederemos a añadir la entrada en nuestro archivo /etc/hosts
Moveremos los 2 PDFs descargados a nuestro directorio actual de trabajo y procederemos a comprobar que disponemos de los archivos.
A través de la herramienta de exiftool analizaremos los 2 PDFs que disponemos en busca de metadatos. Comprobamos que en los 2 archivos aparece un creador diferente, lo cual parece ser nombres de usuario.
Hemos visto que los documentos PDF que disponíamos, seguían el mismo formato de nombre de archivo (YYYY-MM-DD-upload.pd).
Por lo tanto, pensamos que podrían haber más PDFs en el sitio web que no aparecían visiblemente accesibles. Para comprobarlo, diseñamos un pequeño script en bash que itera a través de los años, meses y días realizando una descarga para cada combinación. Así, logramos descargar todos los PDFs disponibles que habían des del 2015 hasta el 2024.
Verificamos que se realizó la descarga de varios PDFs que no estaban visiblemente accesibles.
Procedimos a realizar con exiftool la extracción de los creadores de dichos PDFs para almecenar el resultado en "users.txt" de posibles usuarios que habíamos encontrado.
Como hemos verificado que Kerberos (Puerto 88) se encuentra expuesto, procedemos a realizar una enumeración de usuarios válidos de la lista que disponemos a través de la herramienta de kerbrute. Comprobamos que todos los usuarios que disponíamos de la extracción de los metadatos de los PDFs son válidos.
Debido que disponemos de una buena cantidad de usuarios válidos, probaremos de realizar un AS-REP Roasting Attack de usuarios que dispongan del (DONT_REQ_PREAUTH) de Kerberos.
En este caso, ninguno disponía de dicha configuración.
Procederemos a analizar todos los PDFs que habíamos extraído anteriormente en busca de contenido.
Para ello a través de un bucle while, procederemos a ir uno por uno para que se ejecute la herramienta de pdftotext y así disponer para cada uno el PDF pasado a texto.
Comprobando todos los contenidos de los PDFs, comprobamos que aparece uno un mensaje indicando a los usuarios cual es la contraseña por defecto que disponen cuando se crean la cuenta.
Teniendo la nueva contraseña, probaremos con crackmapexec de buscar con qué usuario podemos autenticarnos con dichas credenciales.
Nos encontramos que la usuaria "Tiffany.Molina" no realizó el cambio de contraseña y continua con la contraseña que veía por defecto.
Validaremos de nuevo solamente con el usuario y su respectiva contraseña y comprobamos que nos autentica correctamente.
Teniendo un usuario válido con sus credenciales, procederemos a intentar realizar un Kerberoast Attack, comprobamos que no obtenemos ningún TGS (Ticket Granting Service).
Procederemos a enumerar el LDAP ya que lo hemos encontrado expuesto. Procederemos con la herramienta de ldapdomaindump de exportar todo el contenido de LDAP en nuestra Kali.
Revisando los archivos que nos deja la herramienta, comprobamos que hay un equipo nombrado "svc@intelligent.htb" que como flag aparece "TRUSTED_TO_AUTH_FOR_DELEGATION", esto es muy interesante y nos podría servir de cara el futuro.
Procederemos a enumerar el SMB con las nuevas credenciales obtenidas y ver a qué recursos tiene acceso dicho usuario. Comprobamos que dispone de acceso al recurso "Users".
Con la herramienta de smbmap procederemos a comprobar el directorio de (Users/Tiffany.Molin/Desktop) y vemos que encontramos la flag de user.txt, la descargaremos con smbmap mismo.
Con smbclient procederemos a conectarnos al recurso compartido "IT" y nos descargaremos todo el contenido del recurso.
Hemos encontrado un script en un recurso SMB que realiza comprobaciones del estado de servidores web registrados en Active Directory. El script itera sobre los registros DNS que comienzan con "web" y, si no recibe un estado 200 de respuesta, envía un correo electrónico a "Ted Graves".
Para aprovechar una vulnerabilidad en el entorno de Active Directory, utilicé la herramienta dnstool.py para crear un registro DNS que redirige las solicitudes a mi dirección IP. Esto permite que, al verificar el estado del servidor web, se utilicen las credenciales del usuario que está definido en "UseDefaultCredentials".
Una vez añadido el registor DNS, procederemos con el siguiente punto.
Debido que el script se ejecuta cada 5 minutos y hemos realizado un registro DNS que empieza por "web", el script lo que hará es verificar el estado del servidor web que apunta a mi dirección IP, por lo tanto con responder capturaremos el HASH NTLMv2 del usuario que ejecute dicho script.
Comprobamos que obtenemos el hash NTLMv2 del usuario "Ted.Graves".
Con la herramienta de hashcat procederemos a crackear el hash para obtener la contraseña a través de un diccionaro. Comprobamos que ha encontrado la contraseña válida para el hash.
Con la herramienta de netexec procederemos a validar de que las credenciales para el usuario "Ted.Graves" son válidas y así también revisar los recursos compartidos SMB que tiene acceso, pero vemos que dispone de los mismos permisos que el anterior usuario, por lo tanto, descartamos volver a enumerar el SMB con estas credenciales.
Verificadas las nuevas credenciales, las guardaremos en nuestro archivo "credentials.txt".
Como no tenemos acceso a la máquina por terminal aún, procederemos a realizar la enumeración del AD con BloodHound para recopilar toda la información y así a través de BloodHound encontrar algún vector para escalar privilegios.
Marcaremos que tenemos el usuario "Ted.Graves" como "Ownes" ya que ya lo hemos comprometido.
Seleccionaremos al usuario y en el apartadod e "Node Info" le daremos a "Reachable High Value Targets" para ver posibles objetivos.
Comprobamos el siguiente esquema del usuario "Ted.Graves".
Comprobamos en BloodHound de que el usuario forma parte del grupo "ITSUPPORT", que a su vez dicho grupo tiene permisos de (ReadGMSAPassword).
Con este permiso sobre el equipo "SVC_INT", lo que nos permite es obtener la contraseña de la cuenta de servicio de dicho equipo.
BloodHound nos explica la manera de explotar este privilegio des de Linux a través de gMSADumper.py.
Procederemos a extraer la contraseña de la cuenta de servicio sobre el equipo mencionado. Para ello, utilizarmeos gMSADump.py.
Comprobamos que hemos obtenido el hash NTLM de la cuenta "svc_int"
En esta fase del ataque, aprovechamos la delegación no restringida que tiene el usuario SVC_INT$, que posee permisos de AllowedToDelegate sobre el controlador de dominio DC.LOCAL.HTB (este dato lo descubrimos en BloodHound). Esto significa que SVC_INT$ puede recibir y pasar credenciales de usuario a otros servicios, lo que se convierte en una vulnerabilidad que podemos explotar.
Primero, utilizamos el script gMSADumper.py para extraer el hash de la cuenta de servicio de SVC_INT$, que es esencial para obtener el Ticket Granting Ticket (TGT). Con este hash, podemos suplantar al usuario y solicitar tickets de acceso a otros servicios en el dominio.
Luego, lo que deberemos ejecutar es el comando de pywerview para obtener el Service Principal Name (SPN), que nos permitirá interactuar con el servicio web correspondiente. Esta información es crucial para la última etapa, donde utilizaremos getST.py.
Utilizaremos la herramienta de pywerview para obtener el SPN (Service Principal Name) al cual SVC_INT$ dispone del privilegio de AllowedToDelegate
Finalmente, al ejecutar getST.py con el SPN obtenido y el hash de SVC_INT$, podemos solicitar un ticket para impersonar a un usuario con privilegios más altos, como el administrador. De esta manera, aprovechamos la delegación no restringida para escalar privilegios y obtener acceso a recursos restringidos dentro del dominio.
Si tenemos problemas a la hora de lanzar la herramienta por la sincronización de nuestra hora con la del dc [KRB_AP_ERR_SKEW(Clock skew too great)], procederemos a ejecutar ntpdate -s 10.10.10.248
Comprobamos que ganamos acceso como usuario Administrator y obtenemos la flag de root.txt.
Como hemos visto el puerto 80 expuesto (HTTP), procederemos a acceder a y comprobaremos que disponemos de 2 PDFs para descargar. Los descargaremos en nuestro equipo.