Как получить токен пользователя Windows SYSTEM

Операционная система - Windows 7 или выше с включенным UAC. У процесса вызова есть права администратора, уже подтвержденные полем UAC.

Я хочу создать новое окно консоли (cmd.exe) под пользователем SYSTEM (не спрашивайте почему). Я могу сделать это в интерактивном режиме, используя инструмент PsExec от Sysinternals или что-то подобное, но у меня нет исходного кода, и мне нужно понимать, как это работает.

Я понимаю, что мне нужно вызвать CreateProcessAsUser (), и это нормально работает с первым параметром (hToken), установленным в NULL, но теперь мне нужно знать, как получить hToken. Я понимаю, что могу получить такой токен, вызвав LogonUser (), но не для SYSTEM. Как мне получить токен для SYSTEM?

Я думал об использовании DuplicateTokenEx (), но для этого требуется оригинальный токен, которого у меня нет.

Придется ли мне запросить список процессов, найти какой-либо процесс SYSTEM и попытаться дублировать этот токен или что-то в этом роде? Я не хочу реконструировать инструмент PsExec или какой-либо другой инструмент, делающий именно это.


person e4ch    schedule 25.11.2012    source источник
comment
Найдите runassystem, если вы не хотите ее программировать.   -  person ChristianWimmer    schedule 06.06.2014


Ответы (2)


Обычно вы устанавливаете и запускаете службу, настроенную для входа в систему как SYSTEM. Затем вы можете использовать _1 _ и _2 _ Сделать копию токена.

Возможно, вам потребуется использовать SetTokenInformation , чтобы изменить идентификатор сеанса для токена в соответствии с идентификатором интерактивного пользователя. Для этого вам нужна привилегия «Действовать как часть операционной системы», поэтому вы должны делать это изнутри самой службы. Когда дублированный токен будет готов к использованию, вы можете использовать _ 4_, чтобы скопировать дескриптор в административный процесс, или (с правильными параметрами) вы также можете запустить командную оболочку прямо из службы.

person Harry Johnston    schedule 25.11.2012

В качестве альтернативы откройте процесс winlogon с максимально разрешенным доступом, попробуйте открыть токен процесса (также с максимально разрешенным), а затем попытайтесь продублировать этот дескриптор winlogon с правами олицетворения. На win8.1 это будет успешно. В других случаях вам нужно будет временно изменить токен dacl, используя либо нулевой, либо ваш собственный токен процесса администратора.

person user3409863    schedule 17.08.2014
comment
Я бы по-прежнему рекомендовал установить вашу собственную службу, а не использовать системный процесс, но если это по какой-то причине невозможно, это звучит как работоспособная альтернатива. Обратите внимание, что включение привилегии резервного копирования и восстановления обходит большинство проверок разрешений, поэтому оно может сработать и в этом случае и спасти вас от опасной путаницы с DACL. Если вам действительно приходится возиться с DACL, определенно не используйте нулевой DACL - это приведет к уязвимости системы безопасности. - person Harry Johnston; 18.08.2014