Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
p3-loader — P³-Shellcode Loader es un cargador que implementa una técnica de inyección de código que aprovecha la estructura Process Parameters como ubicación de ejecución y almacenamiento intermedio (staging) para la inyección de shellcode en procesos remotos, sin activar mecanismos comunes de detección. | Kitploit
Herramientas/GitHubGitHub/orange-cyberdefense/p3-loader
Herramientas DefensivasEscalada de PrivilegiosExplotaciónShellcodePost-ExplotaciónPruebas de PenetraciónPapers e InvestigaciónAprendizaje y EducaciónRed Teaming

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 →
Desarrollo de Payloads
Explotación de Binarios
GitHuborange-cyberdefense/p3-loader

p3-loader

Ver Repositorio
2042314hace 2 mesesRevisado por Kitploit

Acerca de

P³-Shellcode Loader es un cargador que implementa una técnica de inyección de código que aprovecha la estructura Process Parameters como ubicación de ejecución y almacenamiento intermedio (staging) para la inyección de shellcode en procesos remotos, sin activar mecanismos comunes de detección.

Compartir

P³-Shellcode Loader - Process Parameter Poisoning

Authors: Max Hirschberger & Ogulcan Ugur


Contenido

  1. Introducción
  2. Inyección de procesos típica y APIs de sistema implicadas
  3. Fundamentos técnicos de los Windows Internals necesarios
    • 3.1 API de creación de procesos y parámetros de arranque
    • 3.2 El Bloque de Entorno de Proceso (PEB)
  4. Process Parameter Poisoning (P³)
    • 4.1 Iniciar un proceso con un parámetro envenenado
    • 4.2 Localizar los datos inyectados en el nuevo proceso
    • 4.3 Ejecutar el código inyectado
    • 4.4 Inyecciones de payload implementadas
  5. Pasar shellcode arbitrario en una cadena
    • 5.1 Métodos auxiliares de bajo nivel utilizados por el generador de shellcode
    • 5.2 Implementación de operaciones de alto nivel
  6. Ventajas de la evasión de detección mediante esta técnica
  7. Enfoque de detección
  8. Conclusión
  9. Referencias

1. Introducción

P³-Shellcode Loader es un cargador que implementa una técnica de inyección de código que aprovecha la estructura Process Parameters (Process Parameter Poisoning) como ubicación de ejecución y almacenamiento intermedio para la inyección de shellcode en procesos remotos, sin desencadenar los mecanismos de detección habituales.

Un concepto similar fue descrito por el investigador de seguridad modexp, quien demostró que los argumentos pasados a la API CreateProcess se pueden aprovechar para este propósito [1].


2. Inyección de procesos típica y APIs de sistema implicadas

Los atacantes quieren que sus actividades parezcan menos sospechosas. Con la inyección de procesos, los atacantes pueden realizar sus actividades desde un proceso diferente que sea más confiable o del que se espera que realice la actividad específica, reduciendo así las sospechas.

Los siguientes son los pasos típicos necesarios para inyectar código en otro proceso:

  1. El atacante busca y abre un proceso objetivo o inicia un nuevo proceso (a través de OpenProcess / NtOpenProcess o CreateProcess / NtCreateProcess).
  2. Se asigna memoria para el código malicioso en el proceso objetivo (a través de VirtualAllocEx o NtAllocateVirtualMemory).
  3. El código malicioso se escribe en la nueva asignación (a través de WriteProcessMemory / NtWriteVirtualMemory).
  4. La protección de acceso a memoria se configura para permitir la ejecución del código malicioso (a través de VirtualProtectEx / NtProtectVirtualMemory).
  5. Se inicia un nuevo hilo en el proceso objetivo que ejecuta el código malicioso (a través de CreateRemoteThread o NtCreateThreadEx).

Las técnicas de inyección adicionales incluyen, entre otras, las siguientes:

  • Thread Hijacking: En lugar de crear un nuevo hilo, se redirige uno existente (a través de NtSetContextThread)
  • Early-Bird APC-Injection: Utiliza Llamadas a Procedimientos Asíncronos (APCs) para redirigir la ejecución de un hilo existente (a través de NtQueueApcThread)
  • Dirty Vanity: Abusa de la API de Windows RtlCreateProcessReflection, que implementa la bifurcación de procesos. En nuestras pruebas, observamos que la mayoría de los EDR se centran en telemetría específica para detectar la inyección de procesos. Los EDR monitorean principalmente el uso de WriteProcessMemory y VirtualAllocEx, así como sus llamadas al sistema del kernel subyacentes NtWriteVirtualMemory, NtAllocateVirtualMemory y NtAllocateVirtualMemoryEx.

3. Fundamentos técnicos de los Windows Internals necesarios

3.1 API de creación de procesos y parámetros de arranque

Windows proporciona la función de API CreateProcessW para crear nuevos procesos, como se muestra en el Listado 1. Los tres primeros parámetros de dicha función, lpCommandLine, lpEnvironment y lpStartupInfo, son relevantes para la técnica de inyección descrita, ya que se utilizan para transferir datos al nuevo proceso.```c BOOL CreateProcessW( [in, optional] LPCWSTR lpApplicationName, [in, out, optional] LPWSTR lpCommandLine, [in, optional] LPSECURITY_ATTRIBUTES lpProcessAttributes, [in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes, [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags, [in, optional] LPVOID lpEnvironment, [in, optional] LPCWSTR lpCurrentDirectory, [in] LPSTARTUPINFOW lpStartupInfo, [out] LPPROCESS_INFORMATION lpProcessInformation );

*Listado 1: Definición de la función CreateProcessW de Windows API*
 
El parámetro `lpCommandLine` especifica la línea de comandos para el nuevo proceso. Está limitado a un máximo de 32,767 caracteres Unicode, incluido el terminador nulo Unicode. Para la variante Unicode, es necesario proporcionar una cadena en la que la función pueda escribir. Si se suministra una cadena constante, cualquier intento de escritura realizado por la función de la API provoca una violación de acceso a memoria. Si el valor es `NULL`, la línea de comandos del proceso se tomará del parámetro `lpApplicationName`. Si `lpApplicationName` es `NULL`, debe proporcionarse en el campo `lpCommandLine` y está limitado a caracteres `MAX_PATH`.
 
El parámetro `lpEnvironment` proporciona una lista de variables de entorno al proceso. Si el valor es `NULL`, se utilizará el entorno del proceso creador. La lista de variables de entorno consta de cadenas sucesivas terminadas en nulo con el formato `NAME=VALUE` y otro terminador nulo al final.
 
El parámetro `lpStartupInfo` es una estructura que se muestra en el Listado 2, con campos como estación de ventana, escritorio, identificadores de entrada y salida estándar, así como campos que configuran la ventana principal del nuevo proceso. Según la documentación de Microsoft, el campo `lpReserved` está reservado para uso interno y no se documenta más. Mediante el análisis con el depurador WinDbg, fue posible relacionar este parámetro con la variable `ShellInfo` de tipo `UNICODE_STRING` en el nuevo proceso.```c
typedef struct _STARTUPINFOW {
    DWORD  cb;
    LPWSTR lpReserved;   // Copied to ShellInfo (UNICODE_STRING)
    LPWSTR lpDesktop;
    LPWSTR lpTitle;
    DWORD  dwX;
    DWORD  dwY;
    DWORD  dwXSize;
    // (...) additional fields
    WORD   wShowWindow;
    WORD   cbReserved2;
    LPBYTE lpReserved2;
    HANDLE hStdInput;
    // (...) additional fields
} STARTUPINFOW, *LPSTARTUPINFOW;

Listado 2: Disposición de la estructura de datos STARTUPINFOW

3.2 El Bloque de Entorno del Proceso (PEB)

Descargar herramienta