
Ejecutar ejecutables de Windows no administrados en Balizas de CobaltStrike
Inline-Execute-PE es un conjunto de archivos objeto de Beacon (BOF) y un script Aggressor para CobaltStrike que permite a los Operadores cargar ejecutables de Windows no administrados en la memoria de Beacon y ejecutarlos, recuperando la salida y mostrándola en la consola de Beacon.
Esto permite a los Operadores usar muchas herramientas de terceros (Mimikatz, Dsquery, herramientas de Sysinternals, etc.) sin necesidad de descargarlas a disco, reformatearlas como código independiente de posición usando una herramienta como Donut, o crear un nuevo proceso para ejecutarlas.
Estos ejecutables se asignan en la memoria de Beacon para que puedan ejecutarse repetidamente sin necesidad de enviarlos a través de la red, asignar nueva memoria y crear un nuevo proceso conhost.exe cada vez.
Los ejecutables cargados en los Beacons son accesibles y pueden ser ejecutados por todos los clientes de CobaltStrike conectados al servidor de equipo de CobaltStrike.
Inline-Execute-PE fue diseñado para Beacons x64 y ejecutables de Windows x64 en C o C++ compilados con Mingw o Visual Studio. Este proyecto no soporta ejecutables x86 ni ejecutables x64 escritos en otro lenguaje o compilados con un compilador diferente.

Clone el repositorio y, opcionalmente, ejecute make para recompilar los BOF.
Cargue Inline-Execute-PE.cna en el cliente de CobaltStrike. Asegúrese de que el directorio desde el que se ejecuta CobaltStrike sea escribible por su usuario; Inline-Execute-PE crea un archivo de texto allí (petable.txt) para garantizar la disponibilidad de los datos necesarios para que Inline-Execute-PE funcione.
Inline-Execute-PE consta de 3 comandos orientados al objetivo que ejecutan BOF y 3 comandos internos que manipulan la estructura de datos del proyecto:
Orientados al objetivo:
Estructura de datos interna:
peload es el inicio de Inline-Execute-PE. Este comando se utiliza para cargar un PE en la memoria de Beacon. Realiza las siguientes acciones principales:
perun es el segundo paso en Inline-Execute-PE. Realiza las siguientes acciones principales:
peunload se llama para eliminar el PE de la memoria de Beacon cuando un Operador termina con él o desea cargar un PE diferente. Realiza las siguientes acciones principales:
petable se utiliza para mostrar información sobre todos los PE cargados actualmente en los Beacons.
Cada cliente de CobaltStrike tiene su propio petable; Inline-Execute-PE hace grandes esfuerzos para garantizar la sincronización de sus datos entre todos los clientes de CobaltStrike conectados para que los PE puedan ser utilizados por todos los Operadores. Para más información, consulte "Consideraciones de diseño y comentarios".

peconfig se utiliza para configurar opciones relacionadas con el funcionamiento de Inline-Execute-PE. Las dos opciones actuales que se pueden modificar son:
pebroadcast se puede usar para transmitir manualmente el contenido del petable de un Cliente a todos los demás clientes de CobaltStrike conectados.
Cada otro cliente de CobaltStrike actualizará su petable con los datos transmitidos. Esto nunca debería ser realmente necesario, pero la característica existe por si acaso.
Use peload para cargar un PE en la memoria de Beacon

Alternativamente, si hay un PE en la máquina objetivo que desea usar sin crear un nuevo proceso, proporcione la ruta y el conmutador --local

Llame a perun, pasando cualquier argumento al PE cargado

Las comillas dobles en los argumentos deben escaparse con barras invertidas

Si ha identificado que un PE causa problemas al intentar liberar DLL durante la descarga, use peconfig para establecer unloadlibraries en false

Una vez que haya terminado de usar un PE, llame a peunload para limpiarlo de Beacon

Ahora se puede cargar un PE diferente en el Beacon
