ImpersonateLoggedOnUser не работает - PullRequest
1 голос
/ 12 октября 2009

После успешного вызова обоих LogonUser и 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");
} 

1 Ответ

4 голосов
/ 12 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...