成功调用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");
}
答案 0 :(得分:4)
当您使用系统调用时,会创建一个新进程来执行该命令,但在Windows中,始终使用父进程中的令牌而不是线程创建新进程(除非您专门使用CreateProcessAsUser,CreateProcessWithLogonW等之一) 。来电)。所以在你的情况下,'whoami'是在原始用户的上下文中执行而不是模仿的人。要检查被模拟用户的名称,请调用GetUserName。