利用WinRM服务进行横向移动
概述
WinRM是Windows Remote Managementd(Windows远程管理)的简称,它基于Web服务管理(WebService-Management)标准,WinRM2.0默认端口5985(HTTP端口)或5986(HTTPS端口)。
如果所有的机器都是在域环境下,则可以使用默认的5985端口,否则的话需要使用HTTPS传输(5986端口)。
WinRM允许远程用户使用工具和脚本对Windows服务器进行管理并获取数据,Windows server 2008 r2默认开启此服务,server 2012开始并集成在系统中默认开启,家庭版的计算机是默认关闭。
这种远程连接不容易被客户端察觉,也不会占用远程连接数。
官方文档:https://learn.microsoft.com/en-us/windows/win32/winrm/portal
开启WinRM服务
powershell 运行 enable-psremoting或者cmd运行winrm quickconfig(高权限用户执行)
查询本计算机的端口状态
运行WinRM
两种方式,一种为winrs命令,一种为powershell脚本
winrs命令方式
winrs -r:http://目标机器IP地址:5985 -u:机器名\用户名 -p:password "执行的命令"
winrs -r:http://目标机器IP地址:5985 -u:机器名\用户名 -p:password cmd #调用cmd命令
winrs -r:http://192.168.110.6:5985 -u:administrator -p:a1b2c3.. "ipconfig"
当出现以上错误时,要在客户端上执行下面这条命令,设置为信任所有主机,再去连接即可,执行这条命令
winrm set winrm/config/Client @{TrustedHosts="*"}
再次连接
powershell脚本
Invoke-Command 是 PowerShell 上的一个命令,用来在本地或远程计算机上执行命令
Invoke-Command -ComputerName TARGET -ScriptBlock { dir c:\ }
Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -command {命令}
Invoke-Command -ComputerName TARGET -Credential 域名\用户名 -ScriptBlock {Get-Culture}
Invoke-Command -ComputerName 192.168.110.6 -Credential administrator -Command {ipconfig}
流量分析
执行命令的同时进行wireshark抓包
winrs -r:http://192.168.110.6:5985 -u:administrator -p:a1b2c3.. "whoami"
首先观察挑战值数据包,在http协议中authenticate经过了加密,其中包含了挑战值还有访问机器的相关OS信息
再观察response值数据包
认证通过后,HTTP协议通过POST传输数据,data中就是具体的数据,不过进行了加密
winrm通信特征
- 默认情况下,winrm使用TCP端口5985(HTTP)和5986(HTTPS)进行通信
- winrm支持不同类型的身份验证和安全协议,如基本身份验证、NTLM和kerberos
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论