2009-10-11 1 views
1

작동하도록ImpersonateLoggedOnUser는 ... 내 프로세스가 새 사용자로 실행되고 있는지 표시되지 않습니다 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"); 
} 

답변

4

당신은 (하지 않는 한 새로운 프로세스가 명령을 실행하기 위해 작성된 호출하지만 Windows에서 새로운 프로세스는 항상 부모 프로세스가 아닌 스레드에서 토큰을 사용하여 작성된 시스템을 사용하는 경우 CreateProcessAsUser, CreateProcessWithLogonW 등의 호출 중 하나를 사용합니다. 따라서 귀하의 경우 'whoami'는 가장 한 사람이 아닌 원래 사용자의 컨텍스트에서 실행됩니다. 가장 한 사용자의 이름을 확인하려면 GetUserName을 호출하십시오.

+0

CreateProcessAsUser를 사용하여 cmd.exe를 시작하면 "whoami"를 입력해도 실패합니다. 거기에 어쨌든 내가 시작한 프로세스가 원하는 보안 속성을 취하도록 강요합니까? –

+1

방금 ​​CreateProcessWithLogonW를 사용하여 빠른 테스트를 시도했는데 예상대로 작동했습니다. whoami는 원래 사용자가 아닌 프로세스가 시작된 계정의 사용자 이름을 제공했습니다. 가능성은 낮지 만 환경 블록이나 그 라인을 따르는 것과 관련이있을 수 있습니다. 어쩌면 CreateProcessAsUser 코드를 게시 할 수 있습니다. –

관련 문제