Netpsexec : exécuter un processus en tant que local system ou en impersonant l'utilisateur courant en local ou sur une machi

Description

Ce code permet de faire une partie de ce que fait PsExec de sysinternal (http://technet.microsoft.com/en-us/sysinternals/bb897553) :
-> lancer un processus en tant que Local System sur la machine locale
-> lancer un processus en tant que Local System sur une machine distante
-> lancer un processus en impersonant votre compte utilisateur sur une machine distante

Ce code montre :
-> l'utilisation de WCF en mode namedpipe et nettcp avec impersonation (en self hosted),
-> la gestion d'un service Windows (enregistrement, lancement, arrêt, suppression),
-> la redirection native des flux StdOut/StdIn d'un processus (ce que fait en interne la classe Process, CreatePipe, CreateProcess, lecture asynchrone),
-> le lancement d'un processus à partir d'un token de sécurité d'un utilisateur (CreateProcessAsUser)
-> le lancement d'un processus depuis un service dans la session de l'utilisateur connecté (SetTokenInformation, SessionId)

Les applications sont par exemple:
-> psexec -i -d -s c:\windows\regedit.exe => lancement de regedit pour voir les clés SAM et SECURITY (accessible uniquement par Local System)
-> psexec \\machine cmd.exe => lance cmd.exe sur la machine distante, comme telnet ou ssh mais sans installation (à part le framework .Net)

Conclusion :


Testé sur Vista et Seven

N'hésitez pas à commenter et à noter

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.