CreateProcessAsUser и LogonUser без пароля - PullRequest
4 голосов
/ 10 декабря 2010

Используя WTSGetActiveConsoleSessionId и WTSQueryUserToken, я знаю, что для службы, работающей в качестве SYSTEM, можно запустить приложение на текущем рабочем столе без использования пароля. Нужно ли запускать CreateProcessAsUser без пароля для LogonUser при условии, что программа, запускающая процесс, имеет достаточные привилегии?

РЕДАКТИРОВАТЬ 1 : Ситуация приблизительно похожа на этот экземпляр , но мне нужно иметь возможность запускать процесс как пользователь независимо от того, вошли ли они в систему или нет. система в то время.

Ответы [ 3 ]

1 голос
/ 10 февраля 2011

Существует возможность использования недокументированной функции NtCreateToken;Я думаю этот пример проекта использует его.Если не считать этого, это невозможно.

0 голосов
/ 15 мая 2014

Теоретически, по крайней мере, вы можете реализовать собственный пакет аутентификации и затем использовать его для генерации подходящего токена.

Другой возможный вариант, в зависимости от ваших точных требований, заключается вопции SidsToRestrict и PrivilegesToDelete функции CreateRestrictedToken вместе с SetTokenInformation для создания соответственно модифицированной производной вашего собственного токена.

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

0 голосов
/ 12 февраля 2011

В зависимости от токена, который вы пытаетесь подделать, вам потребуются определенные привилегии, в частности, TCB, который приходит на ум. Услуги есть это. «Справочник по Windows NT / 2000 Native API» от Nebett содержит пример.

Однако службы, создающие процесс как SYSTEM на текущем настольном компьютере, уже не так просты, как Vista. Улучшенное разделение сеансов является проблемой здесь. Однако вы можете выдать себя за пользователя на другом конце канала, и текущий поток должен иметь возможность выступать в качестве этого пользователя (например, SYSTEM).

...