Impacket pruebas de penetración en entornos Active Directory y Windows
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 privilegiosSYSTEMmediante 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.dity 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):
impacket-wmiexec dominio.local/usuario:'contraseña'@192.168.1.50
2. Obtener shell remoto pasando el hash NTLM (Pass-the-Hash):
impacket-psexec -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 dominio.local/administrador@192.168.1.50
3. Volcar los hashes ntds.dit de un Controlador de Dominio:
impacket-secretsdump -just-dc-ntlm dominio.local/administrador:'contraseña'@192.168.1.10
4. Buscar cuentas vulnerables a Kerberoasting y guardar hashes:
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):
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.
¿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:
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.
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
SMB Signing deshabilitado en las máquinas destino (o no requerido), lo cual es la configuración por defecto en estaciones de trabajo Windows.
Que la cuenta víctima cuyo tráfico interceptas tenga permisos de Administrador Local en el equipo destino donde haces el relay.
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).
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:
-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:NTHASHo 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 cuentakrbtgt).-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 archivontds.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:
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:
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:
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:
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:
impacket-wmiexec -hashes :c83893e43343a411516f4ef68e82a613 dominio.local/administrador@192.168.1.10
Resumen de sintaxis completa
| Bandera / Opción | Descripción |
-hashes LM:NT | Permite la autenticación usando Pass-the-Hash. |
-just-dc-ntlm | Filtra 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-vss | Forzado de extracción mediante Shadow Copy en lugar de DRSUAPI. |