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
RpcProxyInvoke — Librería POC simple para ejecutar llamadas arbitrarias haciendo proxy de ellas a través de NdrServerCall2 o similar. | Kitploit
Herramientas/GitHubGitHub/klezvirus/rpcproxyinvoke
Escalada de PrivilegiosExplotaciónMovimiento LateralShellcodePost-ExplotaciónPruebas de PenetraciónComando y ControlRed TeamingHerramienta de Acceso RemotoDesarrollo de PayloadsExplotación de Binarios
13917hace 2 añosRevisado 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
GitHub
klezvirus/rpcproxyinvoke

RpcProxyInvoke

Librería POC simple para ejecutar llamadas arbitrarias haciendo proxy de ellas a través de NdrServerCall2 o similar.

Ver Repositorio

RpcProxyInvoke

Descripción general

Para crear una forma genérica de ejecutar código local y remoto, diseñamos un método de ejecución de código relativamente oscuro, al que internamente nos referimos como RpcCraft (Self) y RpcExec (Remote Process). Esta técnica aprovecha una metodología bien conocida entre los desarrolladores de exploits: abusar de las llamadas de servidor RPC (Remote Procedure Call), como NdrServerCall2 o NdrServerCallAll, para ejecutar código arbitrario.

Abusando de las llamadas de servidor para la ejecución

Dentro de RPCRT4.dll, funciones como NdrServerCall2, NdrServerCallAll y NdrServerCallNdr64 (un alias de NdrServerCallAll) están implementadas como wrappers para invocar dinámicamente funciones relacionadas con las funcionalidades del servidor. Estas funciones toman un único argumento: un puntero a una estructura RPC_MESSAGE.

Estructura RPC_MESSAGE:

root@kitploit:~
typedef struct _RPC_MESSAGE {
  RPC_BINDING_HANDLE     Handle;
  unsigned long          DataRepresentation;
  void                   *Buffer;
  unsigned int           BufferLength;
  unsigned int           ProcNum;
  PRPC_SYNTAX_IDENTIFIER TransferSyntax;
  void                   *RpcInterfaceInformation;
  void                   *ReservedForRuntime;
  RPC_MGR_EPV            *ManagerEpv;
  void                   *ImportContext;
  unsigned long          RpcFlags;
} RPC_MESSAGE, *PRPC_MESSAGE;

Inicialización y ejecución

Para inicializar el runtime sin vincularse a un servicio, se utiliza la función PerformRpcInitialization. Esta función inicializa internamente las estructuras necesarias sin requerir un binding manual.

Problemas conocidos

Esta versión pública de la técnica se ha desarrollado como POC para demostrar su viabilidad, y actualmente genera una excepción en NdrGetBuffer debido a la falta de un Binding Handle. Esto puede resolverse de varias maneras, pero la implementación actual hace lo siguiente:

  • Realiza un parche a ntdll (RaiseException -> RtlExitUserThread)
  • Recupera el valor de retorno mediante VEH
root@kitploit:~
int FetchReturnValue(const PEXCEPTION_POINTERS ExceptionInfo) {
    ExceptionInfo->ContextRecord->EFlags |= (1 << 16);
    g_ReturnValue = (PVOID)ExceptionInfo->ContextRecord->Rax;
    return EXCEPTION_CONTINUE_EXECUTION;
}

Limitaciones y parcheo

La invocación RPC está protegida por CFG, lo que significa que, para lograr una ejecución de código completa y sin restricciones, es necesario marcar el objetivo como válido con SetProcessValidCallTargets o parchear RpcInvokeCheckICall.

Conclusión

El proyecto RpcProxyInvoke demuestra una técnica alternativa que puede ser abusada para implementar una librería estilo RailGun. Aunque la implementación pública no es perfecta, puede servir como base para un desarrollo posterior.

Licencia

Este proyecto está licenciado bajo la Licencia MIT; consulte el archivo LICENSE para más detalles.

Descargar herramienta