Intelligence
Intelligence es una máquina Windows de dificultad media que muestra una serie de ataques comunes en un entorno Active Directory. Tras recuperar documentos PDF internos almacenados en el servidor web (forzando un esquema de nomenclatura común) e inspeccionar su contenido y metadatos, que revelan una contraseña predeterminada y una lista de posibles usuarios de Active Directory, el rociado de contraseñas conduce al descubrimiento de una cuenta de usuario válida, lo que permite la entrada inicial en el sistema. Se descubre un script PowerShell programado que envía peticiones autenticadas a servidores web basándose en su nombre de host; añadiendo un registro DNS personalizado, es posible forzar una petición que puede ser interceptada para capturar el hash de un segundo usuario, que es fácilmente crackeable. 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 restringido por delegación al controlador de dominio, lo que da lugar a un shell con privilegios administrativos.

Enumeración
Iniciamos enumerando los puertos que se encuentra abiertos en la maquina victima, esto con la herramienta de nmap
-p-: especifica que se escaneen todos los puertos (desde el puerto 1 hasta el puerto 65535).--open: muestra solo los puertos que están abiertos.--min-rate 5000: establece la tasa mínima de paquetes por segundo a 5000 para acelerar el escaneo.-vvv: establece un nivel de verbosidad muy alto, mostrando una salida muy detallada del escaneo.-Pn: ignora la detección de hosts y asume que el objetivo está activo.-n: evita la resolución DNS inversa para las direcciones IP.10.10.11.248: es la dirección IP del host que se va a escanear.-oG allportsScan: genera un archivo de salida en formato greppable con el nombre "allportsScan".
Luego de obtener los puertos abiertos lo que haremos será enumerar los servicios y las versiones de estas en cada uno de los puertos.
-p: especifica los puertos a escanear. En este caso, se están escaneando los puertos 53, 80, 88, 135, 139, 389, 445, 464, 593, 636, 3268, 3269, 5985, 9389, 49667, 49683, 49684, 49694, 49742 y 56871.-sC: activa la opción de enumeración de scripts predeterminados de Nmap. Esto permite ejecutar una serie de scripts diseñados para detectar vulnerabilidades o características específicas de los servicios.-sV: realiza una detección de la versión de los servicios que se encuentran en los puertos especificados.-vv: establece un nivel de verbosidad muy alto, mostrando una salida muy detallada del escaneo.-n: evita la resolución DNS inversa para las direcciones IP.10.10.10.248: es la dirección IP del host que se va a escanear.-oN ServicesScan: genera un archivo de salida en formato normal con el nombre "ServicesScan".
Puerto 80
Revisando el sitio web encontraremos el siguiente contenido:

Vemos que tiene enlaces de algunos documentos

Revisando el nombre de los documentos vemos que tienen un patrón

Además, en los metadatos podemos ver que contiene el nombre del creador del documento.

Explotación
Haciendo uso del script Fuzz_DownloadPDF.py que realizamos nos permitirá hacer ffuzzing y luego descargar los PDFs existentes

Enumeración de usuarios de los archivos PDF
Haciendo uso de exiftool para obtener información de los creadores de los documentos PDFs

Ahora filtraremos por los usuarios que se encuentran en los metadatos.

Validación de Usuarios
Haciendo uso de Kerbrute podremos validar los usuarios que encontramos en los metadatos de cada uno de los documentos PDFs.

Vemos que todos los usuarios son validos
Obtención de credenciales dentro de PDFs
Revisando el contenido de cada uno de los PDFs encotraremos unas credenciales

La credencial que encontramos es:
Ahora, con los usuarios que enumeramos en los documentos y haciendo uso de netexec podremos validar cada uno de los usuarios con la credencial
Encontramos un usuario Tiffany.Molina que es valido a través del servicio smb
Escalada de privilegios
Usuario : Tiffany.Molina
Teniendo las credenciales: Tiffany.Molina : NewIntelligenceCorpUser9876 podremos ver los recursos compartidos, antes intentamos ingresar con evil-winrm y no se pudo.

Revisando el contenido del directorio IT encontraremos un archivo de PowerShell que es downdetector.ps1.
Import-Module ActiveDirectory: Esta línea importa el módulo ActiveDirectory de PowerShell, lo que permite al script interactuar con el entorno de Active Directory.
foreach($record in Get-ChildItem ...): Este bucle foreach recorre todos los elementos hijos en la ubicación de Active Directory especificada que cumplen con el filtro proporcionado por
Where-Object. En este caso, filtra los elementos cuyo nombre comienza con "web".Invoke-WebRequest: Este cmdlet se utiliza para realizar solicitudes HTTP a los hosts obtenidos del Active Directory. Utiliza las credenciales predeterminadas del usuario que ejecuta el script (
-UseDefaultCredentials).if (.StatusCode -ne 200): Esta línea verifica si el código de estado de la respuesta HTTP no es 200 (OK). Si la respuesta no es 200, el script envía un correo electrónico informando que el host está fuera de línea.
Send-MailMessage: Este cmdlet se utiliza para enviar correos electrónicos utilizando PowerShell. Toma varios parámetros, como el remitente, el destinatario, el asunto y el cuerpo del correo electrónico.
Ahora que entendemos mejor que es lo que hace el script en powershell, lo que arremos sera agregar un registro dns que sera webSeven. Haciendo uso de dnstool.py podremos agregar, esta herramienta la encontraremos en krbrealyx

Luego iniciaremos el responder para interceptar credenciales que viajan a nivel de red

Luego de 5min podremos obtener un hash NTLMv2 que es craceable.
Haciendo uso de John th Ripper podremos lograr crackearlo
Usuario : Mr.Teddy
Luego de crackear tendremos las credenciales, con las que podremos enumerar en directorio activo y haciendo uso de bloodhound-python podremos enumerar y obtener los archivos para luego cargarlos al bloodHound

Podemos observar que el usuario Mr.Teddy pertenece al grupo ITSUPPORT, este tiene permisos de READGMSPassword sobre el usuario SVC_INT. El usuario svc_int tiene permisos de AllowedToDelegate contra el dominio
ReadGMSAPassword
Obtenemos el hash del servicies account del usuario svc_int
AllowedToDelegate
Para realizar el siguiente ataque podremos revisar el siguiente post Abusing Kerberos from linux.
Para ejecutar impacket-getST debemos obtener el SPN de la maquina victima y para ello usaremos Pywerview

Luego de obtener el SPN, podremos solicitar un Ticket (Silver Ticket) para así autenticarnos sin proporcionar contraseña

Vemos que tenemos un error, esto es debido a que la hora de nuestra maquina atacante debe estar sincronizada con la maquina victima.
Desincronizaremos nuestra maquina atacante virtualizada con nuestra maquina host con los siguientes comandos:
Luego sincronizaremos la maquina atacante con la victima.
Ahora volveremos a ejecutar y solicitar el Ticket

Luego veremos que obtuvimos un Ticket que se nos guardara como administrator.ccache. Ahora haremos uso de este para asignar a una variable KRB5CCNAME
Usuario : Administrator
Luego de asignar la variable KRB5CCNAME podremos autenticarnos con impacket-wmiexec

Last updated