ImpersonateLoggedOnUser似乎不起作用

时间:2009-10-11 23:39:16

标签: c++ winapi login impersonation

成功调用LogonUser和ImpersonateLoggedOnUser后,我的进程似乎没有以新用户身份运行...

系统( “WHOAMI”);

打印出来: 克里斯-PC \克里斯

应该是: 克里斯-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 个答案:

答案 0 :(得分:4)

当您使用系统调用时,会创建一个新进程来执行该命令,但在Windows中,始终使用父进程中的令牌而不是线程创建新进程(除非您专门使用CreateProcessAsUser,CreateProcessWithLogonW等之一) 。来电)。所以在你的情况下,'whoami'是在原始用户的上下文中执行而不是模仿的人。要检查被模拟用户的名称,请调用GetUserName。