Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
BOF_RunPe — BOF para ejecutar PE en Cobalt Strike Beacon sin crear consola | Kitploit
Herramientas/GitHubGitHub/ntdallas/bof_runpe
Forensia de MemoriaShellcodePost-ExplotaciónRed Teaming
GitHubntdallas/bof_runpe

BOF_RunPe

BOF para ejecutar PE en Cobalt Strike Beacon sin crear consola

Ver Repositorio
20025hace 9 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

BOF_RunPE

BOF RunPE es un archivo de objeto Beacon (BOF) para Cobalt Strike que ejecuta archivos PE completamente en memoria dentro del proceso del beacon. A diferencia del tradicional fork&run, no se crea ningún proceso hijo, no se crea ninguna consola y no se utiliza ninguna tubería (pipe); toda la salida se captura mediante el hooking de la IAT y se redirige a la consola del beacon.

Arquitectura: solo x64

Descripción general

root@kitploit:~
┌──────────────────────────────────────────────────────────────┐
│                   Cobalt Strike Beacon                       │
│                    (Current Process)                         │
└────────────────────────┬─────────────────────────────────────┘
                         │
                         │  beacon_inline_execute()
                         │
                         ▼
┌──────────────────────────────────────────────────────────────┐
│                    BOF RunPE                                 │
│  ┌────────────────────────────────────────────────────────┐  │
│  │  VxTable + Draugr Initialization                       │  │
│  │  (Syscall Resolution + Stack Spoofing)                 │  │
│  └──────────────────────┬─────────────────────────────────┘  │
│                         │                                    │
│  ┌──────────────────────▼─────────────────────────────────┐  │
│  │  PE Mapping                                            │  │
│  │  - Section Copy    - IAT Patching (with hooks)         │  │
│  │  - Relocations     - Memory Protection                 │  │
│  └──────────────────────┬─────────────────────────────────┘  │
│                         │                                    │
│  ┌──────────────────────▼─────────────────────────────────┐  │
│  │  Thread Execution                                      │  │
│  │  - Spoofed Start Address                               │  │
│  │  - RIP Hijacking to Entry Point                        │  │
│  │  - Output Redirection via Hooks                        │  │
│  └────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────┘

Características principales

  • Sin creación de procesos: el PE se ejecuta dentro del proceso del beacon
  • Sin consola/tubería: salida capturada mediante hooks de printf/WriteConsole
  • Múltiples métodos de asignación: Heap, VirtualAlloc, Module Stomping
  • Carga mediante proxy: Timer Queue, RegisterWait o llamadas directas
  • Ntdll Unhooking: copia nueva opcional desde el disco
  • RWX : opcional asignar memoria en RWX
  • Thread Start Spoofing: dirección de inicio legítima con secuestro de RIP (RIP hijacking)

Opciones de configuración

El comportamiento del BOF se puede editar en Additionals postex -> RunPe Config

BOF personalizado

Métodos de proxy

MétodoDescripción
NoneLlamadas directas a la API
DraugrLlamadas a la API con la pila falsificada (stack spoofing)

Métodos de asignación

MétodoDescripción
HeapHeap privado mediante RtlCreateHeap con Draugr
VirtualAllocNtAllocateVirtualMemory con Draugr
Module stompingSobrescribe la sección .text de una DLL legítima

Opciones generales

Opción

Spoofing de hilos

OpciónDescripción
ModuleNameMódulo legítimo para la dirección de inicio (p. ej., Kernel32.dll)
ProcedureName

Captura de salida

Toda la salida del PE se redirige a la consola del beacon mediante hooks de la IAT. No se crea ninguna ventana de consola ni tubería con nombre (named pipe).

Técnicas de evasión

Vectores de detección

Telemetría del kernel (ETW-TI)

NtGetContextThread / NtSetContextThread:

  • Manipulación del contexto de hilos suspendidos y posterior reanudación

Operaciones de memoria:

  • Asignación de NtAllocateMemory, puede ser en RWX (depende de la configuración)
  • Transiciones de NtProtectVirtualMemory (RW → RX)
  • La memoria ejecutable en regiones del heap es sospechosa (depende de la configuración)
  • Module stomping detectable mediante discrepancia de hash de sección (depende de la configuración)

Indicadores de comportamiento

  • Hilo suspendido creado, se toma el contexto y luego se cambia el valor de RIP
  • Memoria del heap marcada como ejecutable (si el asignador de memoria es heap)
  • DLL cargada con DONT_RESOLVE_DLL_REFERENCES (si el asignador de memoria es module stomping)
  • Sección .text de ntdll modificada (si el unhooking está habilitado)

Uso

Carga del script

root@kitploit:~
Cobalt Strike → Script Manager → Load → BOF_RunPe.cna

Comandos de Aggressor

root@kitploit:~
beacon> runpe /path/to/binary.exe --arg1 value1

Mimikatz

root@kitploit:~
beacon> help runpe

Ayuda

Compilación

Requiere GCC 13 (mingw-w64). Utilice el Dockerfile proporcionado:

root@kitploit:~
sudo docker build -t ubuntu-gcc-13 .
sudo docker run --rm -it -v "$PWD":/work -w /work ubuntu-gcc-13:latest make

Salida: Bin/runpe.o

Limitaciones

LimitaciónDescripción
CETLa tecnología Control-flow Enforcement Technology puede bloquear los marcos de pila sintéticos

Créditos / Recursos utilizados para el desarrollo

Repos / entradas de blog

  • https://github.com/susMdT/LoudSunRun
  • https://github.com/Octoberfest7/Inline-Execute-PE
  • https://www.coresecurity.com/core-labs/articles/running-pes-inline-without-console
  • https://0xdarkvortex.dev/proxying-dll-loads-for-hiding-etwti-stack-tracing/

Libros

  • Windows Native API Programming de Pavel Yosifovich
  • Windows Internals, Part 1 de Pavel Yosifovich
  • Windows Internals, Part 2 de Andrea Allievi
Descargar herramienta
RegwaitDevolución de llamada (callback) de RegisterWaitForSingleObject
TimerDevolución de llamada de Timer Queue
Descripción
AllocRWXAsignar como RWX (frente a la transición RW→RX)
UnhookNtdllReemplazar la sección .text de ntdll.dll con una copia nueva del disco
TimeoutTiempo de espera de ejecución en milisegundos (0 = infinito)
StompModuleRuta de la DLL para module stomping (p. ej., chakra.dll)
Nombre de la función dentro del módulo (p. ej., BaseThreadInitThunk)
OffsetDesplazamiento desde el inicio de la función
Función enganchadaDestino
GetCommandLineA/WDevuelve argumentos falsificados
__getmainargs / __wgetmainargsInicialización de argumentos CRT
printf / wprintfRedirección a BeaconPrintf
WriteConsoleA/WRedirección a BeaconPrintf
__stdio_common_vfprintfFunciones de impresión UCRT
ExitProcess / exitConvertido en ExitThread
TécnicaBypass
Syscalls indirectosHooks de API en modo usuario (EDR/AV)
Draugr Stack SpoofingInspección de la pila de llamadas
Thread Start SpoofingAnálisis de la dirección de inicio del hilo
Module StompingDetección de memoria sin respaldo (unbacked)
Private Heap AllocationMonitorización de VirtualAlloc
Ntdll UnhookingSobrescribir la ntdll en memoria con la ntdll del disco
IAT Hooking (sin tuberías)Monitorización de tuberías con nombre (named pipes)
Solo x64Sin soporte para x86/WoW64
Visibilidad del kernelLa creación de hilos es visible para las devoluciones de llamada del kernel
.NETNo se admiten ejecutables administrados