Як запустити CMD.exe в обліковому записі локальної системи?


144

На даний момент я працюю на Vista, і я хотів би вручну виконати ті самі операції, що і моя служба Windows. Оскільки служба Windows працює за допомогою облікового запису локальної системи, я б хотів наслідувати цю саму поведінку. В основному, я хотів би запустити CMD.EXE під обліковим записом локальної системи.

Я знайшов в Інтернеті інформацію, яка передбачає запуск CMD.exe за допомогою команди DOS Task Scheduler AT, але я отримав попередження Vista про те, що "завдяки покращенню безпеки це завдання буде виконуватися у виключений час, але не в інтерактивному режимі". Ось зразок команди:

AT 12:00 /interactive cmd.exe

Ще одне рішення запропонувало створити вторинну службу Windows через Service Service Control (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 - найімовірніше, через додаткову безпеку та застарілий / інтерактивний комутатор.

Однак я натрапив на цю статтю, яка демонструє використання 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. Коли запускається програма Explorer, в рядку меню запуску зазначайте назву "система". Тепер ви можете видалити деякі файли в каталозі system32, які як адміністратор ви не можете видалити, або як адміністратор, вам доведеться дуже намагатися змінити дозволи для видалення цих файлів.

Користувачі, які намагаються перейменувати або видалити системні файли в будь-якому захищеному каталозі Windows, повинні знати, що всі файли Windows захищені DACLS під час перейменування файлу. Ви повинні змінити власника та замінити TrustedInstaller, який є власником файла, і зробити будь-якого користувача, як користувача, який належить до групи адміністраторів як власник файлу, тоді спробуйте перейменувати його після зміни дозволу, він буде працювати, і під час запуску windows Explorer з привілеями ядра ви дещо обмежені з точки зору доступу до мережі з міркувань безпеки, і це все ще тема дослідження щоб я отримав доступ назад


Я використовую цей трюк, щоб запускати провідника як підвищеного користувача. Особливо при підключенні через VNC до ПК, де потрібно встановити мережеві настройки, наприклад. +1 від мене
TPAKTOPA

Ця хитрість зараз здається недійсною. Моя ОС - це Windows 7 SP1. Я зайшов, як побачив "систему" в рядку меню "Пуск". Але все ж при перейменуванні файлу в папку system32 в ньому написано, що дозволу відмовлено. Зараз папка system32 належить TrustedInstaller, і навіть локальний обліковий запис системи має лише спеціальні дозволи.
Шаохуа Лі

якщо ви намагаєтеся перейменувати або видалити будь-який файл, який знаходиться у будь-якій захищеній папці Windows, якою він належить TrustedInstaller, поточному користувачеві належить володіти файлом, змінивши дозвіл, тоді ви можете перейменовувати чи скасовувати його. Це часто використовується для видалення slmgr. EXE та інші системні файли, щоб отримати безлімітний доступ до слідової версії Windows без її оплати
ворон

10

Знайдений відповідь тут , який , здається , щоб вирішити цю проблему шляхом додавання / к почати з параметром binPath. Отже, це дасть вам:

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

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

Я не думаю, що існує простий спосіб зробити те, що ви просите, але мені цікаво, чому ви це взагалі робите? Ви просто намагаєтесь побачити, що відбувається під час запуску служби? Здається, ви могли просто використовувати журнал, щоб визначити, що відбувається, а не запускати exe як локальну систему ...


Привіт Брайант. Це рішення по суті окреслено у питанні. Це насправді працює для вас? Це призводить до невдачі для мене. Дякую.
Бен Грісволд

Брайант, у мене є служба, яка керує встановленням та видаленням іншого компонента. Я хочу надати нашій групі підтримки простий спосіб "насильно" видалити компонент, якщо моя служба не виконає свою роботу. Під час тестування я хотів би також змогти "примусити" видалити. Thx на допомогу ..
Бен Грісволд

1
@Ben: Чи є у вас тип запуску послуги "Виявлення інтерактивних послуг" на "Ручний" або "Інвалідизований"?
Привіт71

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. Потім використовуйте цю команду в Піднесеному:

     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(екранна клавіша). Він все ще не працює з системним рівнем цілісності, якщо ви перевіряєте провідник процесів, але якщо ви можете використовувати OSK в сеансі обслуговування, він буде працювати якNT Authority\SYSTEM

тож у мене виникла ідея, що ви повинні запустити її на безпечному робочому столі.

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

Коротке пояснення того, як це відбувається

Запуск Cmd.exeпід локальним обліковим записом без використанняPsExec. Цей метод запускає техніку налагодження налагодження, яка була виявлена ​​раніше, добре, що ця методика має свої переваги. Її можна використовувати для лову деякого хитрого / шкідливого хробака чи зловмисного програмного забезпечення у налагоджувальному пристрої та запускає інший exe замість того, щоб зупинити розповсюдження чи пошкодження тимчасово. ось цей ключ реєстру потрапляє на екранну клавіатуру в рідному відладчику Windows і замість цього запускає cmd.exe, але cmd все одно буде працювати з правами користувачів, які ввійшли в систему, але якщо ми запустимо cmd у session0, ми можемо отримати системну оболонку. тому ми додаємо сюди ще одну ідею, ми охоплюємо cmd на захищеному робочому столі, запам’ятайте безпечні запуски робочого столу в сесії 0 під обліковим записом системи, і ми отримаємо системну оболонку. Отож, коли ви запускаєте що-небудь на підвищеному рівні, ви повинні відповідати на підказку UAC та на підказку UAC на темному неінтерактивному робочому столі, і як тільки ви побачите це, вам доведеться натиснути Win+, Uа потім вибратиOSKви будете CMD.exeпрацювати під локальними привілеями системи. Є ще більше способів отримати доступ до локальної системиCMD


у вас є ще більше способів запустити cmd, як підвищено за допомогою привілеїв NT
ворон

Це дуже приємно. Дуже хороша. Я ненавиджу покладатися на сторонні додатки, щоб щось зробити. Це дуже швидко і просто. Постійна також :-) Єдине питання полягає в тому, що вам потрібно запустити всі команди у вікні UAC і що лише деякі програми відкриваються. Наприклад, Explorer.exe не відкривається. Я хочу експериментувати, якщо є інший спосіб спровокувати це. Я хочу мати змогу запускати інші програми у рідному середовищі Windows, без обмеження UAC певними програмами. Чудовий матеріал Ворон!
KonaRin

3

Альтернативою цьому є хакер процес, якщо ви запустите як ... (Інтерактив не працює для людей із посиленнями безпеки, але це не має значення), і коли вікно відкриється, введіть Сервіс у тип коробки та введіть SYSTEM у поле користувача та поставте C : \ Користувачі \ Windows \ system32 \ cmd.exe залиште решту, натисніть "ОК", і ви отримаєте вікно з cmd на ньому та запустіть як система тепер зробіть інші кроки для себе, тому що я пропоную вам знати їх


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: Не всі привілеї або групи, на які посилається, призначаються абоненту .


0

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

Не потрібно нічого встановлювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.