
Kit de Cobalt Strike para Movimiento Lateral
Movekit es una extensión del movimiento lateral integrado de Cobalt Strike que aprovecha la función execute_assembly con los ensamblados .NET SharpMove y SharpRDP. El script agresor maneja la creación de payloads leyendo los archivos de plantilla para un tipo de ejecución específico.
IMPORTANTE: Para usar el script, el usuario solo necesita cargar el script agresor MoveKit.cna, que cargará todos los demás scripts necesarios. Además, dependiendo de las acciones realizadas, los ensamblados SharpMove y SharpRDP deberán compilarse y colocarse en el directorio Assemblies. Finalmente, algunos movimientos de archivos requieren compilación dinámica, lo que requerirá Mono.
Al cargar el script agresor, se cargará un selector en la menubar llamado Move. Hay múltiples selecciones que el usuario puede elegir. Primero, los usuarios pueden seleccionar ejecutar un comando en un sistema remoto a través de WMI, DCOM, Programador de tareas, RDP o SCM. Segundo, está el mecanismo de ejecución Command que utiliza cradles de descarga para obtener y ejecutar los archivos. Tercero, el método File coloca un archivo en el sistema y lo ejecuta. Existe Write File Only que no realiza ninguna ejecución, solo mueve datos. Finalmente, hay una configuración para hacer más rápido el uso de la GUI y se usa con comandos de beacon. Las configuraciones predeterminadas se usan para cualquier cosa que pueda aceptar un valor por defecto.
DefaultPara usar los comandos de beacon, leerá la configuración predeterminada y usará algunos argumentos de línea de comandos. Un ejemplo de comando beacon:
<exec-type> <target> <listener> <filename>
move-msbuild 192.168.1.1 http move.csproj
Adicionalmente, el comando beacon preconstruido personalizado es un poco diferente. Ejemplo de comando:
move-pre-custom-file <target> <local-file> <remote-filename>
move-pre-custom-file computer001.local /root/payload.exe legit.exe
El campo de ubicación es la parte más complicada del proyecto. Al seleccionar el movimiento de archivos WMI, se usará location; si se selecciona SMB, no se usará (por lo que se puede dejar vacío). Location toma tres valores diferentes. Primero, si location es una URL, cuando se cree el payload, será alojado por el servidor web de Cobalt Strike. El host beacon desde el que se ejecutará el ensamblado hará una solicitud web a la URL y obtendrá el archivo, que se usará en un subevento en el host de destino para escribir el archivo. Segundo, si location es un directorio de Windows, subirá el archivo creado al host beacon y el ensamblado lo leerá del sistema de archivos y lo almacenará en el subevento para escribirlo en el host remoto. Finalmente, si el campo location es una ruta de Linux o la palabra local, entonces compilará dinámicamente el payload en el ensamblado que se está ejecutando. Sin embargo, si el archivo supera el límite de tamaño de 1MB, mostrará un error.
Para todos los métodos de archivo, el payload se creará a través del script agresor. Sin embargo, si ya se ha creado un payload, los usuarios pueden seleccionar la opción Custom (Prebuilt) para moverlo y ejecutarlo.
El kit contiene diferentes técnicas de movimiento de archivos, disparadores de ejecución y tipos de payload.
El movimiento de archivos se considera el método utilizado para llevar un archivo a un host remoto. Tipos de movimiento de archivos:
El disparador de comando se considera el método utilizado para ejecutar un comando específico en un host remoto. Tipos de disparadores de comando:
Ejecución solo de shellcode:
Secuestros:
Para reemplazar una plantilla, debe cumplir dos requisitos. Primero, la plantilla debe llamarse como la técnica (ejemplo: msbuild.csproj). Segundo, el código fuente debe contener la cadena $$PAYLOAD$$ donde irá el shellcode codificado en base64 y debe poder convertir una cadena base64 a un arreglo de bytes. Ejemplo para C#:
string strSC = "$$PAYLOAD$$";
byte[] sc = Convert.FromBase64String(strSC);
Se agregó un cambio que permite que los valores predeterminados actualicen la 'Cadena de buscar y reemplazar' y los formatos de shellcode en el 'diálogo de actualizar valores predeterminados'. Por defecto, estos son $$PAYLOAD$$ y base64.
execute-assembly de Cobalt Strike, por lo que se inyectará en un proceso de sacrificio como otros trabajos posteriores a la explotaciónFile o CommandParte del código, las plantillas o la inspiración provienen de otras personas y proyectos
Probablemente haya errores en algún lado, tienden a aparecer de vez en cuando. Solo menciónalos y los arreglaré