Как вызвать командную строку от имени системы (Local System)

cmd logoДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов России Pyatilistnik.org. В прошлый раз мы с вами разобрали способы выключения компьютера средствами командной строки, в сегодняшней публикации мы рассмотрим задачу, как вызвать cmd от имени системной учетной записи Local System, рассмотрим варианты применения данной задачи. Думаю, что многим коллегам данная статья будет весьма познавательна и каждый найдет применение данному лайвхаку.

Какого назначение системной учетной записи Local System

Системная учетная запись (Local System) – это специальная встроенная, локальная учетная запись, созданная Windows в момент установки, для использования в системе и запуска из под нее различных служб Windows. В Windows огромное количество служб и процессов для своего запуска и работы используют именно системную запись. Посмотреть это можно в оснастке "Службы", которую можно открыть из окна "Выполнить" введя в нем services.msc.

Запуск службы от имени системной учетной записи

Учетная запись Ststem не отображается среди других учетных записей в диспетчере пользователей, но зато вы ее легко можете увидеть на вкладке "Безопасность" у любого системного диска, файла. куста реестра или папки. По умолчанию для учетной записи "Система (System)" предоставлены права полного доступа.

Учетная запись система на вкладке безопасность

Служба, которая запускается в контексте учетной записи LocalSystem, наследует контекст обеспечения безопасности Диспетчера управления службами (SCM). Пользовательский идентификатор безопасности (SID) создается из значения SECURITY_LOCAL_SYSTEM_RID. Учетная запись не связывается с учетной записью любого пользователя, который начал работу. Она имеет несколько значений:

  • Ключ реестра HKEY_CURRENT_USER связан с пользователем по умолчанию, а не текущим пользователем. Чтобы обратиться к профилю другого пользователя, имитируйте этого пользователя, а затем обратитесь к HKEY_CURRENT_USER.
  • Служба может открыть ключ реестра HKEY_LOCAL_MACHINE\SECURITY.
  • Служба представляет мандат компьютера для удаленного сервера. Если служба открывает командное окно (на экране дисплея) и запускает командный файл, пользователь должен нажать CTRL+C, чтобы закончить работу командного файла и получить доступ к окну команды с привилегиями LocalSystem.

Привилегии LocalSystem

  1. SE_ASSIGNPRIMARYTOKEN_NAME
  2. SE_AUDIT_NAME
  3. SE_BACKUP_NAME
  4. SE_CHANGE_NOTIFY_NAME
  5. SE_CREATE_PAGEFILE_NAME
  6. SE_CREATE_PERMANENT_NAME
  7. SE_CREATE_TOKEN_NAME
  8. SE_DEBUG_NAME
  9. SE_INC_BASE_PRIORITY_NAME
  10. SE_INCREASE_QUOTA_NAME
  11. SE_LOAD_DRIVER_NAME
  12. SE_LOCK_MEMORY_NAME
  13. SE_PROF_SINGLE_PROCESS_NAME
  14. SE_RESTORE_NAME
  15. SE_SECURITY_NAME
  16. SE_SHUTDOWN_NAME
  17. SE_SYSTEM_ENVIRONMENT_NAME
  18. SE_SYSTEM_PROFILE_NAME
  19. SE_SYSTEMTIME_NAME
  20. SE_TAKE_OWNERSHIP_NAME
  21. SE_TCB_NAME
  22. SE_UNDOCK_NAME

Сценарии вызова командной строки из под System

Давайте приведу интересную задачку по нашей теме. Предположим у вас есть доменная среда Active Directory. Вы с помощью инструмента групповой политики или SCCM развернули специализированное ПО, под названием StaffCop, или что-то другое. В момент развертывания или последующей настройки вы задали так, что пользователь даже при наличии прав локального администратора в своей системе не может останавливать службу и менять ее тип запуска, вопрос может ли локальный администратор это поправить и выключить службу?

Способы вызвать командную строку от имени системы

Я очень давно занимаюсь системным администрированием и уяснил давно принцип, если у вас есть права локального администратора, то вы можете все. Обойти любые ограничения и политики. Напоминаю. что я для тестирования развернул агента StaffCop, это такая программа для слежки, которую используют всякие шарашкины конторы. Агент по умолчанию запрещает выключение службы и изменение ее типа. Выглядит, это вот таким образом. Служба работает, имеет имя StaffCop Scheduler, но вот сделать с ней ничего не получается, все не активно.

Как вызвать командную строку от имени системы

Для того, чтобы вызвать cmd от имени системы, вам необходимо скачать замечательный набор утилит PSTools, а конкретно нам будет нужна утилита PsExec.exe или PsExec64.exe. Если вы мой постоянный читатель, то вы помните, что я их использовал, чтобы удаленно включить RDP доступ на сервере. Скачать сборник PSTools можно с официального сайта по ссылке ниже, или же у меня с сайта.

https://download.sysinternals.com/files/PSTools.zip

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

Просмотр содержимого PSTools

Теперь когда подготовительный этап готов, то можно продолжать. Откройте обязательно командную строку от имени администратора и введите команду:

cd путь до вашей папки с утилитой PsExec.exe

Мой пример: cd C:\Дистрибутивы\PSTools

Командой dir я проверил, что это та папка и я вижу нужные мне утилиты PsExec.exe или PsExec64.exe.

Вызов cmd от system

Последним шагом мы текущее окно командной строки из под текущего пользователя перезапустим от имени Local System. Пишем:

PsExec64.exe -i -s cmd.exe или PsExec -i -s cmd.exe

В итоге я вижу, что у меня открылось новое окно командной строки и оно уже работает в контексте "C:\Windows\system32>", это и означает учетную запись Local System (Системная учетная запись)

успешный вызов командной строки от имени системы

Теперь давайте из под нее попробуем остановить нашу службу StaffCop Scheduler. Для этого есть ряд команд:

net stop "StaffCop Scheduler"

или

sc stop Scheduler

Остановка службы Windows от имени учетной записи SYSTEM

Далее вам необходимо изменить тип запуска и поменять с автоматического на отключена. Для этого пишем команду:

sc config Scheduler start= disabled

Изменение типа запуска службы в cmd от имени системы

Как видим все успешно отработало. Если посмотреть оснастку "Службы", то видим вот такую картину.

Способы вызвать командную строку от имени системы

Так, что имея права локального администратора и утилиту PsExec.exe, можно делать что угодно. Надеюсь, что вы теперь будите чаще вызывать окно командной строки от имени учетной записи системы. Давайте с вами напишем небольшой батник, который будет из ярлыка вызывать cmd от имени Local System. Создадим тестовый файл, поменяем ему сразу расширение с txt на cmd и откроем его текстовым редактором. Пропишем код:

cmd.exe && cd C:\Дистрибутивы\PSTools\ && psexec -i -s cmd.exe

bat файл для вызова командной строки от имени SYSTEM

Щелкаем по файлу правым кликом и выбираем пункт "Запуск от имени администратора". В результате чего у вас сразу будет запущено окно cmd с правами учетной записи SYSTEM. Проверить, это можно введя команду whoami. Ответ NT AUTORITY\СИСТЕМА.

Вызов cmd от system

Если нужно запустить удаленно командную строку от имени NT AUTORITY\СИСТЕМА, то выполните такую конструкцию

psexec -s \\имя компьютера cmd.exe

Удаленно вызвать cmd от имени системы

На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Оцените статью
Настройка серверов windows и linux
Добавить комментарий

  1. юзер

    выдаёт

    Error establishing communication with PsExec service on A1-??:
    ╤хЄхтр  яряър эхфюёЄєяэр. ╟р шэЇюЁьрЎшхщ ю ЁрчЁх°хэшш яЁюсыхь т ёхЄш юсЁрЄшЄхё№
    ъ ёяЁртюўэющ ёшёЄхьх Windows.

    почему?
    вин7.

  2. Nansy

    У меня такая же ошибка. Как исправить?

  3. Иван Семин автор

    Ошибка из-за того, что сервис не запущен на той стороне либо вы запускаете команду не от имени администратора, на каком именно этапе у вас возникает ошибка? Так же если у вас в пути на русском языке есть пробелы, то возьмите путь в двойные кавычки с обеих сторон

  4. Роман Рыбин

    Иван, доводилось ли вам сталкиваться с ситуацией когда whoami возвращает например karavan\admin, а set в числе прочего возвращает USERNAME=SYSTEM и USERPROFILE=C:\Windows\system32\config\systemprofile.

  5. Игорь

    у меня не меняется статус службы на автоматический. Некорректный параметр failed 87. пишу
    sc config имя_службы start= auto