PsExec — это портативный инструмент от Microsoft, который позволяет удалённо запускать процессы с использованием учётных данных любого пользователя. Это немного похоже на программу удалённого доступа, но вместо того, чтобы управлять удаленным компьютером с помощью мыши, команды отправляются на компьютер через командную строку.
Что такое PsExec и PsTools
На самом деле, PsExec это всего лишь один из инструментов из пакета PsTools. Программа PsExec используется чаще всего, поэтому обычно упоминается она, но в данной инструкции будут рассмотрены как примеры использования PsExec, так и примеры использования других инструментов из пакета PsTools.
Скачать PsExec (PsTools)
Как уже было сказано, PsExec является частью PsTools, который является частью Sysinternals от Microsoft. Набор программ PsTools распространяется бесплатно, ссылка на скачивание: https://download.sysinternals.com/files/PSTools.zip
Распакуйте скаченный архив, например, в папку PSTools.
Программа PsExec не требует установки. Но для запуска исполнимых файлов в командной строке нужно указать путь до них в файловой системе. Это можно сделать двумя способами:
PsExec Tool
1. Перед запуском программ перейти в папку со скаченными исполнимыми файлами, например, у меня это папка C:UsersMiAlDownloadsPSTools, тогда, используя команду cd, в папку с файлами я перехожу следующим образом:
2. Скопировать папку PSTools в директорию C:WindowsSystem32 тогда все файлы PSTools будут доступны следующим образом:
Выберите любой вариант, который вам удобнее.
Что нужно для PsExec
Для работы PsExec на удалённом компьютере не требуется никакого программного обеспечения — то есть на компьютере, которым вы будете управлять, не нужно устанавливать никакую клиентскую часть. Но нужно соблюдение некоторых условий, чтобы PsExec работала, поэтому если первая попытка не удалась, то проверьте следующие требования.
1. На обеих машинах, т.е. удалённом компьютере (которым будем управлять) и локальном компьютере (с которого будем управлять), должен быть включён общий доступ к файлам и принтерам.
2. В современных Windows 10 у меня PsExec работала только с учётной записью «Администратор», видимой по той причине, что необходимы административные общие ресурсы.
На серверах Windows учётная запись «Администратор» включена по умолчанию.
В более старых версиях Windows, видимо, достаточно включения общего сетевого ресурса $admin для предоставления доступа к папке Windows. В Windows 10 папки $admin как сетевого ресурса нет вовсе.
3. Проверьте, что сетевой доступ к файлам и принтерам включён в файерволе. Для этого нажмите Win+r, введите там firewall.cpl.
Во вкладке «Разрешение взаимодействия с приложениями или компонентами в брандмауэре защитника Windows»
найдите «Общий доступ к файлам и принтерам» и убедитесь, что стоит галочка в столбце «Частная» — если его там нет, то нажмите кнопку «Изменить параметры», поставьте галочку и нажмите ОК.
Доступ к командной строке удаленного компьютера
4. Убедитесь, что оба компьютера принадлежат к одной и той же рабочей группе (Workgroup).
5. Убедитесь, что вы правильно вводите пароль администратора удалённого компьютера.
Как включить учётную запись администратора
В моих тестах на последних Windows 10 и Windows Server 2019 команда PsExec работает только с учётной записью Администратор. Поэтому в этом разделе описано, как активировать пользователя Администратор, который по умолчанию присутствует в Windows, но в обычных, не серверных версиях, этот пользователь отключён.
Пользователя Администратор должен быть активен только на удалённом компьютере, где будут выполняться команды с помощью PsExec. На локальном компьютере учётная запись Администратор не требуется.
1. Нажмите клавиши Win+r, чтобы открыть окно запуска команды.
2. Введите lusrmgr.msc и нажмите Enter.
3. Откройте Пользователи.
4. Щёлкните правой кнопкой мыши Администратор и выберите Свойства.
5. Снимите флажок «Отключить учётную запись» и нажмите ОК.
6. Снова щёлкните правой кнопкой мыши учётную запись администратора и выберите «Задать пароль».
7. Укажите пароль для учётной записи администратора и нажмите «ОК».
Как запустить команду на удалённой системе
Основное использование команды PsExec — это просто запуск команды в удалённой системе. Чтобы запустить команду в удалённой системе, мы должны указать имя пользователя и пароль вместе с командой для запуска на удалённом компьютере.
Общий вид команды для запуска на удалённой системе:
.psexec \КОМПЬЮТЕР -u Администратор -p ПАРОЛЬ КОМАНДА АРГУМЕНТЫ КОМАНДЫ
- \КОМПЬЮТЕР — имя компьютера Windows или его IP адрес в локальной сети
- -u Администратор — если операционная система на ином языке, то имя пользователя также будет другим, например, на английском это Administrator
- -p ПАРОЛЬ — пароль пользователя Администратор. Эту опцию можно пропустить, тогда команда запросит пароль для ввода
- КОМАНДА — программа, которую нужно выполнить на удалённой системе. После команды могут идти её опции.
Пример выполнения команды ipconfig на удалённом компьютере \hackware-server от имени пользователя Администратор с паролем Aa1:
.psexec \HACKWARE-SERVER -u Администратор -p Aa1 ipconfig
Как мы видим, команда выполняется в удалённой системе без проблем.
У удалённого компьютера HACKWARE-SERVER IP адресом является 192.168.0.53, поэтому следующая команда эквивалентна предыдущей:
.psexec \192.168.0.53 -u Администратор -p Aa1 ipconfig
Обратите внимание, что в Windows (в противоположность Linux), регистр букв в именах компьютеров, командах и путях не имеет значения — можно использовать буквы любого регистра в любых местах.
Как в PsExec запустить команду с аргументами
Аргументы программы достаточно указать через пробел после самой команды:
.psexec \192.168.0.53 -u Администратор -p Aa1 tracert hackware.ru
Как перенаправить вывод команды PsExec
После запуска команды в удалённой системе вывод команды будет напечатан в текущий стандартный вывод, который является нашей текущей оболочкой (окном командной строки). Этот вывод может быть перенаправлен в файл с помощью символа >. Если у нас много удалённых систем для запуска команд, эта опция будет очень полезна.
.psexec \HACKWARE-SERVER -u Администратор -p Aa1 ipconfig > HACKWARE-SERVER_ifconfig
В этом примере выходные данные команды ipconfig сохраняются в файл с именем HACKWARE-SERVER_ifconfig.
Для вывода содержимого файла можно использовать команду Get-Content или её более короткий псевдоним cat:
Pass The Hash (использование хеша вместо пароля)
Указывать в командной строке пароль плохо для безопасности. А использование интерактивного ввода не позволяет использовать psexec.exe в скриптах. Выход из этой ситуации — использовать хеш пароля.
PsExec не может напрямую использовать хеш (хотя это ошибочно утверждается в некоторых инструкциях). Для применения хеша (Pass The Hash) с PsExec нужно использовать Windows Credential Editor или Mimikatz или Metasploit.
Пример выполнения Pass The Hash с PsExec. Вначале в Mimikatz:
sekurlsa::pth /user:ПОЛЬЗОВАТЕЛЬ /domain:РАБОЧАЯ_ГРУППА /ntlm:ХЕШ_NTLM
Затем PsExec запускается без указания имени пользователя и пароля
PsExec.exe \192.168.1.2 cmd.exe
Как копировать исполнимый файл с локального на удалённую систему
PsExec может использоваться для копирования исполнимых файлов из локальной системы в удалённую систему. Мы задействуем опцию -c для операции копирования. По завершении команд скопированный экземпляр будет удалён.
В этом примере мы скопируем cmd.exe. После завершения операции копирования в удалённой системе будет запущен cmd.exe.
.psexec \HACKWARE-SERVER -u Администратор -p Aa1 -c cmd.exe
Как мы видим, мы получаем оболочку cmd в удалённой системе.
С опцией -c можно указать любой файл.
Ещё один пример:
psexec \J3BCD011 -c «Z:filesccleaner.exe” cmd /S
В последнем примере как использовать PsExec мы используем опцию -c для копирования программы ccleaner.exe на удалённый компьютер J3BCD011, а затем запускаем выгруженный файл с параметром /S, который говорит CCleaner включить тихую установку (не требует ввода пользователя). Добавление такого аргумента требует cmd.
Как запустить приложение с графическим интерфейсом на удалённой системе
Операционные системы Windows предоставляют по умолчанию графический интерфейс. PsExec можно использовать для открытия приложения с графическим интерфейсом на удалённой системе в указанной пользовательской консоли. Пользовательская консоль просто означает рабочий стол пользователя.
В этом примере мы запустим notepad.exe на удаленной системе. Пользователь удаленного системного администратора может взаимодействовать с этим блокнотом. То есть программа откроется на удалённой системе, как-либо взаимодействовать с ней на локальной системе не получится.
.psexec \HACKWARE-SERVER -u Администратор -p Aa1 -i notepad.exe
Поскольку используется опция -i, программа откроется в интерактивном режиме, что означает, что она фактически запустится на экране удалённого компьютера. Если бы -i была опущена в вышеупомянутой команде, то команда выполнялась бы в скрытом режиме, что означает не показывать какие-либо диалоговые окна или другие окна.
THE-IT-FILES
Рассмотрим пример установки, удаления и обновления 1С Предприятия v8.2 в корпоративной сети. Для этого нам потребуется утилита PsExec из набора PSTools . При этом дистрибутивы для 1С Предприятия v8.2 находятся на файловом сервере Shared в папках 1Cv82_8.2.16.368 и 1Cv82_8.2.17.169 соответственно.
Установка пакета:
psexec -s -d \ RemoteComputerName msiexec /i «\Shared1Cv82_8.2.16.3681CEnterprise 8.2.msi» /qnb
Удаление пакета:
psexec -s -d \ RemoteComputerName msiexec /x «\Shared1Cv82_8.2.16.3681CEnterprise 8.2.msi» /qnb
Обновление уже установленного пакета версии 8.2.16.368 на версию 8.2.17.169:
psexec -s -d \ RemoteComputerName msiexec /fvomus «\Shared1Cv82_8.2.17.1691CEnterprise 8.2.msi» /qnb
Источник: it-files.blogspot.com
Psexec удаленно установить программу
Задача такая:
ОС WinXP/Win7
нужно запустить программу/скрипт на удаленном ПК
соблюдая несколько простых условия:
1. запуск программы/скрипта происходит на удаленном ПК в ответ на какие то действия на управляющем ПК
т.е. путем нажатия условной кнопки, запуска скрипта или наступления какого либо другого события на управляющем ПК
2. возможность выбора пользователя под которым будет происходит выполнение программы/скрипта
(или под пользователем под которым загружен удаленный ПК или управляющий ПК)
3. без установки дополнительных программ
Пользователь управляющего ПК(под которым мы работаем) имеет админские права и на нашем и на удаленном ПК.
Ну и второй вопрос на связанную тему.
Я знаю что такие штуки как Psexec или DameWare работают через свои службы которые они опять таки устанавливают и запускают на удаленном ПК.
И насколько я понимаю они используют не какие то дыры, а вполне официальные механизмы.
На мой взгляд вполне логично иметь возможность и права запускать код на любом из администрируемых ПК.
P.S.
С помощью Psexec я могу запускать некоторые нужные мне команды.
Но при этом упорно не запускаются скрипты VBS.
P.S.S. Мне кажется что нужно копать в сторону wmi.
O tempora! O mores!
Re: Удаленный запуск программы/скрипта
От: | merlin88 |
Дата: | 08.04.15 06:31 |
Оценка: |
Здравствуйте, Cicero, Вы писали:
C>1. запуск программы/скрипта происходит на удаленном ПК в ответ на какие то действия на управляющем ПК
C>т.е. путем нажатия условной кнопки, запуска скрипта или наступления какого либо другого события на управляющем ПК
C>2. возможность выбора пользователя под которым будет происходит выполнение программы/скрипта
C>(или под пользователем под которым загружен удаленный ПК или управляющий ПК)
C>3. без установки дополнительных программ
Не факт что подойдет по пункту 3.
Рассматривали nncron? http://www.nncron.ru/
Re: Удаленный запуск программы/скрипта
От: | acDev |
Дата: | 10.04.15 18:49 |
Оценка: |
Здравствуйте, Cicero, Вы писали:
C>С помощью Psexec я могу запускать некоторые нужные мне команды.
C>Но при этом упорно не запускаются скрипты VBS.
Относительно недавно писал аналог PsExec с блек-джеком и ш.
Сложность была не в запуске под опред. пользователем, а в работе PowerShell с консолью http://rsdn.ru/forum/winapi/5781011
PsExec запускает удалённый сервис через IPC, а моя утиль — через WMI.CreateProcess (далее процесс при необходимости запускает сервис).
Моя утиль может работать как через cmd.exe, так и через PowerShell. Да и имеется поддержка каскадного проброса управления (число промежуточных хостов не ограничено).
Запуск VBS не тестировал, но полагаю, что через PowerShell проблем не будет.
Утиль выложить не могу, т.к. заказчик крайне против.
Re[2]: Удаленный запуск программы/скрипта
От: | Cicero | www.ya.ru |
Дата: | 10.04.15 20:52 | |
Оценка: |
Здравствуйте, acDev, Вы писали:
D>Относительно недавно писал аналог PsExec с блек-джеком и ш.
D>Сложность была не в запуске под опред. пользователем, а в работе PowerShell с консолью http://rsdn.ru/forum/winapi/5781011
D>PsExec запускает удалённый сервис через IPC, а моя утиль — через WMI.CreateProcess (далее процесс при необходимости запускает сервис).
Я в начале года начал было изучать PowerShell, но выяснил что не во всех ПК которые я обслуживаю он установлен(или старая версия).
Поэтому пока с PowerShell притормозил.
Пока пытался все решить через psexec, но видимо придется изучать WMI.
Чувствую что мне тоже придется с ним дружить.
D>Утиль выложить не могу, т.к. заказчик крайне против.
Это понятно.
Мне бы подсказок — в какую сторону грести, было бы легче.
Сам я программы не пишу(только скрипты и батники), но чувствую что до этого может дойти, если ничего подходящего не найду.
Спасибо за ответ!
O tempora! O mores!
Re: Удаленный запуск программы/скрипта
От: | akasoft |
Дата: | 11.04.15 09:51 |
Оценка: |
Здравствуйте, Cicero, Вы писали:
C>Но при этом упорно не запускаются скрипты VBS.
Обычно там есть какое-то сообщение об ошибке в консоли или журналах.
Re: Удаленный запуск программы/скрипта
От: | kochetkov.vladimir | https://kochetkov.github.io |
Дата: | 14.04.15 11:59 | |
Оценка: |
Здравствуйте, Cicero, Вы писали:
C>С помощью Psexec я могу запускать некоторые нужные мне команды.
C>Но при этом упорно не запускаются скрипты VBS.
Re[2]: Удаленный запуск программы/скрипта
От: | Cicero | www.ya.ru |
Дата: | 15.04.15 04:49 | |
Оценка: |
Нет.
Почитаю(с англицким у меня не очень).
А там есть решение задачи: запуск скрипта на удаленной машине под правами пользователя авторизованного в данный момент?
O tempora! O mores!
Re[3]: Удаленный запуск программы/скрипта
От: | kochetkov.vladimir | https://kochetkov.github.io |
Дата: | 15.04.15 08:59 | |
Оценка: |
Здравствуйте, Cicero, Вы писали:
C>А там есть решение задачи: запуск скрипта на удаленной машине под правами пользователя авторизованного в данный момент?
Нет, там про проблемы запуска vbs с помощью psexec. Как выполнить код в контексте текущего пользователя я ответил в КСВ.
Источник: www.rsdn.org