2009-10-11 8 views
1

Après un appel réussi à la fois LogonUser et ImpersonateLoggedOnUser il ne semble pas que mon processus fonctionne comme le nouvel utilisateur ...ImpersonateLoggedOnUser ne semble pas fonctionner

système

(« WHOAMI »);

imprime: Chris PC \ Chris

quand il devrait être: Chris-PC \ LimitedGuy

Y at-il une fonction que je ne suis pas appeler ou quelque chose?

Mon code:

if(argc == 6) // impersonate 
     { 

      printf("[~] Logging in as %ws\\\\%ws..\n", argv[3], argv[4]); 
      if(!LogonUser(argv[4], argv[3], argv[5], LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &logonToken)) 
      { 
       printf("[!] Failed to login as %ws. Error Code: %X\n", argv[4], GetLastError()); 
       return 1; 
      } 


      if(!ImpersonateLoggedOnUser(logonToken)) 
      { 
       printf("[!] ImpersonateLoggedOnUser failed with error code: %X\n", GetLastError()); 
       return 1; 
      } 

      LoadUserProfile(logonToken, &plinfo); 
      system("whoami"); 
      printf("[~] Login successful!\n"); 
} 

Répondre

4

Lorsque vous utilisez le système appelle un nouveau processus est créé pour exécuter la commande, mais dans Windows le nouveau processus est toujours créé avec le jeton du processus parent et non le fil (à moins que vous utilisez spécifiquement l'un des appels CreateProcessAsUser, CreateProcessWithLogonW, etc.). Donc, dans votre cas, 'whoami' est exécuté dans le contexte de l'utilisateur d'origine, pas celui qui usurpe l'identité. Pour vérifier le nom de l'utilisateur en cours d'identité, appelez GetUserName.

+0

Lorsque j'utilise CreateProcessAsUser pour lancer cmd.exe, il échoue quand je tape "whoami". Y at-il de toute façon pour forcer le processus lancé à prendre les attributs de sécurité que je veux? –

+1

J'ai juste essayé un test rapide en utilisant CreateProcessWithLogonW et cela a fonctionné comme prévu - whoami a donné le nom d'utilisateur du compte que le processus a été lancé sous pas celui de l'utilisateur original. Cela peut avoir quelque chose à voir avec des blocs d'environnement ou quelque chose comme ça, même si cela semble improbable. Peut-être pourriez-vous poster votre code CreateProcessAsUser. –

Questions connexes