PowerShell Remoting笔记

admin 2022年3月26日08:26:39评论311 views字数 2819阅读9分23秒阅读模式

PowerShell Remoting本质上是一种原生的Windows远程命令执行功能,它是建立在Windows远程管理(WinRM)协议之上。根据我的谷歌的结果,Windows Vista Service Pack 1或更高版本,Windows7和Windows Server2008和Windows Server2012操作系统都带有WinRM。

启用PowerShell Remoting

在开始使用之前,我们要确保PowerShell Remoting已经在你的电脑上配置成功。

PowerShell命令行中以管理员身份运行。

Enable-PSRemoting force

这已经足够了,如果遇到问题的话,运行以下命令确保WinRM服务已经设置好自动启动。

Set-Service WinRM -StartMode Automatic

Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}

设置远程所有主机为信任主机。

Set-Item WSMan:localhostclienttrustedhosts -value *

Get-Item WSMan:localhostClientTrustedHosts

使用PowerShell Remoting执行远程命令

在远程主机中执行单条命令。

Invoke-Command命令能够用来在远程主机上执行命令。它可以以当前用户身份来运行,或者是使用一个非域主机的一个伪造的令牌。命令在下面。

Invoke-Command ComputerName MyServer1 -ScriptBlock {Hostname}

Invoke-Command ComputerName MyServer1 -Credentials demoserveradmin -ScriptBlock {Hostname}

如果ActiveDirectory PowerShell模块已经被安装了,那就有可能使用管道在许多主机上快速的执行命令。以下是一个基本的例子。

Get-ADComputer -Filter * -properties name | select @{Name="computername";Expression={$_."name"}} | Invoke-Command -ScriptBlock {hostname}

有的时候,在远程主机上运行本地存储的脚本是不错的选择。

Invoke-Command -ComputerName MyServer1 -FilePath C:pentestInvoke-Mimikatz.ps1

Invoke-Command -ComputerName MyServer1 -FilePath C:pentestInvoke-Mimikatz.ps1 -Credentials demoserveradmin

另外,如果您的动态生成的命令或函数被传递到远程系统,您可以使用调用表达式调用执行命令,如下图所示。


$MyCommand = "hostname"
$MyFunction = "function evil {write-host `"Getting evil...`";iex -command $MyCommand};evil"
invoke-command -ComputerName MyServer1 -Credentials demoserveradmin -ScriptBlock {Invoke-Expression -Command "$args"} -ArgumentList $MyFunction

在远程系统上建立一个交互的PowerShell控制台

一个交互式的powershell命令行能够通过Enter-PsSession命令来获得。有点像ssh的样子。类似"Invoke-Command", "Enter-PsSession"这些命令能够以当前用户的身份运行,或者是使用一个非域主机的一个伪造的令牌。命令在下面。

Enter-PsSession –ComputerName server1.domain.com
Enter-PsSession –ComputerName server1.domain.com –Credentials domainserveradmin

如果你想要退出powershell会话,那么执行

Exit-PsSession

创建一个后台会话

PowerShell Remoting另外一个比较帅气的命令是如果运行New-PsSession这条命令,能够让用户创建一个后台运行的会话。如果你想对多个系统执行命令的话,那么后台运行的会话能够派上用场。

类似"New-PsSession"这条命令能够以当前用户的身份运行,或者是使用一个非域主机的一个伪造的令牌。命令在下面。

New-PSSession -ComputerName server1.domain.com

New-PSSession ComputerName server1.domain.com Credentials domainserveradmin

如果ActiveDirectory PowerShell模块已经被安装了,那就有可能会在多个系统上创建后台会话(方法有很多)。下面这条命令是如何在所有的域主机中创建后台会话。这条命令能够以当前用户的身份运行,或者是使用一个非域主机的一个伪造的令牌。

New-PSDrive -PSProvider ActiveDirectory -Name RemoteADS -Root "" -Server a.b.c.d -credential domainuser

cd RemoteADS:

Get-ADComputer -Filter * -Properties name | select @{Name="ComputerName";Expression={$_."name"}} | New-PSSession

列出所有的后台会话

使用Get-PsSession命令能够列出所有确定了的后台会话。

与后台会话交互

最开始的时候,我使用类似metasploit的获取会话的方式,当时这种方式只有一小部分是稳定的。下面的命令是如何使用一个会话id与一个活动的会话进行交互。

Enter-PsSession id 3

通过后台会话执行命令

如果你的目的是在所有的活动会话上执行命令。那么"Invoke-Command" 和 "Get-PsSession"能够一起使用。

Invoke-Command -Session (Get-PSSession) -ScriptBlock {Hostname}

移除后台会话

最后,你可以通过Disconnect-PsSession命令移除所有的活动会话。


原文来自:https://blog.netspi.com/powershell-remoting-cheatsheet/

翻译:小歪

本文始发于微信公众号(关注安全技术):PowerShell Remoting笔记

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月26日08:26:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PowerShell Remoting笔记https://cn-sec.com/archives/503166.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息