Сейчас на форуме: zombi-vadim, zds (+4 невидимых) |
![]() |
eXeL@B —› Программирование —› Мини-шелл |
Посл.ответ | Сообщение |
|
Создано: 15 июня 2013 10:18 · Личное сообщение · #1 Появилась необходимость сделать запуск программ с полными привилегиями из под учетной записи обычного user (Windows) в обход runas, паролей и администраторов. Первое, что пришло в голову - написать службу Windows (запускалась сначала из под LocalService), которая, после получения сигнала, запускала сам шелл с GUI(расчет на то, что шелл унаследует привилегии процесса-родителя), ну и в текстбокс вбивалась команда и все исполнялось типа из под админа ![]() Службу реализовал, однако фейл наступил с другой стороны - процесс шелла запускается, но GUI не видно. Мутил с параметрами CraeteProcess - тоже ничего не дало. LocalSystemAccount - из под user ничего не выполняется. Короче, стало ясно, что дело в аккурантах. Собственно, есть ли вариант - решить проблему или нужно все менять конструктивно? ![]() |
|
Создано: 15 июня 2013 10:32 · Личное сообщение · #2 Вообще поиск в гугле на тему "запуск процесса из сервиса" выдаст полно всего. Хотя бы http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx Если кратко, скорее всего дело в том, что в виста+ изоляция сессий. И десктоп для 0 сессии не связан с твоим юзерским десктопом. И надо либо брать токен залогиненого админа (по понятным причинам не всегда сработает) и запускать от него, либо воровать чей-то токен (отвратительно), либо менять SessionId в токене. З.Ы. Ну и как бэ LocalService-это не админ, это более привилегированная муть. З.З.Ы. Я думаю, ты догадываешься, что всю систему безопасности ты сливаешь в сортир при этом. ![]() |
|
Создано: 15 июня 2013 10:53 · Поправил: ELF_7719116 · Личное сообщение · #3 Archer Всё! Я понял, что нужно токен выстаскивать. Я думаю, ты догадываешься, что всю систему безопасности ты сливаешь в сортир при этом. Спасибо кэп! ![]() add: вопрос еще такого плана - STARTUPINFO.lpDesktop по идеи можно заполнить так, чтоб он выходил сразу на нужный декстоп?! Не вкурю, как открыть нужный десктоп юзера, который залогинился. ![]() |
|
Создано: 15 июня 2013 13:07 · Личное сообщение · #4 |
|
Создано: 15 июня 2013 13:36 · Личное сообщение · #5 Десктопы уникальны только в пределах станции, так что просто указание десктопа само по себе тебе не поможет запустить интерактивный процесс из сервиса. Но вообще на какой-то винде вопреки мсдн (2к8 х64, что ли) десктоп не наследуется нефига от сервиса, если он интеративный, а надо указать явно, так что лучше укажи WinSta0\Default ![]() |
|
Создано: 15 июня 2013 14:02 · Личное сообщение · #6 Вообщем, через подмену SessionId оно работает(по крайней мере - в 2k3). Запускаемся как local system(там же есть SE_TCB_PRIVELEGE). Из под обычного ограниченного юзера запускаем cmd -> whoami и наслаждаемся NT AUTHORITY\LocalSystem. Жду Ваших предложений. ZaZa пишет: Ну ты ведь потом выложишь это сюда? Мне самому писать влом потому что! Всем, кроме ZaZa, качать можно ![]() ![]() ![]() |
![]() |
eXeL@B —› Программирование —› Мини-шелл |