2012-11-25 2 views
2

운영 체제는 UAC를 사용할 수있는 Windows 7 이상입니다. 호출 프로세스에는 UAC 상자에서 이미 확인 된 관리자 권한이 있습니다.Windows 시스템 사용자 토큰을 얻는 방법

사용자 SYSTEM에서 새 콘솔 창 (cmd.exe)을 생성하려고합니다 (이유를 묻지 않음). Sysinternals 같은 PsExec 도구를 사용하여 대화 형으로이 작업을 수행 할 수 있지만 소스 코드가 없으므로이 작업 방식을 이해해야합니다.

나는 CreateProcessAsUser()를 호출해야하며 첫 번째 매개 변수 (hToken)가 NULL로 설정되어 있으면 제대로 작동하지만 이제는 hToken을 얻는 방법을 알아야한다는 것을 알고 있습니다. LogonUser()를 호출하여 이러한 토큰을 얻을 수 있다는 것을 이해합니다. 그러나 SYSTEM은 아닙니다. 어떻게하면 SYSTEM 토큰을 얻을 수 있습니까?

DuplicateTokenEx()를 사용하려고 생각했지만 원래 토큰이 필요합니다.

프로세스 목록을 쿼리하고 SYSTEM 프로세스를 찾고 복제 된 토큰을 얻으려고합니까? 나는 PsExec 툴이나 정확히 이것을 수행하는 다른 엔지니어 중 하나를 리버스 엔지니어로 만들고 싶지 않습니다.

+0

프로그래밍하지 않으려면 "runassystem"을 검색하십시오. – ChristianWimmer

답변

3

일반적으로 SYSTEM으로 로그인하도록 구성된 서비스를 설치하고 실행합니다. 그런 다음 OpenProcessTokenDuplicateTokenEx을 사용하여 토큰 사본을 만들 수 있습니다.

대화 형 사용자의 세션 ID와 일치하도록 토큰의 세션 ID를 변경하려면 SetTokenInformation을 사용해야 할 수도 있습니다. 이를 위해서는 운영 체제의 일부로 작동하는 권한이 필요하므로 서비스 자체 내에서이 작업을 수행해야합니다. 중복 토큰을 사용할 준비가되면 DuplicateHandle을 사용하여 관리 프로세스로 핸들을 복사하거나 올바른 옵션을 사용하여 서비스에서 직접 명령 셸을 시작할 수 있습니다.

0

대체로 허용 된 최대 액세스 권한을 사용하여 winlogon 프로세스를 열고 프로세스 토큰을 열어 보거나 (최대 허용) winlogon 핸들을 가장 오른쪽 권한으로 복제 해보십시오. win8.1에서 성공할 것입니다. 다른 사용자의 경우 null 또는 사용자 고유의 관리 프로세스 토큰을 사용하여 토큰 dacl을 임시로 변경해야합니다.

+0

시스템 프로세스를 사용하는 대신 사용자 고유의 서비스를 설치하는 것이 좋습니다.하지만 어떤 이유로 든 가능하지 않은 경우이 방법을 사용할 수 있습니다. 백업 및 복원 권한을 설정하면 대부분의 사용 권한 확인을 무시하므로이 경우에도 작동 할 수 있으므로 DACL을 위험에 빠뜨릴 수 있습니다. DACL을 혼란에 빠뜨리면 null DACL을 사용하지 마십시오. 보안 취약점이 생깁니다. –