2009-10-11 75 views
1

成功調用都LogonUser的和ImpersonateLoggedOnUser它後不會出現我的進程正在運行,爲新的用戶...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"); 
} 

回答

4

當您使用系統調用一個新的進程被創建到執行的命令,但在新的Windows進程總是與從不父進程的線程令牌創建(除非您特別使用CreateProcessAsUser,CreateProcessWithLogonW等調用之一)。所以在你的情況下,'whoami'是在原始用戶的情況下執行的,而不是模擬的。要檢查被模擬的用戶的名稱,請調用GetUserName。

+0

當我使用CreateProcessAsUser啓動cmd.exe時,它仍然失敗,當我鍵入「whoami」。無論如何強迫啓動的流程承擔我想要的安全屬性? – 2009-10-12 01:56:02

+1

我剛剛嘗試使用CreateProcessWithLogonW進行快速測試,它的工作方式與預期相同 - whoami提供了在不是原始用戶的情況下啓動進程的帳戶的用戶名。儘管看起來不太可能,但它可能與環境塊或某些事情有關。也許你可以發佈你的CreateProcessAsUser代碼。 – 2009-10-13 15:50:40