bookAttacktive Directory

Antes de iniciar este recorrido práctico y explorar algunas de las herramientas clave para el pentesting en entornos Kerberos y Active Directory, te recomiendo leer el siguiente artículo, donde explico en detalle cómo funciona el proceso de autenticación en Kerberos y cuáles son los principales componentes que intervienen en él.

Enumeración de puertos/servicios

La primera tarea que se nos propone en esta sala es enumerar los puertos abiertos y servicios disponibles con nmap, para ello usaré el siguiente comando.

┌──(root㉿kali)-[/home/kali/Documents/THM/AttacktiveDirectory]
└─# nmap -sCV --open -T4 -v -n 10.10.86.78 
chevron-right📌Parámetros hashtag
  • -sCV:

    • -sC: Ejecuta scripts de detección predeterminados → Usa los scripts de nmap ubicados en /usr/share/nmap/scripts/, los cuales buscan información adicional en los puertos abiertos.

    • -sV: Detección de versiones → Intenta identificar el software y su versión en los puertos abiertos.

  • -n: No resuelve nombres de dominio (reduce el tiempo del escaneo).

  • --open: Muestra solo puertos abiertos → Filtra la salida para no mostrar puertos cerrados o filtrados.

  • -T4: Ajusta la velocidad del escaneo → T4 es un nivel "agresivo" que acelera el escaneo, útil en redes rápidas.

  • -v: Modo verbose → Muestra más detalles sobre el progreso del escaneo.

Resultados:

PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
80/tcp   open  http          Microsoft IIS httpd 10.0
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
|_http-title: IIS Windows Server
|_http-server-header: Microsoft-IIS/10.0
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-05-25 23:38:06Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name)
445/tcp  open  microsoft-ds?
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  tcpwrapped
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: spookysec.local0., Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
3389/tcp open  ms-wbt-server Microsoft Terminal Services
| ssl-cert: Subject: commonName=AttacktiveDirectory.spookysec.local
| Issuer: commonName=AttacktiveDirectory.spookysec.local
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2025-05-24T23:24:40
| Not valid after:  2025-11-23T23:24:40
| MD5:   20a8:780f:6d35:a961:bdda:553b:7460:9607
|_SHA-1: fa13:cd56:cb24:9db8:9e54:d703:fdba:cf20:3ce2:4ff9
| rdp-ntlm-info: 
|   Target_Name: THM-AD
|   NetBIOS_Domain_Name: THM-AD
|   NetBIOS_Computer_Name: ATTACKTIVEDIREC
|   DNS_Domain_Name: spookysec.local
|   DNS_Computer_Name: AttacktiveDirectory.spookysec.local
|   Product_Version: 10.0.17763
|_  System_Time: 2025-05-25T23:38:20+00:00
|_ssl-date: 2025-05-25T23:38:29+00:00; -9m06s from scanner time.
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: Host: ATTACKTIVEDIREC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: mean: -9m06s, deviation: 0s, median: -9m06s
| smb2-time: 
|   date: 2025-05-25T23:38:21
|_  start_date: N/A

En síntesis:

Del resultado que nos dio nmap destacamos lo siguiente:

  • Servicios de Active Directory identificados:

    • LDAP (389, 3268) y LDAPS (probablemente 636, 3269): usados para autenticación y replicación de objetos del dominio.

    • Kerberos (88, 464): servicio central de autenticación en AD.

    • DNS (53): gestión del namespace del dominio.

    • RPC/MSRPC (135, 593): comunicación entre controladores de dominio.

    • SMB (445, 139): posible vector para enumeración o explotación (ej. EternalBlue).

    • RDP (3389): acceso remoto a la máquina; necesita validación de control de acceso y cifrado.

    • WinRM (5985): canal de administración remota; verificar políticas de autenticación y uso.

  • Información del dominio:

    • Dominio: spookysec.local

    • Nombre NetBIOS: THM-AD

    • Nombre de equipo: ATTACKTIVEDIREC

    • Sistema operativo: Windows Server (versión 10.0.17763 — Server 2019)

    • Sincronización de hora: desajuste de -9 minutos entre el sistema y el escáner; importante porque afecta la validez de tokens Kerberos

Agregamos el domain name al /etc/hosts de kali para evitar el problema del virtual host

Enumerando usuarios via kerberos o Pre-Authentication Abuse

La siguiente tarea consta en aprovechar el puerto 88 (kerberos) para enumerar usuarios con dos diccionarios que nos facilitan desde la plataforma: Users.txtarrow-up-right y Passwords.txtarrow-up-right Para realizar esta enumeración vamos a utilizar Kerbrute con los siguientes parámetros:

AS-REP Roasting

En el apartado 5 se nos propone realizar una poc de una técnica de explotación conocida como AS-REP Roasting, pero antes de pasar a la shell entendamos como funciona este ataque: En una implementación estándar de Kerberos, el proceso de autenticación inicia cuando el usuario envía una solicitud de Ticket Granting Ticket (TGT) al Key Distribution Center (KDC). Como medida de seguridad, Kerberos requiere que el cliente se autentique previamente mediante un mecanismo conocido como pre autenticación. Esto implica que el cliente debe cifrar un timestamp con su clave derivada de la contraseña antes de que el KDC procese su solicitud.

Sin embargo, si una cuenta de usuario tiene la pre autenticación deshabilitada, el KDC no exige esta verificación inicial. En cambio, responde directamente con un mensaje denominado AS-REP (Authentication Service Reply), que contiene datos cifrados utilizando una clave derivada de la contraseña del usuario solicitante.

Lo que hace funcional a este ataque es que el formato del mensaje AS-REP es conocido y predecible, permitiéndonos comprobar la validez de cada intento de descifrado sin necesidad de interactuar nuevamente con el controlador de dominio. Esto reduce significativamente el riesgo de detección y permite ataques prolongados sin levantar alertas.

En el siguiente ejercicio vamos a reutilizar el comando de la tarea anterior para enumerar usuarios con Kerbrute. Los hashes generados se guardarán en un archivo llamado as-rep_hash, que luego será utilizado como input por John the Ripper para intentar descifrarlos mediante fuerza bruta con el diccionario rockyou.txt.

Otra opción para extraer los hashes de los usuarios es usando impacket-GetNPUsers con el siguiente comando

chevron-right📌Parámetros hashtag

Kerbrute

  • kerbrute userenum: ejecuta la funcionalidad de enumeración de usuarios de la herramienta Kerbrute.

  • --dc 10.10.86.78: especifica la dirección IP del Domain Controller objetivo.

  • --domain spookysec.local: indica el nombre del dominio contra el cual se realizará la enumeración.

  • userlist.txt: archivo que contiene la lista de nombres de usuario a verificar.

  • --downgrade: fuerza el uso de una versión compatible del protocolo para evitar ciertos mecanismos de protección.

  • --hash-file as-rep_hash: guarda las respuestas AS-REP obtenidas en un archivo, útil para ataques posteriores (por ejemplo, crackeo offline).

impacket-GetNPUsers

  • spookysec.local/: dominio objetivo en el que se buscarán las cuentas vulnerables.

  • -dc-ip 10.10.86.78: IP del Domain Controller contra el cual se realiza la consulta.

  • -usersfile userlist.txt: archivo que contiene la lista de usuarios que se van a probar.

  • -format john: formatea la salida para ser compatible con la herramienta John the Ripper.

  • -outputfile hashes.txt: archivo donde se almacenarán los hashes extraídos.

Siguiendo con el módulo/sala, la tarea 6 nos propone usar las credenciales que obtuvimos anteriormente para continuar con la fase de explotación que consiste en ganar acceso no autorizado a un sistema, servicio o recurso. Como ya contamos con las siguientes credenciales svc-admin:management2005 lo siguiente que vamos a realizar ahora es validar estas contraseñas contra distintos servicios para ver a cuales tenemos acceso. Para automatizar esta tarea desarrolle un pequeño script en bash que lo podes descargar de mi repositorio service_validationarrow-up-right.

El resultado nos indica que podemos utilizar las credenciales con smb, ldap y rdp. Iniciando con smb podemos probar la tool smbmap para enumerar permisos y recursos de la siguiente manera:

Encontramos el directorio backup con el permiso de lectura habilitado, para inspeccionar su contenido vamos a conectarnos al smb con smbclient

Encontramos el archivo backup_credentials.txt y al descargarlo lo podemos leer y ver una cadena codificada en base64. Para decodificar esta cadena podemos usar herramientas online como Cyberchef o simplemente lo decodificamos desde nuestra shell con el siguiente comando:

Y de esta forma obtuvimos nuevas credenciales backup:backup2517860.

DCSync Attack con impacket-secretsdump o secret replication con DRSUAPI

chevron-right📌DCSync: Exfiltración de credenciales mediante replicación de directoriohashtag

El ataque conocido como DCSync es una técnica avanzada que permite a un atacante extraer credenciales del dominio simulando el comportamiento de un controlador de dominio legítimo. Esta técnica explota el protocolo de replicación que utiliza Active Directory para mantener sincronizadas las bases de datos entre los distintos controladores de dominio. Mediante el uso de llamadas al servicio DRSUAPI, que forma parte del mecanismo de replicación de directorio, un atacante con los privilegios adecuados puede solicitar al controlador de dominio los secretos almacenados en el archivo NTDS.dit, incluyendo hashes LM/NTLM y claves Kerberos.

El archivo NTDS.dit constituye un componente esencial del servicio de Active Directory, ya que contiene la base de datos que almacena todos los objetos del dominio, sus atributos y, de forma especialmente sensible, los hashes de contraseñas de usuario. Esta base de datos se encuentra en todos los controladores de dominio y es replicada periódicamente para garantizar la integridad y consistencia del entorno. Para facilitar esta sincronización, Active Directory implementa un conjunto de protocolos y servicios entre los que se destaca DRSUAPI (Directory Replication Service Remote Protocol API), una interfaz de llamada a procedimiento remoto (RPC) desarrollada por Microsoft que permite la replicación remota de objetos de directorio entre controladores de dominio.

DCSync aprovecha este comportamiento legítimo del protocolo para solicitar, de forma remota, los secretos del dominio sin necesidad de acceder físicamente al archivo NTDS.dit. Para llevar a cabo este ataque, es necesario contar con credenciales válidas que posean permisos específicos dentro del dominio, tales como la capacidad de replicar cambios en el directorio. Por defecto, estos permisos están asignados a grupos altamente privilegiados como Domain Admins, Administrators o Enterprise Admins. No obstante, dichos privilegios también pueden ser delegados de manera explícita a otras cuentas, lo cual amplía significativamente la superficie de ataque en entornos mal configurados.

Una de las herramientas más utilizadas para ejecutar esta técnica es impacket-secretsdump, perteneciente a la suite Impacket. Al invocar esta herramienta con el parámetro -just-dc, el atacante puede solicitar directamente al controlador de dominio el contenido crítico de la base de datos NTDS.dit utilizando la funcionalidad de replicación. El resultado incluye hashes de contraseñas (LM y NTLM) de todas las cuentas del dominio, así como las claves Kerberos asociadas a cada usuario, incluyendo las del usuario krbtgt, cuya manipulación permite generar tickets dorados (Golden Tickets) y mantener acceso persistente y privilegiado dentro del entorno.

El impacto de este ataque es crítico, ya que brinda acceso completo a todas las credenciales del dominio, habilita técnicas como pass-the-hash y pass-the-ticket, y permite la creación de mecanismos de persistencia difíciles de detectar. Además, dado que no requiere la ejecución de código en el controlador de dominio comprometido, puede ejecutarse de manera silenciosa y pasar desapercibido si no se dispone de mecanismos de monitoreo adecuados para detectar solicitudes de replicación anómalas.

La siguiente tarea que se nos propone es utilizar impacket-secretsdump para recuperar todos los hashes de contraseñas, incluido el de la cuenta "backup".

Pass-the-Hash

El ataque Pass-the-Hash consiste en capturar el hash NTLM de un usuario y utilizarlo directamente para autenticarse en servicios Windows que admiten este tipo de autenticación. El atacante no necesita descifrar el hash ni conocer la contraseña original. Este ataque aprovecha el hecho de que, en muchos entornos Windows, los hashes NTLM son aceptados por servicios como SMB, WMI, WinRM o RDP como sustituto válido de la contraseña.

Esto es posible porque el proceso de autenticación NTLM, en versiones anteriores a Kerberos o en ciertos contextos específicos, verifica el hash y no la contraseña en texto plano. Por lo tanto, si un atacante tiene acceso al hash, puede usar herramientas como psexec, wmiexec, evil-winrm o smbclient para iniciar sesión en sistemas remotos como si fuera el usuario legítimo.

Este tipo de ataque es común luego de obtener los hashes de la base de datos SAM, NTDS.dit, o mediante herramientas como mimikatz o secretsdump.

La última tarea que del módulo consiste en reutilizar el hash del administrador que obtuvimos con impacket-secretsdump y aplicarlo con Evil-WinRM o con impacket-psexec y conectarnos al equipo mediante el servicio winrm

Diferencias entre Pass the Hash y Pass the Ticket:

  • Tipo de credencial reutilizada: Pass-the-Hash usa hashes NTLM, mientras que Pass-the-Ticket usa tickets Kerberos (TGT/TGS).

  • Protocolo atacado: Pass-the-Hash se basa en NTLM, Pass-the-Ticket se basa en Kerberos.

  • Escenario de uso típico: Pass-the-Hash es útil en redes que aún permiten NTLM (por compatibilidad). Pass-the-Ticket se usa en redes modernas con autenticación Kerberos predominante.

  • Herramientas comunes: Para PtH: secretsdump.py, mimikatz, psexec, evil-winrm. Para PtT: mimikatz, kerberos::ptt, Rubeus.

Para ver cómo funciona la modalidad de ataque Pass the Ticket ir al módulo Attacking Kerberos

Last updated