Re[3]: Имперсонация по SID Logon сессии
От: SergH Россия  
Дата: 07.04.06 14:25
Оценка:
Здравствуйте, Anatoli_Nikitin, Вы писали:

A_N>Что-то я не совсем понял. Как мне из сессии открыть токен, если у меня там процессов нет? Мне, грубо говоря, нужно в сервисе получить токены всех текущих логон сессий.


Для начала, что вы понимаете под logon session? Я имел ввиду LsaEnumerateLogonSessions и LsaGetLogonSessionData. Дальше про них.

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

Дальше, если в сессии всё же кто-то выполняется, можно перебрать все потоки-процессы (ToolHelp API в помощь), вызвать каждому OpenThreadToken/OpenProcessToken и таким образом получить все токены которые нужны. Далее выбрать наиболее подходящий, имперсонализоваться и выполнить нужную функцию. Это я имел ввиду в прошлом посте.

Кстати, даже если вы узнаете пароль, или используете флажёк KERB_S4U_LOGON функции LsaLogonUser, она не вернёт токен существующей сессии, а создаст новую, с тем же пользователем. Если это не важно, можно использовать KERB_S4U_LOGON, но тут Win2003 как минимальное требование.
Делай что должно, и будь что будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.