Как вы запускаете CMD.exe под учетной записью локальной системы? - PullRequest
132 голосов
/ 17 сентября 2008

В настоящее время я использую Vista и хочу вручную выполнить те же операции, что и моя служба Windows. Так как служба Windows работает под учетной записью локальной системы, я хотел бы эмулировать такое же поведение. По сути, я хотел бы запустить CMD.EXE под учетной записью локальной системы.

В Интернете я нашел информацию, которая предлагает запуск CMD.exe с помощью команды AT DOS Task Scheduler, но я получил предупреждение Vista, что «из-за улучшений безопасности эта задача будет выполняться в указанное время, но не в интерактивном режиме». Вот пример команды:

AT 12:00 /interactive cmd.exe

В другом решении было предложено создать вторичную службу Windows через элемент управления службами (sc.exe), который просто запускает CMD.exe.

C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact
C:\sc start RunCMDAsLSA

В этом случае служба не запускается и выдает следующее сообщение об ошибке:

FAILED 1053: The service did not respond to the start or control request in a timely fashion.

Третьим предложением было запустить CMD.exe через запланированное задание. Хотя вы можете запускать запланированные задачи под разными учетными записями, я не считаю, что локальная системная учетная запись является одной из них.

Я тоже пытался использовать Runas, но думаю, что я столкнулся с тем же ограничением, которое было обнаружено при выполнении запланированной задачи.

До сих пор каждая из моих попыток заканчивалась неудачей. Есть предложения?

Ответы [ 10 ]

204 голосов
/ 17 сентября 2008

Хотя я лично не тестировал, у меня есть веские основания полагать, что указанное выше решение AT COMMAND будет работать для XP, 2000 и Server 2003. В ходе тестирования моего и Брайанта мы определили, что тот же подход не работать с Vista или Windows Server 2008 - скорее всего, из-за дополнительной безопасности и устаревшего параметра / interactive.

Однако я натолкнулся на эту статью , которая демонстрирует использование PSTools из SysInternals (которая была приобретена Microsoft в июле 2006 года.) Я запустил через командную строку, и вдруг я запустился под учетной записью локального администратора, как по волшебству:

psexec -i -s cmd.exe

PSTools работает хорошо. Это легкий, хорошо документированный набор инструментов, который обеспечивает подходящее решение моей проблемы.

Большое спасибо тем, кто предложил помощь.

41 голосов
/ 07 июня 2013
  1. Загрузка файла psexec.exe от Sysinternals .
  2. Поместите его в свой диск C: \.
  3. Войдите в систему как обычный пользователь или администратор и используйте следующую команду: cd \. Это помещает вас в корневой каталог вашего диска, где находится psexec.
  4. Используйте следующую команду: psexec -i -s cmd.exe где -i для интерактивной и -s для системной учетной записи.
  5. Когда команда завершится, будет запущена оболочка cmd. Тип whoami; это будет сказать «система»
  6. Открыть диспетчер задач. Убить explorer.exe.
  7. Из командной оболочки с повышенными правами введите start explorer.exe.
  8. Когда проводник запущен, обратите внимание на имя «system» в строке меню «Пуск». Теперь вы можете удалить некоторые файлы в каталоге system32, которые как администратор вы не можете удалить или как администратор, вам придется изо всех сил пытаться изменить разрешения для удаления этих файлов.

Пользователи, которые пытаются переименовать или удалить системные файлы в любом защищенном каталоге Windows, должны знать, что все файлы Windows защищены DACLS, при переименовании файла вам необходимо сменить владельца и заменить TrustedInstaller, которому принадлежит файл, и сделать любого пользователя похожим на пользователь, который принадлежит к группе администраторов как владелец файла, затем попытается переименовать его после изменения разрешения, он будет работать, и пока вы работаете в проводнике Windows с привилегиями ядра, вы несколько ограничены в плане доступа к сети по соображениям безопасности, и это все еще тема исследования для меня, чтобы получить доступ назад

10 голосов
/ 17 сентября 2008

Нашел ответ здесь , который, кажется, решает проблему, добавив / k start к параметру binPath. Так что это даст вам:

sc create testsvc binpath= "cmd /K start" type= own type= interact

Однако Бен сказал, что у него это не сработало, и когда я попробовал его на Windows Server 2008, он создал процесс cmd.exe в локальной системе, но он не был интерактивным (я не мог видеть окно) ,

Я не думаю, что есть простой способ сделать то, что вы просите, но мне интересно, зачем вы вообще это делаете? Вы просто пытаетесь увидеть, что происходит, когда вы запускаете свой сервис? Похоже, вы могли бы просто использовать ведение журнала, чтобы определить, что происходит, вместо того, чтобы запускать exe как локальную систему ...

6 голосов
/ 17 сентября 2008

Я бы порекомендовал вам разработать минимальный набор разрешений, который действительно нужен вашей службе, и использовать его, а не слишком привилегированный контекст локальной системы. Например, Локальная служба .

Интерактивные службы больше не работают - или, по крайней мере, больше не отображают пользовательский интерфейс - в Windows Vista и Windows Server 2008 из-за изоляции сеанса 0 .

3 голосов
/ 30 мая 2015

Использование Secure Desktop для запуска cmd.exe как system

Мы можем легко получить доступ к ядру через CMD в Windows XP / Vista / 7 / 8.1, подключив отладчик:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
  1. Запуск CMD от имени администратора

  2. Затем используйте эту команду в Elevated:

     CMD REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
    
  3. Затем запустите osk (на экранной клавиатуре). Он по-прежнему не работает с уровнем целостности системы, если вы проверите через Process Explorer, но если вы можете использовать OSK в сеансе обслуживания, он будет работать как NT Authority\SYSTEM

поэтому я подумал, что вы должны запустить его на Secure Desktop.

Запустите любой файл от имени администратора. Когда появятся подсказки UAC, просто нажмите Win + U и запустите OSK, и вместо этого начнется CMD. Затем в командной строке с повышенными правами введите whoami, и вы получите NT Authority\System. После этого вы можете запустить Explorer из командной оболочки системы и использовать профиль системы, но вы несколько ограничены в том, что вы можете делать в сети через привилегии SYSTEM из соображений безопасности. Я добавлю больше объяснений позже, как я обнаружил это год назад.

Краткое объяснение того, как это происходит

Запуск Cmd.exe Под учетной записью локальной системы без использования PsExec. Этот метод запускает технику отладки отладчика, которая была обнаружена ранее, и у этой методики есть свои преимущества: ее можно использовать для отлова какого-то хитрого / вредоносного червя или вредоносного ПО в отладчике и запуска другого исполняемого файла, чтобы остановить распространение или временно повредить. здесь этот ключ реестра перехватывает экранную клавиатуру в собственном отладчике Windows и вместо этого запускает cmd.exe, но cmd по-прежнему будет работать с привилегиями пользователя, вошедшего в систему, однако если мы запустим cmd в session0, мы сможем получить системную оболочку. поэтому мы добавим еще одну идею: мы добавляем cmd на защищенный рабочий стол, помним, что безопасный рабочий стол запускается в сеансе 0 под системной учетной записью, и мы получаем системную оболочку. Поэтому, когда вы запускаете что-либо с повышенными правами, вы должны отвечать на запросы UAC и UAC на темном, неинтерактивном рабочем столе, и как только вы видите это, вы должны нажать Win + U , а затем выберите OSK, и вы получите CMD.exe, работающий с правами локальной системы. Есть еще больше способов получить локальный доступ к системе с CMD

3 голосов
/ 21 февраля 2011

альтернативой этому является Process hacker, если вы запускаете приложение как ... (Interactive не работает для людей с улучшениями безопасности, но это не имеет значения), и когда окно открывается, поместите Service в в поле введите и поместите SYSTEM в пользовательский ящик, затем поместите C: \ Users \ Windows \ system32 \ cmd.exe, оставьте остальные, нажмите кнопку ОК, и boch, у вас есть окно с cmd на нем и запустите, поскольку система теперь выполняет другие шаги для себя потому что я предлагаю вам знать их

2 голосов
/ 14 мая 2018

Есть другой способ. Существует программа под названием PowerRun, которая позволяет запускать повышенные cmd. Даже с правами TrustedInstaller. Это позволяет для консольных и графических команд.

1 голос
/ 17 сентября 2008

если вы можете написать пакетный файл, который не должен быть интерактивным, попробуйте запустить этот пакетный файл как службу, чтобы сделать то, что нужно сделать.

0 голосов
/ 31 мая 2019

Используя планировщик задач, запланируйте запуск CMDKEY, работающего в SYSTEM, с соответствующими аргументами / add: / user: и / pass:

Не нужно ничего устанавливать.

0 голосов
/ 15 июня 2018

Я использую утилиту RunAsTi для запуска как TrustedInstaller (высокая привилегия). Утилита может использоваться даже в режиме восстановления Windows (режим, который вы вводите с помощью Shift + Restart), утилита psexec там не работает. Но вам нужно добавить пути C:\Windows и C:\Windows\System32 (не X:\Windows и X:\Windows\System32) к переменной среды PATH, в противном случае RunAsTi не будет работать в режиме восстановления, он будет просто напечатайте: AdjustTokenPrivileges для SeImpersonateName: не все привилегии или группы, на которые ссылаются, назначаются вызывающей стороне .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...