Страница: 1 |
Страница: 1 |
Вопрос: И снова о получении больших прав. Обсудим ?
Добавлено: 22.10.05 17:59
Автор вопроса: student-uni
Я тут всех уже заколебал этим но решение нашёл.
Хотел узнать мнение опытных.
Так вот.
Как выяснилось, под Вин2000
имея Вс2003 получить права Админа
можно только
1. зная его логин и пароль
2. Используя CreateProcessWithLogonW
запустив процесс с правами п.1
Но если нужно запустить не приложение а отдельную
функцию - то CreateProcessWithLogonW функции не ест.
Все мои попытки запустить функцию с большими
правами через ЛогонЮзер и имперсонализацию
потерпели под вин2000 крах.
/что собственно и было предсказано в МСДНе/
И тут пришла идея о которой я бы хотел
узнать мнение уважаемых формучан.
А что если закатать необходимую функцию в экзешник
и потом вызывать экзешник через CreateProcessWithLogonW ?
Попробовал, вроде идёт.
Политики по крайней мере обходит.
Вопрос к знающим:
- а какие побочные эффекты это может дать?
- чем плох подомный ход ?
- могут ли быть всё же сложности с получением прав ?
Всем спасибо за проявленный интерес к обсуждению.
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 22.10.05 20:23
- придётся организовывать межпроцессное взаимодействие. И под закатыванием ты понимаешь генерирование экзешника самому?..
- не знаю, но как-то не нравится он мне
- уточни, что и как ты хочешь делать
Номер ответа: 2
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #2
Добавлено: 23.10.05 00:18
генерировать - нет.
просто проект будет состоять не из одного
экзешника а из двух к примеру.
во втором будет всего одна функция,
которой мне так не хватает и на выполнение которой
у простого юзверя в реале не будет прав./только
у админа, права которого получит моя прога/
Второй экзешник будет по необходимости вызываться
первым - основной прогой.
Межпроцессорное взаимодействие - это проблема.
Но, в процессе выполнения мне вообщето
и не надо будет передавать данные.
Только по началу в процесс и по завершению.
из процесса.
По началу в процесс я планирую передать
с командной строкой /будет зашифровано/ .
С этим спасибо помогли.
Вот как вернуть информацию в родительский
экзешник - пока не знаю.
На крайний случай - через файл на диске.
Но думаю есть какой то более чистый
способ. Это же всё таки родительский
и дочерний процесс, а не два независимых
процесса.
Кстати примеров межпроцессорного
взаимодействия с использованием
Шаред Мемори я видел только одну
ддлльку Югослава и то он за Ддлльку
хочет 20 долларов, а код не даёт.
А примеры в основном есть с сокетами,
с пайпами, с файлами, а с шаред мемори
на дот нет нету. интереснопочему,
неужели всё так сложно ?
Номер ответа: 3
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #3
Добавлено: 23.10.05 00:22
Я боюсь, пока я всё это тестирую на локале
всё играет, а как поставлю на терминал сервер,
да как начнут туда удалённые юзвери лезть,
то что то пойдёт не так.
МСДН правда гарантирует, что CreateProcessWithLogonW
работает окей /в отличии от его родственников
Логон Юзера и Криейт Процесс/ но всё равно как то
боязно. Вот как.
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 23.10.05 14:21
В STARTUPINFO установи dwFlags STARTF_USESTDHANDLES, укажи hStdIn и hStdOut, а после вводи и выводи консольной дочерней программой в стандартный ввод/вывод, в родительском приложении посылай данные и обрабатывай.
Номер ответа: 5
Автор ответа:
Роман
Вопросов: 1
Ответов: 31
Web-сайт:
Профиль | | #5
Добавлено: 23.10.05 15:18
В домене не проканает!!!
Номер ответа: 6
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #6
Добавлено: 24.10.05 01:08
2 Sharp
А есть по подробнее пример ? Спасибо.
2 Роман
Ты уверен ? В МСДНе об этом ничего не сказано ?
Номер ответа: 7
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #7
Добавлено: 29.10.05 17:31
Так вот, первая проблема - дочерняя прога "думает",
что стартует из директории Вин/Сис32, т.о. все ваши связи с БД или ещё с чем - ломаются.
Исправляется это СетКаррентДиректори,
каррент директори можно передать в дочернюю
с коммандной строкой, но тут тоже подвох,
иногда путь имеет пробелы, которые CreateProcessWithLogonW
не понимает /и откидывает всё что после пробела/
Пришлось сделать сабу, которая заменяет пробелы на знак вопроса /или любой другой запрещённый в путях знак/ а в дчерней проделать обратное преобразование. После этого всё заработало.
Вот такое вот извращение я сотворил.
Програ получает все права админа.
Родительская прога-только вызывает её
далее я её нафиг выгружаю. Дочерняя остаётся с правами. Работает под всеми виндами.
И в терминал сейшн. В домене - не пробовал.
1. Буду признателен, если кто либо даст более умное решение.
2. Чисто теоретически в прогу родитель можно
передать любую другую прогу /обозвав её предварительно именем моей дочерней проги/
и наделать гадостей. Вопрос 2 - какие есть предложения чтобы это предотваратить ?
Родительская прога вызывает с помощью
CreateProcessWithLogonW (дочернюю прогру - proga2.exe) Как можно пометить прогу 2 чтобы
прога 1 однозначно могла её идентифицировать,
если какой либо гад подсунет другую прогу
с тем же именем ?
Всем огромное спасибо за участие