Запуск PowerShell от имени СИСТЕМА (NT AUTHORITY\SYSTEM)

Обновлено 20.09.2019

PowerShell logo

Добрый день! Уважаемые читатели и гости одного из популярнейших блогов по системному администрированию Pyatilistnik.org. В прошлый раз мы с вами подробно рассмотрели командлет Restart-Computer и научились с его помощью производить локальную или удаленную перезагрузку компьютера или сервера, это полезный навык. В сегодняшней публикации я бы хотел вас научить запускать оболочку PowerShell с максимальными правами от имени системной учетной записи "СИСТЕМА (NT AUTHORITY\SYSTEM)" или ее еще иногда называют Local System. Это то же полезный скил, который вас может сильно выручить в разных обстоятельствах. Давайте от слов к практике.

Что можно делать с PowerShell от имени SYSTEM

Я не буду расписывать, что из себя представляет локальная, системная учетная запись, напомню лишь, что из под нее работает подавляющее количество сервисов Windows и она имеет максимальные права на все в вашей ОС (Папки, файлы, кусты реестра, тома). Имея запущенное окно PowerShell от системной учетной записи вы можете абсолютно все в этой системе, например можете отключать службы, которые были ограничены, или подключаться к чужой RDP сессии, поправить защищенные ветки реестра, например, как в случае с ошибкой 10016.

Методы запуска PowerShell от имени системной учетной записи

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

  1. Классический метод использование утилиты PSexec
  2. Через планировщик событий
  3. Через скрипт choco

Запуск PowerShell от учетной записи NT AUTHORITY\SYSTEM из PSexec

PSexec - это одна из утилит легендарного набора SysInternals Марка Руссиновича. Я ее уже использовал при открытии CMD от имени системы, тут принцип будет такой же. Первое, что вы должны сделать, это скачать PSexec либо у меня, либо по ссылке ниже:

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

Далее вам необходимо ваш архив извлечь, дабы получить папку с утилитами. У вас есть два варианта запуска PSexec, из командной строки или же из свой PowerShell. Давайте опробуем командную строку, которую вы должны ОБЯЗАТЕЛЬНО открыть от имени администратора, далее вы должны перейти в cmd в расположение с утилитой PSexec. Делается это командой:

cd путь до вашей папки с утилитой PsExec.exe
Мой пример: cd C:\Дистрибутивы\PSTools

После чего вы пишите команду, которая запустит окно PowerShell от имени системы:

psexec.exe -i -s powershell.exe или psexec64.exe -i -s powershell.exe

В результате у вас откроется дополнительное окно PowerShell в режиме администратора и от имени "nt authority\система". Проверить, это можно командой whoami.

Запуск PowerShell от учетной записи NT AUTHORITY\SYSTEM из PSexec

То же самое можно сделать и из самой PowerShell(), тут вам нужно будет так же открыть PowerShell от имени администратора и ввести команды:

./psexec.exe -i -s powershell.exe

запуск PowerShell из под системы

Чтобы удаленно получить окно PowerShell через PSexec, вам необходимо выполнить:

.\PsExec.exe -s \\svt2019s01 powershell.exe

Где svt2019s01, это имя моего сервера с Windows Server 2019. Как видим идет попытка подключения, где на удаленном компьютере запускается служба PSexec, вам будут необходимы права локального администратора там. Если подключение не проходит, то у вас блокируется брандмауэром, убедитесь, что порт WinRM (TCP 5985) у вас разрешен.

Подключение к удаленному окну PowerShell

После успешного подключения можно ввести команду hostname, чтобы посмотреть, правильно ли вы подключились, ну и посмотреть командой whoami, из под кого запущен PowerShell, как видно из скриншота, это учетная запись nt authority\система.

Удаленный запуск PowerShell из под системы

Так же вы можете из оболочки запустить команду:

Start-Process -FilePath cmd.exe -Verb Runas -ArgumentList '/k C:\PSTools\PsExec.exe -i -s powershell.exe'

Она так же все запустит, единственное поменяйте в ней путь до утилиты PSexec на свой.

Starting PowerShell as NT AUTHORITY-SYSTEM

Запуск PowerShell от учетной записи NT AUTHORITY\SYSTEM из планировщика заданий

Данный метод более изощренный нежели использование внешней утилиты PSexec, но я уверен, что его так же полезно знать. В окне выполнить введите команду taskschd.msc.

Открываем планировщик задач

Открываем библиотеку планировщика заданий и щелкаем по нему правым кликом, из контекстного меню выберите пункт "Создать простую задачу"

Создание новой задачи в планировщике для открытия PowerShell от системной учетной записи

Задаем ее имя у меня оно будет "Запуск PowerShell NT".

Указание имени нового задания в планировщике Windows

В настройках тригера выставим запуск задачи "Однократно".

запуск PowerShell из под системы из планировщика

Задаем время запуска.

Настройка времени запуска задания в планировщике

Оставляем пункт "Запустить программу" и нажимаем далее.

Атрибуты запуска PowerShell из под системы

Тут нам необходимо заполнить два пункта:

  1. Поле программы или сценария
  2. Аргумент

Заполнение атрибутов запуска задания планировщика Windows

В поле программы вам нужно вписать строку в зависимости от разрядности вашей архитектуры:

  • x86 : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
  • x64 : %SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe

В качестве аргумента, вам необходимо указать путь до нашего скрипта, расположенного по пути C:\Scripts\Get-CurrentUser.ps1

–NoProfile –ExecutionPolicy Bypass –File C:\Demo\Get-CurrentUser.ps1

запуск скрипта PowerShell из под системы

ExecutionPolicy, это команда позволяющая выполнять не подписанные скрипты.

Содержимое Get-CurrentUser.ps1

[PSCustomObject]@{
'env:USERNAME' = $env:USERNAME
'whoami' = whoami.exe
'GetCurrent' = [Security.Principal.WindowsIdentity]::GetCurrent().Name
} | Format-List | Out-File -FilePath C:\Scripts\whoami.txt

заканчиваем создание простого задания, обязательно выставите галку "Открыть окно "Свойств" для этой задачи после нажатия кнопки "Готово".

Свойства задания в планировщике

заканчиваем создание простого задания, обязательно выставите галку "открыть окно "Свойств" для этой задачи после нажатия кнопки "Готово". Далее у вас откроется окно свойств данной задачи, вы можете заметить, что она по умолчанию выполняется от того пользователя, кто ее создал, в моем примере, это ROOT\Администратор, это нужно поменять. Нажмите кнопку изменить.

Задаем учетную запись SYSTEM для запуска PowerShell

Если у вас русская Windows, то в окне поиска введите "СИСТЕМА", если английская версия, то введите SYSTEM.

запуск PowerShell из под SYSTEM

В результате вы увидите, что задача запускается от системной учетной записи (nt authority\система).

запуск PowerShell из под системы-17

В итоге если все хорошо, то у вас должен был быть запущен скрипт Get-CurrentUser.ps1, который в той же папке в файл whoami записал из под кого он выполнился, как видно, это nt authority\система (GetCurrent:NT AUTHORITY\СИСТЕМА). Таки образом вы можете запускать скрипты от имени системной учетной записи.

Успешный запуск PowerShell из под системы-18

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

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *