Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
RpcProxyInvoke — Simple bibliothèque POC pour exécuter des appels arbitraires en les proxyant via NdrServerCall2 ou similaire | Kitploit
Outils/GitHubGitHub/klezvirus/rpcproxyinvoke
Escalade de PrivilègesExploitationMouvement LatéralShellcodePost-ExploitationTests d'IntrusionCommandement et ContrôleRed TeamingOutil d'Accès à DistanceDéveloppement de Charges UtilesExploitation de Binaires
1391750il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
GitHub
klezvirus/rpcproxyinvoke

RpcProxyInvoke

Simple bibliothèque POC pour exécuter des appels arbitraires en les proxyant via NdrServerCall2 ou similaire

Voir le dépôt

RpcProxyInvoke

Aperçu

Pour créer un moyen général d'exécuter du code local et distant, nous avons conçu une méthode d'exécution de code relativement obscure, que nous appelons en interne RpcCraft (Self) et RpcExec (Remote Process). Cette technique exploite une méthodologie bien connue des développeurs d'exploits, en abusant des appels serveur RPC (Remote Procedure Call) tels que NdrServerCall2 ou NdrServerCallAll pour exécuter du code arbitraire.

Abus des appels serveur pour l'exécution

Dans RPCRT4.dll, des fonctions comme NdrServerCall2, NdrServerCallAll et NdrServerCallNdr64 (un alias de NdrServerCallAll) sont implémentées comme des wrappers pour invoquer dynamiquement des fonctions liées aux fonctionnalités du serveur. Ces fonctions prennent un seul argument, un pointeur vers une structure RPC_MESSAGE.

Structure RPC_MESSAGE :

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;

Initialisation et exécution

Pour initialiser le runtime sans se lier à un service, la fonction PerformRpcInitialization est utilisée. Cette fonction initialise en interne les structures nécessaires sans nécessiter de liaison manuelle.

Problèmes connus

Cette version publique de la technique a été développée comme POC pour démontrer la faisabilité, et elle génère actuellement une exception sur NdrGetBuffer en raison d'un Binding Handle manquant. Cela peut être traité de plusieurs manières, mais l'implémentation actuelle fait :

  • Effectue un patch sur ntdll (RaiseException -> RtlExitUserThread)
  • Récupère la valeur de retour via VEH
int FetchReturnValue(const PEXCEPTION_POINTERS ExceptionInfo) {
    ExceptionInfo->ContextRecord->EFlags |= (1 << 16);
    g_ReturnValue = (PVOID)ExceptionInfo->ContextRecord->Rax;
    return EXCEPTION_CONTINUE_EXECUTION;
}

Limitations et correctifs

L'invocation RPC est protégée par CFG, ce qui signifie que pour obtenir une exécution de code complète et sans restriction, il est nécessaire soit de marquer la cible comme valide avec SetProcessValidCallTargets, soit de patcher RpcInvokeCheckICall.

Conclusion

Le projet RpcProxyInvoke démontre une technique alternative pouvant être abusée pour implémenter une bibliothèque de style RailGun. Bien que l'implémentation publique ne soit pas parfaite, elle peut servir de base pour un développement ultérieur.

Licence

Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.

Télécharger l’outil