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

<p>в настоящее время я использую vista, и я хотел бы вручную выполнить те же операции, что и моя служба windows. так как служба windows работает под учетной записью локальной системы, я хотел бы эмулировать то же самое поведение. по сути, я хотел бы запустить cmd.exe под учетной записью локальной системы.</p><p>в интернете я нашел информацию, которая предлагает запустить cmd.exe с помощью команды dos task scheduler at, но я получил предупреждение vista, что «из-за улучшений безопасности эта задача будет выполняться в указанное время, но не в интерактивном режиме». вот пример команды:</p><pre><code>at 12:00 /interactive cmd.exe </code></pre><p>в другом решении предлагалось создать вторичную службу windows с помощью элемента управления службами (sc.exe), который просто запускает cmd.exe. </p><pre><code>c:\sc create runcmdaslsa binpath= "cmd" type=own type=interact c:\sc start runcmdaslsa </code></pre><p>в этом случае служба не запускается и выдает следующее сообщение об ошибке:</p><pre><code>failed 1053: the service did not respond to the start or control request in a timely fashion. </code></pre><p>третьим предложением было запустить cmd.exe через запланированное задание. хотя вы можете запускать запланированные задачи под разными учетными записями, я не верю, что локальная системная учетная запись является одной из них.</p><p>я также пытался использовать runas, но думаю, что я столкнулся с тем же ограничением, что и при запуске запланированной задачи.</p><p>до сих пор каждая из моих попыток заканчивалась неудачей. какие-либо предложения?</p>

<p>хотя я лично не тестировал, у меня есть веские основания полагать, что вышеуказанное решение at command будет работать для xp, 2000 и server 2003. в ходе тестирования моего и брайанта мы определили, что тот же подход делает не работает с vista или windows server 2008 - скорее всего, из-за дополнительной безопасности и устаревшего параметра/interactive. </p><p>тем не менее, я наткнулся на эту <a href="http://verbalprocessor.com/2007/12/05/running-a-cmd-prompt-as-local-system">статью</a> , которая демонстрирует использование <a href="http://download.sysinternals.com/files/pstools.zip">pstools</a> from <a href="http://sysinternals.com/">sysinternals</a> (которая была приобретена microsoft в июле 2006 года.) я запустил командную строку с помощью следующего и неожиданно работал под учетной записью локального администратора, как по волшебству:</p><pre><code>psexec -i -s cmd.exe </code></pre><p>pstools работает хорошо. это легкий, хорошо документированный набор инструментов, который обеспечивает подходящее решение моей проблемы.</p><p>большое спасибо тем, кто предложил помощь.</p>

<ol> <li> <a href="https://technet.microsoft.com/en-us/sysinternals/bb896649">скачать psexec.exe от sysinternals</a> .</li> <li>поместите его в свой диск c: \.</li> <li>войдите в систему как обычный пользователь или администратор и используйте следующую команду: <code>cd \</code>. это поместит вас в корневой каталог вашего диска, где находится psexec.</li> <li>используйте следующую команду: <code>psexec -i -s cmd.exe</code> где -i для интерактивной, а -s для системной учетной записи.</li> <li>когда команда завершится, будет запущена командная консоль. тип <code>whoami</code>; это будет сказать «система»</li> <li>откройте диспетчер задач. убить explorer.exe.</li> <li>из командной строки с повышенными привилегиями введите <code>start explorer.exe</code>.</li> <li>когда explorer запущен, обратите внимание на имя «system» в строке меню «пуск». теперь вы можете удалить некоторые файлы в каталоге system32, которые как администратор вы не можете удалить или как администратор, вам придется приложить немало усилий, чтобы изменить разрешения для удаления этих файлов.</li> </ol><p>пользователи, которые пытаются переименовать или удалить системные файлы в любом защищенном каталоге windows, должны знать, что все файлы windows защищены dacls, при переименовании файла вы должны сменить владельца и заменить trustedinstaller, которому принадлежит файл, и сделать любого пользователя таким, как пользователь, который принадлежит к группе администраторов как владелец файла, затем попытайтесь переименовать его после изменения разрешения, оно будет работать, и пока вы работаете в windows explorer с привилегиями ядра, вы несколько ограничены с точки зрения доступа к сети по соображениям безопасности, и это все еще тема исследования для меня, чтобы получить доступ обратно</p>

<p>нашел ответ <a href="http://blogs.msdn.com/adioltean/articles/271063.aspx">здесь</a> , который, кажется, решил проблему, добавив/k start к параметру binpath. так что это даст вам:</p><p><code>sc create testsvc binpath= "cmd /k start" type= own type= interact</code></p><p>тем не менее, бен сказал, что это не сработало для него, и когда я попробовал его на windows server 2008, он создал процесс cmd.exe в локальной системе, но он не был интерактивным (я не мог видеть окно). </p><p>я не думаю, что есть простой способ сделать то, что вы просите, но мне интересно, зачем вы вообще это делаете? вы просто пытаетесь увидеть, что происходит, когда вы запускаете свой сервис? похоже, вы могли бы просто использовать ведение журнала, чтобы определить, что происходит, вместо того, чтобы запускать exe как локальную систему ...</p>

<p>я бы порекомендовал вам разработать минимальный набор разрешений, который действительно нужен вашей службе, и использовать его, а не слишком привилегированный контекст локальной системы. например, <a href="http://msdn.microsoft.com/en-us/library/ms684188(vs.85).aspx">локальная служба</a> .</p><p>интерактивные службы больше не работают - или, по крайней мере, больше не отображают пользовательский интерфейс - в windows vista и windows server 2008 из-за <a href="http://www.microsoft.com/whdc/system/vista/services.mspx">изоляции сеанса 0</a> .</p>

<h2>использование secure desktop для запуска <code>cmd.exe</code> от имени <code>system</code></h2><p>мы можем легко получить доступ к ядру через <code>cmd</code> в windows xp/vista/7/8.1, подключив отладчик:</p><pre><code>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" </code></pre><ol> <li> <p>запустите <code>cmd</code> от имени администратора</p> </li> <li> <p>затем используйте эту команду в elevated:</p> <pre><code> 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" </code></pre></li> <li> <p>затем запустите <code>osk</code> (на экранной клавиатуре). он по-прежнему не работает с уровнем целостности системы, если вы проверите через process explorer, но если вы можете использовать osk в сеансе службы, он будет работать как <code>nt authority\system</code></p> </li> </ol><p>поэтому я подумал, что вы должны запустить его на secure desktop.</p><p>запустите любой файл от имени администратора. когда появятся подсказки uac, просто нажмите <kbd>win</kbd>+<kbd>u</kbd> и запустите <code>osk</code>, и вместо этого он запустит <code>cmd</code>. затем в приглашении с повышенными правами введите <code>whoami</code>, и вы получите <code>nt authority\system</code>. после этого вы можете запустить explorer из системной команды shell и использовать системный профиль, но вы несколько ограничены в том, что вы можете делать в сети через привилегии system из соображений безопасности. я добавлю больше объяснений позже, поскольку я обнаружил это год назад.</p><h2>краткое объяснение того, как это происходит</h2><p>запуск <code>cmd.exe</code> под учетной записью локальной системы без использования <code>psexec</code>. этот метод запускает технику отладки отладчика, которая была обнаружена ранее, и у этой методики есть свои преимущества: ее можно использовать для отлова какого-то хитрого/вредоносного червя или вредоносного по в отладчике и запуска другого исполняемого файла, чтобы остановить распространение или временно повредить. здесь этот ключ реестра перехватывает экранную клавиатуру в собственном отладчике windows и вместо этого запускает cmd.exe, но cmd по-прежнему будет работать с привилегиями пользователя, вошедшего в систему, однако если мы запустим cmd в session0, мы сможем получить системную оболочку. поэтому мы добавим еще одну идею: мы добавляем cmd на защищенный рабочий стол, помним, что безопасный рабочий стол запускается в сеансе 0 под системной учетной записью, и мы получаем системную оболочку. поэтому, когда вы запускаете что-либо с повышенными правами, вы должны отвечать на запросы uac и uac на темном, неинтерактивном рабочем столе, и как только вы видите это, вы должны нажать <kbd>win</kbd>+<kbd>u</kbd> и затем выберите <code>osk</code>, вы получите <code>cmd.exe</code>, работающий с правами локальной системы. есть еще больше способов получить доступ к локальной системе с <code>cmd</code></p>

<p>альтернативой этому является process hacker, если вы запускаете run as ... (interactive не работает для людей с улучшениями безопасности, но это не имеет значения), и когда окно открывается, поместите service в тип блока и поместите system в ящик пользователя и поместите c:\users\windows\system32\cmd.exe, оставьте остальные, нажмите кнопку ок, и boch, у вас есть окно с cmd и запустите, как система, теперь выполните другие шаги для себя, потому что я предлагаю вам их знать.</p>

<p>есть другой способ. существует программа под названием powerrun, которая позволяет запускать повышенные cmd. даже с правами trustedinstaller. это позволяет как для консоли, так и для команд gui. </p>

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

<p>я использую утилиту <a href="https://github.com/jschicht/runasti"><em>runasti</em></a> для запуска как <em>trustedinstaller</em> (с высокими привилегиями). утилита может использоваться даже в режиме восстановления windows (в режим, который вы вводите с помощью <code>shift</code> + <code>restart</code>), утилита <em>psexec</em> там не работает. но вам нужно добавить свои пути <code>c:\windows</code> и <code>c:\windows\system32</code> (не <code>x:\windows</code> и <code>x:\windows\system32</code>) к переменной окружения <code>path</code>, иначе <em>runasti</em> не будет работать в режиме восстановления, он просто выведет: <em>adjusttokenprivileges для seimpersonatename: не все привилегии или группы, на которые ссылаются, назначаются вызывающему абоненту</em>.</p>