2009-10-11 2 views
1

После успешного вызова как LogonUser и ImpersonateLoggedOnUser она не кажется, что мой процесс работает как новый пользователь ...ImpersonateLoggedOnUser не появляется на работе

системы («WHOAMI»);

печатает: Chris-PC \ Chris

, когда он должен быть: Chris-PC \ LimitedGuy

Есть функция, я не звонить или что-то?

Мой код:

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"); 
} 

ответ

4

При использовании системы называют новый процесс для выполнения команды, но в Windows, новый процесс всегда создается с маркером от родительского процесса не резьбу (если вы специально используете один из вызовов CreateProcessAsUser, CreateProcessWithLogonW и т. д.). Поэтому в вашем случае «whoami» выполняется в контексте оригинального пользователя, а не олицетворяющего себя. Чтобы проверить имя вызываемого пользователя, вызовите GetUserName.

+0

Когда я использую CreateProcessAsUser для запуска cmd.exe, он все равно терпит неудачу, когда я набираю «whoami». Есть ли способ заставить запущенный процесс взять атрибуты безопасности, которые я хочу? –

+1

Я просто пробовал быстрый тест с использованием CreateProcessWithLogonW, и он работал как ожидалось - whoami дал имя пользователя учетной записи, процесс был запущен не у исходного пользователя. Это может иметь какое-то отношение к блокам среды или что-то в этом направлении, хотя это кажется маловероятным. Возможно, вы можете опубликовать свой код CreateProcessAsUser. –