Injection-BOF
Injection-BOF proporciona múltiples técnicas de inyección de shellcode en procesos remotos. Desde técnicas clásicas basadas en secciones hasta las avanzadas técnicas PoolParty que abusan del Thread Pool de Windows para evasión de EDR.
Agentes compatibles: Beacon, Gopher, Kharon | Plataforma: Windows
inject-cfg
Configura los parámetros por defecto para las operaciones de inyección. Estos valores se aplican a los demás comandos de inyección cuando no se especifican explícitamente.
inject-cfgPermite establecer valores predeterminados como el tipo de asignación de memoria, protecciones de página y otras opciones que afectan el comportamiento de la inyección.
Situación de uso: Ejecutar antes de una campaña de inyección para establecer parámetros óptimos según el entorno objetivo. Útil cuando se van a realizar múltiples inyecciones con la misma configuración.
inject-sec
Inyecta shellcode en un proceso remoto usando la técnica basada en secciones de memoria (NtCreateSection/NtMapViewOfSection). Esta técnica crea una sección de memoria compartida entre el proceso del agente y el proceso objetivo.
inject-sec <pid> <shellcode>| Argumento | Requerido | Descripción |
|---|---|---|
pid | Si | ID del proceso objetivo |
shellcode | Si | Shellcode a inyectar (ruta al archivo o datos inline) |
Ejemplos:
# Inyectar shellcode en el proceso con PID 3456
inject-sec 3456 /tmp/beacon_x64.bin
# Inyectar en un proceso de explorer.exe
inject-sec 1892 /tmp/payload.binSituaciones de uso:
- Migrar un agente a otro proceso para persistencia o evasión.
- Desplegar un agente adicional en un proceso con contexto de seguridad diferente.
- Técnica más simple y directa cuando no se requiere evasión avanzada de EDR.
Cómo funciona:
- Crea una sección de memoria compartida con NtCreateSection.
- Mapea la sección en el proceso local con permisos de escritura.
- Escribe el shellcode en la sección mapeada localmente.
- Mapea la sección en el proceso remoto con permisos de ejecución.
- Crea un hilo remoto que ejecuta el shellcode.
inject-poolparty
Inyección avanzada que abusa de los mecanismos internos del Thread Pool de Windows. Ofrece 8 técnicas diferentes, cada una con distintos niveles de evasión y compatibilidad. Estas técnicas son altamente evasivas contra la mayoría de soluciones EDR.
inject-poolparty <pid> <técnica> <shellcode>| Argumento | Requerido | Descripción |
|---|---|---|
pid | Si | ID del proceso objetivo |
técnica | Si | Número de técnica (1-8) |
shellcode | Si | Shellcode a inyectar |
Técnicas disponibles
| # | Nombre | Mecanismo | Descripción |
|---|---|---|---|
| 1 | Worker Factory | TP_WORK | Inserta un work item en la cola del thread pool del proceso objetivo. La técnica más confiable. |
| 2 | Timer | TP_TIMER | Abusa de los timers del thread pool para ejecutar el shellcode cuando el timer se dispara. |
| 3 | Wait | TP_WAIT | Registra un callback de espera en el thread pool que ejecuta el shellcode. |
| 4 | IO Completion | TP_IO | Usa puertos de IO completion para disparar la ejecución del shellcode. |
| 5 | ALPC | TP_ALPC | Abusa de los puertos ALPC (Advanced Local Procedure Call) del thread pool. |
| 6 | Job | TP_JOB | Utiliza objetos de trabajo (Job objects) para disparar la ejecución. |
| 7 | Direct | TP_DIRECT | Inserción directa en la cola del thread pool. Rápida pero más detectable. |
| 8 | Timer Alternativo | NtAssociateWaitCompletionPacket | Variante que usa NtAssociateWaitCompletionPacket para una ejecución más sigilosa. |
Ejemplos:
# Inyectar con técnica Worker Factory (más confiable)
inject-poolparty 4520 1 /tmp/beacon.bin
# Inyectar con técnica ALPC (más sigilosa)
inject-poolparty 4520 5 /tmp/beacon.bin
# Inyectar con técnica Timer alternativo
inject-poolparty 3112 8 /tmp/payload.binSelección de técnica:
| Prioridad | Técnica | Cuándo usar |
|---|---|---|
| Alta | 1 (Worker Factory) | Primera opción, más estable y confiable |
| Alta | 5 (ALPC) | Cuando se necesita máxima evasión |
| Media | 2 (Timer) | Alternativa sólida si 1 y 5 fallan |
| Media | 8 (Timer Alt) | Variante para entornos con EDR avanzado |
| Baja | 3-4, 6-7 | Usar si las técnicas principales son detectadas |
Situaciones de uso:
- Entornos con EDR avanzado donde técnicas tradicionales de inyección son detectadas.
- Migración de agente a un proceso de larga vida útil (explorer.exe, svchost.exe).
- Despliegue sigiloso de payloads adicionales.
Nota: Las técnicas PoolParty funcionan mejor con procesos que tienen un thread pool activo. Procesos como explorer.exe, svchost.exe y servicios de Windows son los mejores candidatos.
inject-32to64
Permite inyectar shellcode de 64 bits desde un proceso de 32 bits (transición WoW64). Resuelve el problema común de cuando el agente está ejecutándose en un proceso de 32 bits pero necesita interactuar con procesos nativos de 64 bits.
inject-32to64 <pid> <shellcode>| Argumento | Requerido | Descripción |
|---|---|---|
pid | Si | ID del proceso de 64 bits objetivo |
shellcode | Si | Shellcode de 64 bits a inyectar |
Ejemplos:
# Inyectar un beacon x64 desde un proceso x86
inject-32to64 2340 /tmp/beacon_x64.binSituaciones de uso:
- El agente inicial se ejecutó en un proceso de 32 bits (como una aplicación legacy o un macro de Office x86).
- Necesitas migrar a un proceso de 64 bits para acceder a APIs y memoria de 64 bits.
- Operaciones que requieren un contexto de 64 bits (dumping de LSASS, acceso al registro de 64 bits).
Integración con la interfaz gráfica
Injection-BOF se integra con el explorador de procesos de la interfaz gráfica de JustC2. Al hacer clic derecho en un proceso en el Process Browser, se muestra la opción de inyectar directamente, proporcionando una interfaz visual para seleccionar el proceso objetivo sin necesidad de conocer el PID manualmente.
Flujo de trabajo recomendado
- Usa
findobj module(Process-BOF) para encontrar procesos candidatos. - Configura la inyección con
inject-cfgsi es necesario. - Para entornos sin EDR o con EDR básico: usa
inject-sec. - Para entornos con EDR avanzado: usa
inject-poolpartycon técnica 1 o 5. - Si estás en un proceso de 32 bits y necesitas inyectar en 64 bits: usa
inject-32to64. - Verifica la inyección exitosa con
process conn(Process-BOF) para confirmar las conexiones del nuevo agente.