Как подключиться к удаленной машине через WinRM в Python (pywinrm) с помощью учетной записи домена?
Я хотел бы написать сценарий в Python, используя библиотеку pywinrm, чтобы иметь возможность подключаться к удаленной машине через WinRM.
Скрипт отлично работает, когда я использую локального пользователя. Когда я использую пользователя домена, я получаю следующее исключение:
Что касается конфигурации WinRM на удаленной машине:
Не могли бы вы посоветовать, как исправить эту проблему?
Как включить RDP на удаленной машине?
Метод 1. Командная строка
Для включения RDP через командную строку необходимо:
1. Запустить командную строку от имени Администратора
2. Выполнить команду:
Преимущества: быстро, работает операционных системах начиная с 2003 и XP
Недостатки: Долго, если требуется включить на большом количестве компьютеров не вс из которых Online
Если на машине включен FireWall, который блокируется RDP, то этот метод не поможет
Требования: Требуются права локального администратора на удаленной машине
Компьютер должен быть в сети
Замечание: Данный метод может быть полезен, когда надо быстро отключить RDP на машине, для этого достаточно выполнить команду:
Метод 2. PowerShell
Для включения RDP через PowerShell необходимо:
1. запустить PowerShell от имени администратора
2. Выполнить команду:
Преимущества: Можно выполнить сразу на нескольких машинах из списка (или подгрузить из файла список машин)
Недостатки: Не подходит для версий операционных систем ниже Windows 2008 и Vista
Требования: На удаленной машине требуется включенный сервис WinRM и разрешенный на FireWall (Начиная с Windows Server 2012 включена по умолчанию).
Метод 3. Доменная групповая политика
Для включения RDP через GPO требуется создать новую групповую политику (или внести изменение в существующую). В созданной политике перейти в раздел: Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Connections и выставить параметр: Allow Users to connect remotely by using Remote Desktop Services, в значение на Enable.
После чего применить групповую политику на контейнер в котором находится сервер (или серверы), для которого следует включить RDP (если в контейнере много машин, то отфильтровать GPO только для необходимых машин)
Преимущества: Универсальный способ настройки доменных компьютеров и серверов, Будет применяться на все машины для которых выполнена настройка
Недостатки: На применение параметров для включенных машин может уйти до 90 минут
Требования: Права в домене на создание групповых политик, опыт работы с групповыми политиками.
Основные параметры файлов RDP
Параметры командной строки утилиты mstsc.exe не позволяют в полной мере выполнить тонкие настройки удаленного подключения, необходимость в которых может возникнуть при использовании разных профилей подключения к разным терминальным серверам. Для этой цели используются файлы .rdp , содержимое которых можно редактировать командой mstsc /edit или вручную, с помощью текстового редактора. Пример содержимого RDP-файла:
screen mode id:i:2
use multimon:i:0
desktopwidth:i:1920
desktopheight:i:1080
session bpp:i:16
winposstr:s:0,1,796,77,1782,765
compression:i:1
keyboardhook:i:2
audiocapturemode:i:0
videoplaybackmode:i:1
connection type:i:2
displayconnectionbar:i:1
disable wallpaper:i:1
allow font smoothing:i:0
allow desktop composition:i:0
disable full window drag:i:1
disable menu anims:i:1
disable themes:i:0
disable cursor setting:i:0
bitmapcachepersistenable:i:1
full address:s:Server01.ru
audiomode:i:0
redirectprinters:i:1
redirectcomports:i:0
redirectsmartcards:i:1
redirectclipboard:i:1
redirectposdevices:i:0
redirectdirectx:i:1
autoreconnection enabled:i:1
authentication level:i:2
prompt for credentials:i:0
negotiate security layer:i:1
remoteapplicationmode:i:0
alternate shell:s:
shell working directory:s:
gatewayhostname:s:
gatewayusagemethod:i:4
gatewaycredentialssource:i:4
gatewayprofileusagemethod:i:0
promptcredentialonce:i:1
use redirection server name:i:0
drivestoredirect:s:
screen mode id:i: — 1 — удаленный сеанс выполняется в оконном режиме, 2 — в полноэкранном. Редактируется на вкладке ”Экран” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”.
use multimon:i: — 0 — запрет поддержки нескольких мониторов, 1 — разрешение поддержки нескольких мониторов. Может использоваться в Windows 7 /Windows Server 2008 и более поздних версиях.
desktopwidth:i: — ширина рабочего стола. Выбирается на вкладке ”Экран” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”.
desktopheight:i: — высота рабочего стола. Выбирается на вкладке ”Экран” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”.
session bpp:i: — глубина цвета. Выбирается в группе ”Цвета” на вкладке ”Экран” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”.
winposstr:s: — позиция и размеры окна в формате WINDOWPOS
compression:i: — 0 — не использовать сжатие данных, 1 — использовать.
keyboardhook:i: — Определяет, как интерпретируются сочетания клавиш Windows. Значение этого параметра соответствует настройке в поле ”Клавиатура” на вкладке ”Локальные ресурсы” окна ”Параметры средства ”Подключение к удаленному рабочему столу”. 0 — на локальном компьютере. 1 — на удаленном компьютере. 2 — только в полноэкранном режиме.
audiocapturemode:i: — Определяет, где воспроизводится звук. Значение этого параметра соответствует настройкам ”Удаленный звук” на вкладке ”Локальные ресурсы” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”. 0 — на клиентском компьютере. 1 — на удаленном компьютере. 2 — звук не воспроизводится.
videoplaybackmode:i: — 0 — не использовать RDP efficient multimedia streaming при воспроизведении видео. 1 — использовать.
connection type:i:2 — тип соединения для достижения максимального быстродействия. Соответствует настройкам ”Быстродействие” на вкладке ”Дополнительно” окна ”Параметры” средства ”Подключение к удаленному рабочему столу” Определяется типом выбранной скорости соединения.
Для утилиты mstsc.exe Windows 10 вкладке ”Дополнительно” соответствует вкладка ”Взаимодействие”
displayconnectionbar:i: — Отображение панели подключений при входе в систему удаленного компьютера в полноэкранном режиме. Значение этого параметра соответствует состоянию флажка ”Отображать панель подключений при работе на полном экране” на вкладке ”Экран” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”. 0 — не отображать панель подключений. 1 — отображать панель подключений.
disable wallpaper:i: — запрет отображения фонового рисунка удаленного рабочего стола. Соответствует настройкам в группе ”Быстродействие”- флажок ”Фоновый рисунок рабочего стола” на вкладке ”Дополнительно” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”. 0 — отображать фоновый рисунок. 1 — не отображать фоновый рисунок.
allow font smoothing:i:- разрешение сглаживания шрифтов. Соответствует настройкам в группе ”Быстродействие”- флажок ”Сглаживание шрифтов” на вкладке ”Дополнительно” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”. 0 — не использовать сглаживание. 1 — использовать.
allow desktop composition:i:0 — Соответствует настройкам в группе ”Быстродействие”- флажок ”Сглаживание шрифтов” на вкладке ”Дополнительно” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”. 0 — не использовать сглаживание. 1 — использовать.
disable full window drag:i: — Отображение содержимого папки при перетаскивании. Значение этого параметра соответствует состоянию флажка ”Отображать содержимое окна при перетаскивании” на вкладке ”Дополнительно” окна ”Параметры” средства ”Подключение к удаленному рабочему столу”. 0 — отображать содержимое при перетаскивании. 1 — не отображать.
disable menu anims:i: — запрет визуальных эффектов. Значение этого параметра соответствует состоянию флажка ”Визуальные эффекты при отображении меню и окон” на вкладке ”Дополнительно” окна ”Параметры”. 0 — использовать визуальные эффекты, 1 — не использовать.
disable themes:i: — запрет использования тем. 0 — использовать темы. 1 — не использовать темы.
disable cursor setting:i:0 — запрет настроек курсора. 0 — настройка курсора разрешена. 1 — запрещена.
bitmapcachepersistenable:i:1 — Кэширование точечных рисунков на локальном компьютере. Значение этого параметра соответствует состоянию флажка ”Постоянное кэширование точечных рисунков” на вкладке ”Дополнительно” окна ”Параметры”. 0 — не использовать кэширование. 1 — использовать кэширование.
full address:s: — имя или IP-адрес удаленного компьютера, к которому выполняется подключение по RDP. При необходимости, можно указать номер используемого TCP порта.
audiomode:i: — определяет, где воспроизводится звук. Значение этого параметра соответствует записи в поле ”Удаленный звук” на вкладке ”Локальные ресурсы” окна ”Параметры”. 0 — на клиентском компьютере. 1 На удаленном компьютере. 2 — звук отключен.
redirectprinters:i: — использование принтеров во время удаленного сеанса. Значение этого параметра соответствует состоянию флажка ”Принтеры” на вкладке ”Локальные ресурсы” окна ”Параметры”. 0 — не использовать локальные принтеры во время удаленного сеанса. 1 — использовать автоматическое подключение принтеров.
redirectcomports:i: — использование последовательных портов локального компьютера при подключении к удаленному рабочему столу. 0 — не использовать. 1 — использовать.
redirectsmartcards:i: — использование смарт-карт локального компьютера при подключении к удаленному рабочему столу. 0 — не использовать. 1 — использовать.
redirectclipboard:i: — использовать общий буфер обмена для локального и удаленного компьютера. Значение этого параметра соответствует состоянию флажка ”Буфер обмена” на вкладке ”Локальные ресурсы” окна ”Параметры”. 0 — не использовать общий буфер обмена. 1 — использовать.
redirectposdevices:i: — перенаправления устройств, которые используют Microsoft Point of Service (POS). 0 — не использовать перенаправление. 1 — использовать.
redirectdirectx:i: — перенаправление DirectX. 0 — не использовать перенаправление DirectX. 1 — использовать.
autoreconnection enabled:i:1 — автоматическое подключение при разрыве соединения с удаленным компьютером. Значение этого параметра соответствует состоянию флажка ”Восстановить соединение при разрыве” на вкладке ”Дополнительно” окна ”Параметры”. 0 — не использовать автоматическое восстановление соединения. 1 — использовать.
authentication level:i: — уровень проверки подлинности для удаленного подключения. Определяет действия в случае, когда не удается подтвердить подлинность удаленного компьютера. Определяется настройкой группы ”Проверка подлинности сервера” на вкладке ”Подключение”. В Windows 10 – вкладке ”Подключение” соответствует вкладка ”Взаимодействие”. 0 — если не удалось подтвердить подлинность терминального сервера, то подключаться без предупреждения. 1 — не подключаться. 2 — подключаться с предупреждением.
prompt for credentials:i: — запрос пользователю на подтверждение учетных данных в случае, если они были сохранены ранее. 0 — не запрашивать учетные данные, если они были предварительно сохранены. 1 — всегда запрашивать учетные данные.
negotiate security layer:i: — уровень шифрования сессии RDP. 0 — сессия с шифрованием TLS 1.0 (SSL) будет использоваться в случае поддержки клиентом. Если клиент его не поддерживает, будет использоваться стандартное встроенное шифрование RDP. 1 — удаленная сессия будет использовать шифрование x.224
remoteapplicationmode:i: — режим работы с удаленным приложением. 0 — режим работы с удаленным рабочим столом. 1 — режим работы с удаленным приложением.
alternate shell:s: — имя альтернативной оболочки пользователя.
shell working directory:s: — рабочий каталог оболочки пользователя.
gatewayhostname:s: — имя сервера шлюза удаленных рабочих столов. Значения параметров сервера шлюза определяется группой ”Подключение из любого места” на вкладке ”Подключение” (для Windows 10 – на вкладке ”Дополнительно”).
gatewayusagemethod:i:4 — метод использования сервера шлюза удаленных рабочих столов. 0 — никогда не использовать сервер шлюза удаленных рабочих столов. 1 — всегда использовать сервер шлюза удаленных рабочих столов. 2 — не использовать сервер шлюза удаленных рабочих столов для локальных клиентов. 3 — использовать настройки по умолчанию сервера шлюза удаленных рабочих столов. 4 — не использовать сервер шлюза удаленных рабочих столов, но в настройке ”Подключение из любого места” – ”Параметры” включен флажок ”Не использовать сервер шлюза удаленных рабочих столов для локальных адресов”
gatewaycredentialssource:i:4 — используемый метод авторизации пользователя. 0 — использовать NTLM (запрос пароля) . Соответствует выбору параметра ”Метод входа” – ”Запрашивать пароль (NTLM)” в настройках ”Подключение из любого места” – ”Параметры”. 1 — использовать смарт-карты. Параметры, определяющие использование сервера шлюза удаленных рабочих столов и параметры входа и параметры подключения взаимосвязаны, и изменение одного из них, может вызвать изменение другого.
drivestoredirect:s: — перенаправление дисковых устройств локального компьютера. Значение определяется настройками на вкладке ”Локальные ресурсы” – ”Подробнее”
В данном случае, к удаленному сеансу будут подключены локальные диски C: и D: , что будет соответствовать значению:
Если включить флажок ”Дисководы, которые будут подключены позже”, значение параметра будет следующим:
Поддерживаемые перенаправления периферийных устройств локального компьютера и синтаксис содержимого RDP-файла зависят от версии RDP и могут отличаться в незначительной степени.
Приемы работы с удаленными системами через PowerShell
Я часто работаю с командами на удаленных системах через PowerShell как во время пентестов, так и при решении повседневных задач. Запуска удаленных команд происходит через протокол WinRM (Windows Remote Management), который, насколько мне известно, поддерживается в Windows Vista SP 1, Windows 7, Windows Server 2008 и Windows Server 2012.
Автор: Scott Sutherland
Я часто работаю с командами на удаленных системах через PowerShell как во время пентестов, так и при решении повседневных задач. Запуска удаленных команд происходит через протокол WinRM (Windows Remote Management), который, насколько мне известно, поддерживается в Windows Vista SP 1, Windows 7, Windows Server 2008 и Windows Server 2012.
Первоначальные настройки
Перед тем как начать работу с удаленной системой, необходимо выполнить настройку.
1. Запустите консоль PowerShell от имени администратора и выполните следующую команду:
Команда выше разрешает запуск команд на удаленных системах. Если у вас возникли проблемы, используйте команды ниже:
2. Убедитесь в том, что служба WinRM запускается автоматически.
# Устанавливаем нужный режим
Set-Service WinRM -StartMode Automatic
# Проверяем, что служба запущена
Get-WmiObject -Class win32_service | Where-Object
3. Устанавливаем у всех хостов статус «достоверный» (можно сделать позже).
# Доверяем всем хостам
Set-Item WSMan:localhostclienttrustedhosts -value *
# Проверяем настройку достоверных хостов
Примеры работы с удаленными системами
Перед ознакомлением с примерами рекомендую вам прочитать прекрасную статью, посвященную работе с удаленными командами в PowerShell.
Запуск одиночной команды на удаленной системе
Команда «Invoke-Command» предназначена для запуска команд на удаленных системах. Можно работать от имени текущего пользователя, либо использовать стороннюю учетную запись, если вы работаете в системе, которая не является частью домена:
Invoke-Command –ComputerName MyServer1 -ScriptBlock
Invoke-Command –ComputerName MyServer1 -Credentials demoserveradmin -ScriptBlock
Если установлен модуль для работы с ActiveDirectory, становится возможным запуск команд на множестве систем при помощи каналов (pipeline):
Get-ADComputer -Filter * -properties name | select @> |
Invoke-Command -ScriptBlock
Иногда на удаленной системе требуется запустить скрипт, хранящийся локально:
Invoke-Command -ComputerName MyServer1 -FilePath C:pentestInvoke-Mimikatz.ps1
Invoke-Command -ComputerName MyServer1 -FilePath C:pentestInvoke-Mimikatz.ps1 -Credentials demoserveradmin
Если вы генерируете команды или функции динамически, которые затем передаются на удаленную систему можно использовать связку команд invoke-expression и invoke-command:
$MyCommand = «hostname»
$MyFunction = «function evil ;evil»
invoke-command -ComputerName MyServer1 -Credentials demoserveradmin -ScriptBlock
-ArgumentList $MyFunction
Организация интерактивной консоли на удаленной системе
Организовать интерактивную консоль в PowerShell на удаленной системе можно при помощи команды «Enter-PsSession» (немного похожа на SSH). Команда «Enter-PsSession» также запускается либо от имени текущего пользователя, либо при помощи альтернативной учетной записи:
Enter-PsSession –ComputerName server1.domain.com
Enter-PsSession –ComputerName server1.domain.com –Credentials domainserveradmin
Закрытие сессии выполняется при помощи команды «Exit-PsSession»:
Создание фоновых сессий
Еще одна полезная возможность позволяет создавать фоновые сессии (команда «New-PsSession»). Фоновые сессии могут оказаться полезны при запуске множества команд во множестве систем. Как и предыдущие команды, команда «New-PsSession» запускается от имени текущего пользователя, либо при помощи альтернативной учетной записи:
New-PSSession -ComputerName server1.domain.com
New-PSSession –ComputerName server1.domain.com –Credentials domainserveradmin
Если установлен модуль для работы с ActiveDirectory, становится возможным единовременное создание фоновых сессий для множества систем (этот трюк можно выполнить различными способами). Ниже показан пример создания фоновых сессий для всех систем, входящих в домен. В примере создание сессий происходит в системе, не входящей в домен, при помощи альтернативной учетной записи домена.
New-PSDrive -PSProvider ActiveDirectory -Name RemoteADS -Root »
» -Server a.b.c.d -credential domainuser
cd RemoteADS:
Get-ADComputer -Filter * -Properties name | select @>
| New-PSSession
Вывод перечня фоновых сессий
Как только создано несколько фоновых сессий, можно просмотреть их перечень при помощи команды «Get-PsSession».
Взаимодействие с фоновыми сессиями
Первое время у меня было ощущение схожее с тем, как я работал с сессиями в MetaSploit. Однако фоновые сессии в PowerShell чуть более стабильны. Ниже показан пример взаимодействия при помощи идентификатора сессии:
Enter-PsSession –id 3
Для выхода из сессии используйте команду «Exit-PsSession». Сессия перейдет обратно в фоновый режим.
Запуск команд через фоновые сессии
Если вы хотите выполнить команду во всех активных сессиях, используйте связку команд «Invoke-Command» и «Get-PsSession».
Invoke-Command -Session (Get-PSSession) -ScriptBlock
Удаление фоновых сессий
Для удаления всех активных сессий используйте команду «Disconnect-PsSession»
Удаленные команды в PowerShell открывают огромные возможности, как для администраторов, так и для пентестеров. Вне зависимости от ситуации, как вы будете работать с удаленными системами, все сводится к следующему:
- Для запуска одиночной команды на удаленной системе используйте «Invoke-Command».
- Для взаимодействия с одиночной системой используйте «Enter-PSSession».
- Если вы хотите запускать множество команд во множестве систем, используйте фоновые сессии.
Надеюсь, эта статья оказалась для вас полезной.
Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!
Примечания по команде MSTSC
- Для создания подключения к удаленной консоли необходимо быть администратором на сервере, к которому происходит подключение.
- Для каждого пользователя файлы .rdp хранятся в папке «Мои документы» как скрытые.
Для подключения к удаленному рабочему столу сервера с IP-адресом 192.168.1.1 необходимо ввести команду: mstsc /v:192.168.1.1
Как решить ошибку с подключением на Windows XP
Иногда, если пользователь с ПК, на котором установлена ОС WinXP, пытается получить доступ к машине с более современной версией программного обеспечения, может выскакивать ошибка, указывающая на то, что удаленный компьютер не может пройти проверку подлинности на уровне сети. Чтобы решить эту проблему, вам нужно:
- Зайти в «Панель управления», раздел «Система» и далее «Настройка удаленного доступа»;
- Убрать флажок напротив пункта «Разрешить подключения только с компьютеров, на которых работает удаленный рабочий стол с проверкой подлинности на уровне сети (рекомендуется)».
Когда все манипуляции закончатся, рекомендуем вернуть данный параметр на место для обеспечения более качественной защиты от проникновения в систему сторонних лиц.