Как вы запускаете CMD.exe под учетной записью локальной системы?

144

В настоящее время я использую 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, но думаю, что я столкнулся с тем же ограничением, которое было обнаружено при выполнении запланированной задачи.

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

Бен Грисволд
источник

Ответы:

221

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

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

psexec -i -s cmd.exe

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

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

Бен Грисволд
источник
11
Мне больше нравится это с -dдобавленным, так что я могу продолжать использовать консоль, с которой я его запустил.
SamB
1
Я только что попробовал на Vista x64 и получил "Служба PsExec, работающая на ... это несовместимая версия". Пробовал прямо из \\ live.sysinternals.com \ tools \ psexec и последней версии двоичного файла. Кажется, что нет версии для x64
ZXX
52
  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. Когда проводник запущен, обратите внимание на имя «система» в строке меню «Пуск». Теперь вы можете удалить некоторые файлы в каталоге system32, которые как администратор вы не можете удалить или как администратор, вам придется приложить немало усилий, чтобы изменить разрешения для удаления этих файлов.

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

вороной
источник
Я использую этот трюк, чтобы часто запускать проводник с повышенными правами. Особенно при подключении через VNC к ПК, где нужно настроить сетевые настройки, например. +1 от меня
TPAKTOPA
Этот трюк кажется недействительным сейчас. Моя ОС - Windows 7 SP1. Я дошел до того, что увидел «систему» ​​в строке меню «Пуск». Но все же при переименовании файла в папке system32, это говорит, что разрешение отклонено. Папка system32 теперь принадлежит TrustedInstaller, и даже локальная системная учетная запись имеет только специальные разрешения.
Шаохуа Ли
Если вы попытаетесь переименовать или удалить какой-либо файл, который находится в любом защищенном каталоге Windows и принадлежит TrustedInstaller, ваш текущий пользователь должен владеть этим файлом, изменив разрешение, затем вы можете переименовать или удалить его. Это часто используется для удаления slmgr. exe и другие системные файлы, чтобы получить неограниченный доступ к trail-версиям windows, не платя за это
ворон
10

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

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

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

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

Bryant
источник
Привет Брайант. Это решение по сути изложено в вопросе. Это на самом деле работает для вас? Это приводит к провалу для меня. Спасибо.
Бен Грисволд
Брайант, у меня есть служба, которая управляет установкой и удалением другого компонента. Я хочу предоставить нашей группе поддержки простой способ «принудительного» удаления компонента, если моя служба не справляется со своей работой. Во время тестирования я хотел бы также иметь возможность «форсировать» удаление. Спасибо за помощь ..
Бен Griswold
1
@Ben: У вас есть тип запуска службы «Обнаружение интерактивных служб», установленный на «Вручную» или «Отключен»?
Hello71
1
Чтобы разрешить интерактивные службы для Server 2012, HKLM\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServicesнеобходимо установить значение 0 (по умолчанию 1)
Иван Чау
6

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

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

Майк Диммик
источник
4
Майк, спасибо за ответ. Хотя я согласен с вашей рекомендацией и думаю, что все выиграют от вашего ответа, я не верю, что вы ответили на вопрос.
Бен Грисволд
@Ben Griswold: Он, однако, точно указывает, что делает старый путь неудачным в Vista. +1.
SamB
1
Вопрос "Как вы запускаете CMD.exe под учетной записью локальной системы?"
Жако Преториус
2
@SamB, и это то, для чего нужны комментарии, когда у вас есть что внести, что на самом деле не является ответом .
Synetech
6

Использование 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.exeCMD

вороной
источник
ya есть еще больше способов запустить cmd с повышенными привилегиями с правами NT
raven
Это очень мило. Очень хорошо. Я ненавижу полагаться на сторонние дополнения, чтобы что-то сделать. Это супер быстро и легко. Постоянный также :-) Единственная проблема заключается в том, что вы должны выполнить все команды в окне UAC и открыть только некоторые приложения. Explorer.exe не открывается, например. Я хочу поэкспериментировать, если есть другой способ вызвать это. Я хочу иметь возможность запускать другие приложения в собственной среде Windows без ограничения UAC определенных приложений. Отличная вещь Ворон!
KonaRin
3

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

James5001
источник
2

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

Александр Хаакан
источник
1

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


источник
0

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

anton_rh
источник
0

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

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

Пол Харрис
источник