2016-09-09 2 views
0

Windows Server 2012에서 WindowsService를 실행 중이며 컴퓨터의 로컬 관리자 그룹에 추가 된 도메인 관리자 사용자로 가장해야합니다.LogonUser()를 호출하여 UAC를 사용하는 Windows 서비스 내에서 제한되지 않은 전체 토큰을 얻는 방법은 무엇입니까?

시스템에서 UAC를 사용할 수 있고 LogonType LOGON32_LOGON_INTERACTIVE의 자격 증명을 사용하여 Calling LogonUser가 전체 토큰 대신 제한된 토큰을 반환하는 것처럼 보입니다.

이렇게하면 관리 작업이 실패하게됩니다.

이 상황에서 LogonUser를 호출하여 제한된 토큰 대신 전체 토큰이 반환되는 올바른 방법은 무엇입니까?

추신 : 여기에 관련 질문이 있습니다. How can I get elevated permissions (UAC) via impersonation under a non-interactive login? 전체 토큰을 얻으려면 정확한 호출이 필요하지 않습니다.

답변

4

LOGON32_LOGON_INTERACTIVE 옵션 대신 LOGON32_LOGON_BATCH 옵션을 사용하여 LogonUser()에서 필터링되지 않은 토큰을 얻을 수 있습니다.

this answer에는 LOGON32_LOGON_BATCH을 사용하고 LogonUser() 함수를 사용하여 관리 토큰을 얻는 샘플 코드가 있습니다.


부록 :

당신이 SeTcbPrivilege가있는 경우, 다른 옵션이 있습니다 : 당신이 핸들을 얻기 위해) (GetTokenInformation에 TokenLinkedToken 옵션을 사용하여 다음 LogonUser()를 호출 할 때 LOGON32_LOGON_INTERACTIVE을 사용할 수 있습니다 필터링 된 토큰에 링크 된 상승 된 토큰

SeTcbPrivilege는 "운영 체제의 일부로 작동"이라고도 알려져 있으며 일반적으로 로컬 시스템 컨텍스트에서 실행 중일 때만 사용할 수 있습니다.

SeTcbPrivilege가없는 경우에도 GetTokenInformation()을 호출하여 링크 된 토큰의 복사본을 가져올 수는 있지만이 경우 가장 가까운 토큰을 SecurityIdentification 수준으로 가져오고 싶다면 소용이 없습니다. 새로운 프로세스를 만듭니다. (이것을 지적하는 RbMm에게 기부하십시오.)

+0

이 토큰은 기본 토큰이나 가장 된 토큰입니까? – Dev28

+0

'LOGON32_LOGON_NETWORK' 만 가장 토큰을 생성합니다. 'LOGON32_LOGON_BATCH'를 포함한 다른 모든 옵션들은 기본 토큰을 생성합니다. (물론 가장 토큰을 기본 토큰으로 변환하거나 그 반대로 변환 할 수 있습니다.) –

+0

참조 http://stackoverflow.com/a/35027525/886887 –